轉(zhuǎn)自:微信社區(qū)
背景
小程序一個比較重要的能力就是獲取用戶信息循诉,也就是使用 wx.getUserInfo 接口。我們發(fā)現(xiàn)幾乎所有的小程序都會調(diào)用這個接口撇他。雖然我們在設(shè)計文檔上有提出最好的設(shè)計是在真正要用戶信息的情況下才去獲取用戶信息茄猫,不過很多開發(fā)者并沒有按照我們的期望去做狈蚤,導(dǎo)致用戶在使用的時候有很多困擾。
歸結(jié)起來有幾點:
開發(fā)者在首頁直接調(diào)用 wx.getUserInfo 進行授權(quán)划纽,彈框有會使得一部分用戶放棄小程序的使用脆侮。
開發(fā)者沒有處理用戶拒絕彈框的情況,有部分小程序強制要求用戶授權(quán)頭像昵稱等信息才能繼續(xù)使用小程序勇劣。
用戶沒有很好的方式重新授權(quán)靖避,雖然在前幾個版本我們增加了設(shè)置頁面可以讓用戶選擇重新授權(quán),但是操作還是不夠便捷比默。
開發(fā)者希望進到首頁就獲取到用戶的unionId幻捏,以便和之前已經(jīng)關(guān)注了公眾號的用戶畫像關(guān)聯(lián)起來。
開發(fā)者默認(rèn)將 wx.login 和 wx.getUserInfo 綁定使用,這個是由于我們一開始的設(shè)計缺陷和實例代碼導(dǎo)致: getUserInfo必須通過wx.login 在后臺生成session_key 后才能調(diào)用。
為了解決以上幾點爬骤,我們更新了三個能力:
使用組件來獲取用戶信息,用戶拒絕授權(quán)后也可以重新彈窗再次授權(quán)
若用戶滿足一定條件(下文有詳細介紹)榛臼,則可以用wx.login 獲取到的code直接換到unionId
wx.getUserInfo 不依賴 wx.login 就能調(diào)用得到數(shù)據(jù)。
獲取用戶信息組件介紹
組件變化:
open-type 屬性增加 getUserInfo :用戶點擊時候會觸發(fā) bindgetuserinfo 事件窜司。
新增事件 bindgetuserinfo :當(dāng) open-type 為 getUserInfo 時沛善,用戶點擊會觸發(fā)∪恚可以從事件返回參數(shù)的detail字段中獲取到和wx.getUserInfo 返回參數(shù)相同的數(shù)據(jù)金刁。
示例:
<button open-type="getUserInfo" bindgetuserinfo="userInfoHandler"> Click me </button>
和 wx.getUserInfo 不同之處在于:
API
wx.getUserInfo
只會彈一次框,用戶拒絕授權(quán)之后织咧,再次調(diào)用將不會彈框組件 由于是用戶主動觸發(fā)胀葱,不受彈框次數(shù)限制,只要用戶沒有授權(quán)笙蒙,都會再次彈框
直接獲取unionId
考慮很多場景下抵屿,業(yè)務(wù)方申請userinfo授權(quán)主要為了獲取unionid。我們鼓勵開發(fā)者在不騷擾用戶的情況下合理獲得unionid捅位,而僅在必要時才向用戶彈窗申請使用昵稱頭像轧葛。為此,凡使用“獲取用戶信息組件”獲取用戶昵稱頭像的小程序艇搀,在滿足以下全部條件時尿扯,將可以靜默獲得unionid。
在微信開放平臺下存在同主體的App焰雕、公眾號衷笋、小程序。
用戶關(guān)注了某個相同主體公眾號矩屁,或曾經(jīng)在某個相同主體App辟宗、公眾號上進行過微信登錄授權(quán)爵赵。
getUserInfo 和 login
很多開發(fā)者會把login和getUserInfo捆綁調(diào)用當(dāng)成登錄使用,其實login已經(jīng)可以完成登錄泊脐,可以建立賬號體系了空幻,getUserInfo只是獲取額外的用戶信息。
在login獲取到code容客,然后發(fā)送到開發(fā)者后端秕铛,開發(fā)者后端再通過接口去微信后端換取到openid和sessionKey(并且現(xiàn)在會將unionid也一并返回)之后,然后把3rd_session返回給前端缩挑,就已經(jīng)完成登錄行為但两。而login行為是靜默,不必授權(quán)的调煎,不會對用戶造成騷擾镜遣。
getUserInfo只是為了提供更優(yōu)質(zhì)的服務(wù)而存在,比如展示頭像昵稱士袄,判斷性別,通過unionId和其他公眾號上已有的用戶畫像結(jié)合起來提供歷史數(shù)據(jù)谎僻。所以不必在剛剛進入小程序的時候就強制要求授權(quán)娄柳。
推薦使用方法
調(diào)用wx.login 獲取code,然后從微信后端換取到sessionKey艘绍,用于解密getUserInfo返回的敏感數(shù)據(jù)赤拒。
-
使用wx.getSetting 獲取用戶的授權(quán)情況
如果用戶已經(jīng)授權(quán),直接調(diào)用 API wx.getUserInfo 獲取用戶最新的信息
用戶未授權(quán)诱鞠,在界面中顯示一個按鈕提示用戶登入挎挖,當(dāng)用戶點擊并授權(quán)后就獲取到用戶的最新信息。
獲取到用戶數(shù)據(jù)后可以進行展示或者發(fā)送給自己的后端航夺。
特別注意
為了給用戶提供更好的小程序環(huán)境蕉朵,我們約定在一段時間后(具體時間會做通知),若還出現(xiàn)以下情況(包括但不限于)阳掐,將無法通過審核
初次打開小程序就彈框授權(quán)用戶信息
未處理用戶拒絕授權(quán)的情況
強制要求用戶授權(quán)