一、微信开放平台申请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收集用户信息的方式之一。期望这篇文章对大家有所帮助!