目前微信开放平台个人主体类APP不支持开通微信登录,那么个人开发者如何解决微信登录的问题呢?目前有一种替代方案是用微信小程序作为媒介来达到微信登录的目的。
微信小程序的登录无需企业资质,同时登录后返回以下信息
- 用户唯一标识open_id
- 头像
- 昵称
并且微信小程序支持被APP打开,执行操作后再返回数据。
所以目前的思路是通过APP跳转微信小程序登录再返回来实现微信登录
实现前提条件
- 微信开放平台账号(个人类)
- 在开发平台下创建APP并审核通过
- 已上线一个微信小程序
- 在开放平台绑定该微信小程序
- APP和小程序关联
当然没有上线的微信小程序也可以,有小程序id即可,但只能进行测试
以安卓APP为例,集成微信SDK初始化后,设置小程序原始id来跳转小程序,可以传递参数给小程序
String appId = "......."; //此处为AppId final IWXAPI api = WXAPIFactory.createWXAPI(this, appId); api.registerApp(appId); findViewById(R.id.wx_login).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req(); req.userName = "gh_f1312c106dff"; // 填小程序原始id req.path = "pages/index/index?appLogin=1"; //拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_TEST;// 可选打开 开发版,体验版和正式版, api.sendReq(req); } });
小程序被调起后会在onLoad方法接收到参数,再调用wx.login方法获取js_code,再通过js_code拿open_id
onLoad(options) { if (options.appLogin){ wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId } }) } },
再通过button的open-type="getUserInfo"可弹起登录申请获取用户信息,然后再返回APP客户端即可
微信相关文档
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/launchApp.htmlhttps://developers.weixin.qq.com/doc/oplatform/Mobile_App/Launching_a_Mini_Program/Launching_a_Mini_Program.html
顺便推个公众号,不感兴趣的同学可以跳过
《IT独立开发者》帮助程序员拓展产品、运营、设计等思维能力,开发独立产品,致力成为自由职业者,实现财富自由