目前微信開放平台個人主體類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獨立開發者》幫助程序員拓展產品、運營、設計等思維能力,開發獨立產品,致力成為自由職業者,實現財富自由