Android 集成微信sdk 实现微信登录

实现微信登录可划分为三步:

    1.首先获取微信授权,微信授权成功后会返回一个code到WXEntryActivity中的onResp方法中去

    2.通过上一步获取到的code来请求微信接口获取到accessToken和openId。

    请求接口:

    https://api.weixin.qq.com/sns/oauth2/access_token?    appid=AppID&secret=AppSecret&code=code&grant_type=    authorization_code"

    3.再通过第二部获取到的accessToken和openId来请求另一个微信接口从而获取到微信的用户信息来实现登录功能

     请求接口:"https://api.weixin.qq.com/sns/userinfo?access_token=accessToken&openid=openId"


具体步骤如下:

1.在Android studio中添加依赖 :

implementation compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

2.在AndroidManifest.xml文件中添加所需要的权限:









3.在项目的包名下创建名为wxapi包,然后再在此包下创建名为WXEntryActivity并继承自Activity,再实现IWXAPIEventHandler接口重写onRep和onResp方法(此activity是一个比叫特殊的类没有布局文件,微信所有的回调都是通过这个activity来实,没有设置布局文件,通常设置一个透明的主题,它的任务干完后就直接finish掉)。最后,还需要在AndroidMnifest.xml中注册activity添加代码如下:

4.准备工作做完下面开始实现微信登录:

    首先在WXEntryActivity的onCreate方法中做初始化工作

        //通过WXAPIFactory工厂获取IWXApI的示例
        api = WXAPIFactory.createWXAPI(this, APP_ID, true);
        //将应用的appid注册到微信
        api.registerApp(APP_ID);
        
        api.handleIntent(this.getIntent(), this);

然后处理微信授权后的回调

@Override
public void onResp(BaseResp baseResp) {
    switch (baseResp.errCode) {
        case BaseResp.ErrCode.ERR_OK: {
            if (baseResp instanceof  SendAuth.Resp) {
                SendAuth.Resp newResp = (SendAuth.Resp) baseResp;
                //获取微信返回的code
                final String code = newResp.code;
                Log.e(TAG, "微信返回的CODE:    " + code);
            break;
        }

        case BaseResp.ErrCode.ERR_USER_CANCEL: {
            //用户取消登录
            break;
        }

        case BaseResp.ErrCode.ERR_BAN: {
            //如果点击微信登录按钮没有调起微信授权界面,并且一直回调到这里,那很可能是手机问题,可以尝试重启手机
            break;
        }

        default:{ 
            break;
        }
    }
    finish();
}

5.最后在上面的集成工作完成后后就可以在起它的activity中发起微信登录的请求,执行代码如下:

api = WXAPIFactory.createWXAPI(getActivity(), Constants.APP_ID, false);
api.registerApp(APP_ID);
if (api != null && api.isWXAppInstalled()) {
    SendAuth.Req req = new SendAuth.Req();
    /*
    授权作用域(scope)代表用户授权给第三方的接口权限,第三方应用需要向微信开放平台申请使用相应scope的权限后,
    使用文档所述方式让用户进行授权,经过用户授权,获取到相应access_token后方可对接口进行调用。
    如获取用户个人信息则填写snsapi_userinfo
     */
    req.scope = "snsapi_userinfo";
    /*
    用于保持请求和回调的状态,授权请求后原样带回给第三方。
    该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
     */
    req.state = "wechat_sdk_demo";
    api.sendReq(req);
}else {
    Toast.makeText(getActivity(), "用户未安装微信", Toast.LENGTH_SHORT).show();
}

微信授权成功拿到code后就可通过上面提到的接口发送get请求获取用户信息来实现登录功能了。

代码中出现的AppID和AppSecret是在微信开放平台申请微信登录获取的

Android 集成微信sdk 实现微信登录_第1张图片




你可能感兴趣的:(Android)