如何使用微信登录android应用

发布时间:2023-05-17

在今天的移动互联网时代,授权登陆已经成为了越来越多APP的常用功能之一,尤其是在APP启动阶段,为了减少新注册用户的流失率,授权登陆也是一个非常好的方案之一。微信是现在一个使用人数非常多的社交应用,如果我们在我们自己的APP上集成微信的授权登陆功能将会是一个很有必要的事情。接下来,本文将会从如下几个方面对微信授权登陆在android应用中的实现进行详细说明。

一、微信开放平台申请AppID

在开始之前,我们需要在微信开放平台去申请我们自己的APPID,这个AppID将会作为我们的安卓应用和微信交互的唯一标识。我们可以在微信开放平台官网上找到申请入口。

// 如下代码为小程序中获取wxcode的方法
private void getWXCode() {
    final SendAuth.Req req = new SendAuth.Req();
    req.scope = "snsapi_userinfo";
    req.state = STATE;
    api.sendReq(req);
}

二、使用微信SDK实现微信授权登陆功能

微信提供了一个非常方便易用的SDK去实现微信授权登陆的功能。在开始之前,我们需要在我们的项目中将微信SDK引入。

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}

之后,在我们需要使用微信授权登陆的地方加入如下代码:

// 实现IWXAPIEventHandler接口
private IWXAPI api;
private void initWXApi() {
    api = WXAPIFactory.createWXAPI(this, APPID, true);
    api.registerApp(APPID);
    api.handleIntent(getIntent(), this);
}
// 微信登陆
private void wechatLogin() {
    final SendAuth.Req req = new SendAuth.Req();
    req.scope = "snsapi_userinfo";
    req.state = STATE;
    api.sendReq(req);
}

三、获取微信授权登陆后的用户信息

在用户允许我们的应用后,我们就可以获得微信给我们回调的code了。我们可以通过这个code去获取到用户的access token和openid。

// 获取用户信息
private void getUserInfo(String code) {
    OkHttpClient client = new OkHttpClient();
    String url = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
            "appid=" + APPID + "&secret=" + SECRET + "&code=" + code + "&grant_type=authorization_code";
    Request request = new Request.Builder()
            .url(url)
            .build();
    Call call = client.newCall(request);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            e.printStackTrace();
        }
        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String result = response.body().string();
            try {
                JSONObject jsonObject = new JSONObject(result);
                String access_token = jsonObject.getString("access_token");
                String openid = jsonObject.getString("openid");
                String url = "https://api.weixin.qq.com/sns/userinfo?" +
                        "access_token=" + access_token + "&openid=" + openid;
                OkHttpClient client1 = new OkHttpClient();
                Request request = new Request.Builder()
                        .url(url)
                        .build();
                Call call1 = client.newCall(request);
                call1.enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        e.printStackTrace();
                    }
                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        String result = response.body().string();
                        Message message = new Message();
                        message.what = 0;
                        Bundle bundle = new Bundle();
                        bundle.putString("userInfo", result);
                        message.setData(bundle);
                        handler.sendMessage(message);
                    }
                });
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });
}

四、小结

到这里,我们已经成功地在android应用中将微信授权登陆的功能集成了起来,并且可以正确地获取到已授权用户的信息。授权登陆不仅可以让用户不必再次进行繁琐的注册流程,也是我们APP收集用户信息的方式之一。期望这篇文章对大家有所帮助!