关于使用微信登录第三方APP的实现(Android版)
使用微信登录APP,免去注册过程,现在已经有很多的类似应用了。集成该功能过程不复杂,但还是有一些地方需要注意的。
开始之前,需要做下面的准备工作。
1、到微信开放平台注册你的APP,并申请开通微信登录的权限。参考这里:
2、下载Android SDK和签名查看工具,请参考:
3、获取到APP的签名,并填写到微信开放平台。
下面开始进入主题:
引入微信登录相关SDK到项目的lib文件夹中,就一个文件:
1 | libammsdk.jar |
调用微信,申请用户授权:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //api注册 api = WXAPIFactory.createWXAPI( this , "APP_ID" , true ); api.registerApp( "APP_ID" ); SendAuth.Req req = new SendAuth.Req(); //授权读取用户信息 req.scope = "snsapi_userinfo" ; //自定义信息 req.state = "wechat_sdk_demo_test" ; //向微信发送请求 api.sendReq(req); |
将APP_ID替换成你在微信开放平台申请到的,上面的代码就可以调起微信了。
授权成功后,微信会返回一个code,下面介绍如何接收微信回传的信息。
在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity.java文件,输入类似下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package 你的包名.wxapi; public class WXEntryActivity extends Activity implements IWXAPIEventHandler{ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); //注册API api = WXAPIFactory.createWXAPI( this , "APP_ID" ); api.handleIntent(getIntent(), this ); } @Override public void onResp(BaseResp resp) { if (resp instanceof SendAuth.Resp){ SendAuth.Resp newResp = (SendAuth.Resp) resp; //获取微信传回的code String code = newResp.code; } } } |
在AndroidManifest.xml中加入下面的代码:
1 | <activity android:exported= "true" android:launchMode= "singleTop" android:name= ".wxapi.WXEntryActivity" android:theme= "@android:style/Theme.NoDisplay" /> |
修复WXEntryActivity中的错误,在onResp方法中获取到code,然后通过下面的接口获取到token和openid:
得到下面的数据:
1 2 3 4 5 6 7 8 | { "access_token" : "ACCESS_TOKEN" , "expires_in" :7200, "refresh_token" : "REFRESH_TOKEN" , "openid" : "OPENID" , "scope" : "SCOPE" , "unionid" : "o6_bmasdasdsad6_2sgVt7hMZOPfL" } |
openid可以作为用户的唯一标识,将openid保存下来,就可以实现登录状态的检查了。
如果需要获取用户的信息,例如昵称,头像,可以使用下面的接口:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
得到的数据为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | { "openid" : "OPENID" , "nickname" : "NICKNAME" , "sex" :1, "province" : "PROVINCE" , "city" : "CITY" , "country" : "COUNTRY" , "headimgurl" : "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0" , "privilege" :[ "PRIVILEGE1" , "PRIVILEGE2" ], "unionid" : " o6_bmasdasdsad6_2sgVt7hMZOPfL" } |
更多的接口使用,请参考:
可能的问题:
1、无法调起微信。
可能的原因是签名错误,请检查签名。
2、无法接受到微信回传的信息
可能的原因是没有把WXEntryActivity加入到AndroidManifest.xml中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】