微信登录
微信登录
参考:
Android文档
登录成功后获取用户信息:GET https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
参考
获取用户个人信息UnionID 机制
1.动态引入sdk,
这里我引入的固定版本
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
注意:如果集成了友盟分享,那么这个会和友盟分享引入的微信sdk冲突,去掉此引入即可
2.设置回调页
demo下载地址:https://developers.weixin.qq.com/doc/oplatform/Downloads/Android_Resource.html
注意,需要在你自己的项目包路径下新建一个wxapi文件夹,然后复制demo中的WXEntryActivity到这个wxapi文件夹下面。然后在AndroidManifest.xml配置对应的回调页
if (resp.getType() == ConstantsAPI.COMMAND_SENDAUTH) {
SendAuth.Resp authResp = (SendAuth.Resp)resp;
final String code = authResp.code;
NetworkUtil.sendWxAPI(handler, String.format("https://api.weixin.qq.com/sns/oauth2/access_token?" +
"appid=%s&secret=%s&code=%s&grant_type=authorization_code", Contants.WX_APP_ID,
Contants.WX_APP_SECRET, code), NetworkUtil.GET_TOKEN);
}
3.发起登录
在页面onCreaet中注册api
/**
* 微信登录
*/
private void wxSendLogin() {
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo_test";
api.sendReq(req);
}
4.回调结果
微信客户端点击同意,就会进入回调页WXEntryActivity的onResp方法
if (resp.getType() == ConstantsAPI.COMMAND_SENDAUTH) {
SendAuth.Resp authResp = (SendAuth.Resp)resp;
final String code = authResp.code;
NetworkUtil.sendWxAPI(handler, String.format("https://api.weixin.qq.com/sns/oauth2/access_token?" +
"appid=%s&secret=%s&code=%s&grant_type=authorization_code", Contants.WX_APP_ID,
Contants.WX_APP_SECRET, code), NetworkUtil.GET_TOKEN);
}
注意:此处替换为自己的app_id,和app_secret,否则会出现步骤2所说异常。
此判断会拿获得的code参数,NetworkUtil通过app_id,app_secret,code去获取access_token,openid,unionid等参数,然后通过handler(MyHandler)的handleMessage方法拿到对应的result,再去解析里面的access_token,openid,unionid等参数,就可以了。至于你拿到这三个参数直接传递给后端,或传递到其他页面后再传递给后端,就看你自己的实际需求了。
UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.WEIXIN, new UMAuthListener() {
1人点赞
Android精神
https://www.jianshu.com/p/98654fafc11a