版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/da_caoyuan/article/details/79202335
【android】第三方集成之——微信登录
关于微信登录的相关博客,还是很多的。在此着重总结,步骤和思路哈以及注意事项。
1:集成步骤
- 在开放平台注册创建应用,申请登录权限
- 下载sdk,gradle 一行依赖即可,拷贝相关文件到项目工程目录
- 全局初始化微信组件
- 请求授权登录,获取code
- 通过code获取授权口令access_token
- 在第5步判断access_token是否存在和过期
- 如果access_token过期无效,就用refresh_token来刷新
- 使用access_token获取用户信息
2:思路
其实官方文档中说的还是比较清楚的,在此还是画一下图,希望能表达更清楚一些。
微信官方文档:
移动应用微信登录开发指南
授权后接口调用
结合自己理解,如图所示,希望能看的更明白些:(图中,提到的 微信提供的接口,在 授权后接口调用 中,都有的)
3:注意事项
1:在调起微信授权界面后,用户点击授权后,会回调到此方法,那怎样获取code?
如下:
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp baseResp) {
// 通过此方法 获取code
String code = ((SendAuth.Resp) baseResp).code;
}
2:授权成功后,获取到用户头像的url后,要将头像资源保存到本地,不是保存url链接哦。
原因:在用户修改微信头像后,旧的微信头像URL将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像URL失效后的异常情况。
3:调起微信授权界面,req.state的值,要做处理:
/**
* 登录微信
*
* @param api 微信服务api
*/
public static void loginWeixin(IWXAPI api) {
// 判断是否安装了微信客户端
if (!api.isWXAppInstalled()) {
ToastUtil.showToast("您还未安装微信客户端!");
return;
}
// 发送授权登录信息,来获取code
SendAuth.Req req = new SendAuth.Req();
// 应用的作用域,获取个人信息
req.scope = "snsapi_userinfo";
/**
* 用于保持请求和回调的状态,授权请求后原样带回给第三方
* 为了防止csrf攻击(跨站请求伪造攻击),后期改为随机数加session来校验
*/
req.state = "app_wechat";
api.sendReq(req);
}
4:获取授权口令,传的appsecret(app的秘钥),不要放大app中,要从后台获取,并且获取的是经过加密处理的数据,app端获取后,再做解密处理。
5:在access_token过期后,我们用refresh_token来刷新时,如果你的返回错误码是:42007,说明你的微信密码更换过,accesstoken 和 refreshtoken 失效,需要重新授权哦!
相关博客:
微信官方全局返回码说明
什么,集成微信登录只要三行代码
和上面是同一个:
https://www.jianshu.com/u/8b661f60979b