你很德布罗意的技术博客

Android友盟SDK微信授权登录接入

官方文档:
微信SDK接入
友盟SDK接入

  • 微信授权登录接入需要先到微信开放平台申请好应用的APPID,交纳300大洋费用得到授权登录权限后才能使用,此处不再赘述。
  • 接入的两种方式
    • 微信SDK接入:使用微信官方SDK接入,需要分“获取code票据”和“获取access_token”两步来获得授权关系接口的调用凭证
    • 友盟SDK接入:友盟已集成各种接口接入,直接一个方法搞定
  • 本文记录使用友盟SDK接入微信授权登录中的几处关键代码,使用的是友盟SDK 6.1.1,最新版请到官网下载
  • 最新版与旧版SDK用法有出入,官网文档也不是太完善,本文仅针对6.1.1版本在Eclipse工程接入记录

初始化SDK

最好在Android应用入口处初始化SDK

1
2
3
4
5
6
7
8
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
1
2
3
4
5
6
public class WXEntryActivity extends WXCallbackActivity implements IWXAPIEventHandler {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}

AndroidManifest声明

在manifest文件上声明回调用到的WXEntryActivity,包名改成自己项目的包名。官网说这里一个字也不能改,试了试好像改一改也没关系的。。

1
2
3
4
5
6
<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" />

发送授权请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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代码如下

1
2
3
4
5
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}

专题:

本文发表于 2017-06-21,最后修改于 2020-10-16。

本站永久域名www.namidame.tech,也可搜索「 你很德布罗意的技术博客 」找到我。

欢迎关注我的 微博 ,查看最近的文章和动态。


上一篇 « 德州扑克牌型算法-Lua代码实现 下一篇 » Cocos2d-x-3.10 Lua demo运行

赞赏支持

客官,打赏一个呗~

i ali

支付宝

i wechat

微信

推荐阅读

Big Image