微信登录


微信登录

Small_Cake 2020.05.19 11:35:54字数 682阅读 506

参考:
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.回调结果

微信客户端点击同意,就会进入回调页WXEntryActivityonResp方法

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_idapp_secretcode去获取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