原文地址:https://www.namidame.tech/umeng_sdk.html
- 微信授权登录接入需要先到微信开放平台申请好应用的APPID,交纳300大洋费用得到授权登录权限后才能使用,此处不再赘述。
- 接入的两种方式
-- 微信SDK接入:使用微信官方SDK接入,需要分“获取code票据”和“获取access_token”两步来获得授权关系接口的调用凭证
-- 友盟SDK接入:友盟已集成各种接口接入,直接一个方法搞定 - 本文记录使用友盟SDK接入微信授权登录中的几处关键代码,使用的是友盟SDK 6.1.1,最新版请到官网下载
- 最新版与旧版SDK用法有出入,官网文档也不是太完善,本文仅针对6.1.1版本在Eclipse工程接入记录
初始化SDK
最好在Android应用入口处初始化SDK
public class XXApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
UMShareAPI.get(this);
PlatformConfig.setWeixin(WX_APP_ID, WX_APP_SECRET);
}
}
创建WXEntryActivity
- 在应用包名下创建wxapi包,包内创建WXEntryActivity
- 例如应用包名为com.test.test,则创建com.test.test.wxapi.WXEntryActivity
public class WXEntryActivity extends WXCallbackActivity implements IWXAPIEventHandler {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
AndroidManifest声明
在manifest文件上声明回调用到的WXEntryActivity,包名改成自己项目的包名。官网说这里一个字也不能改,试了试好像改一改也没关系的。。
<activity
android:name="com.test.test.wxapi.WXEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait" />
发送授权请求
public void requestAuth() {
this.runOnUiThread(new Runnable() {
@Override
public void run() {
UMShareAPI mShareAPI = UMShareAPI.get(this);
mShareAPI.getPlatformInfo(this, SHARE_MEDIA.WEIXIN, umAuthListener);
}
});
}
private UMAuthListener umAuthListener = new UMAuthListener() {
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
System.out.println("AuthorizeSuccess");
for (String key : data.keySet()) {
System.out.println("Key = " + key);
}
for (String value : data.values()) {
System.out.println("Value = " + value);
}
this.runOnGlThread(new Runnable(){
@Override
public void run(){
//回调Lua
}
})
}
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(this.getApplicationContext(), "Authorizefail", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(this.getApplicationContext(), "Authorizecancel", Toast.LENGTH_SHORT).show();
}
};
注:
- 6.1.1版SDK的回调UMAuthListener没有onStart()函数,在后面的版本才有
- 上面的写法是用Lua调用Java,再回调Lua授权结果,发送请求时运行在Ui线程,回调时运行在Gl线程,如果是普通请求回调直接执行run函数内容即可
- 关于onActivityResult,官网说要重写,但6.1.1版SDK没有重写也可以成功调用
最后在登录所在的Activity里复写onActivityResult方法,注意不可在fragment中实现,如果在fragment中调用登录,在fragment依赖的Activity中实现,如果不实现onActivityResult方法,会导致登录或回调无法正常进行
onActivityResult代码如下
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者: 你很德布罗意
邮箱: namidame@sina.cn
博客地址: https://www.namidame.tech/
原文地址: http://www.namidame.tech/umeng_sdk.html