問(wèn)題背景
-
通過(guò)觀察數(shù)據(jù),發(fā)現(xiàn)有一部分用戶是無(wú)法獲取到UnionId的
-
也就是接口返回的參數(shù)中不包含UnionId參數(shù)
-
看了微信文檔的解釋?zhuān)灰〕绦蛟陂_(kāi)放平臺(tái)綁定,就一定會(huì)分配UnionId
-
網(wǎng)上也有用戶遇到這樣的情況,沒(méi)有解決
問(wèn)題影響
使用微信小程序成功授權(quán)以后,下次在公眾號(hào)中授權(quán)或在App中使用微信授權(quán),無(wú)法識(shí)別是同一個(gè)微信用戶,可能會(huì)出現(xiàn)一個(gè)微信用戶綁定不同App用戶的情況。
UnionID機(jī)制
微信對(duì)UnionId機(jī)制的原文解釋
如果開(kāi)發(fā)者擁有多個(gè)移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用、和公眾帳號(hào)(包括小程序),可通過(guò)unionid來(lái)區(qū)分用戶的唯一性,因?yàn)橹灰峭粋€(gè)微信開(kāi)放平臺(tái)帳號(hào)下的移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào)(包括小程序),用戶的unionid是唯一的。換句話說(shuō),同一用戶,對(duì)同一個(gè)微信開(kāi)放平臺(tái)下的不同應(yīng)用,unionid是相同的。
同一個(gè)微信開(kāi)放平臺(tái)下的相同主體的App、公眾號(hào)、小程序,如果用戶已經(jīng)關(guān)注公眾號(hào),或者曾經(jīng)登錄過(guò)App或公眾號(hào),則用戶打開(kāi)小程序時(shí),開(kāi)發(fā)者可以直接通過(guò)wx.login獲取到該用戶UnionID,無(wú)須用戶再次授權(quán)。
注意: 后邊這句話的描述
用戶關(guān)注過(guò)公眾號(hào),或者曾經(jīng)登錄過(guò)App或公眾號(hào),則用戶打開(kāi)小程序時(shí),開(kāi)發(fā)者可以直接通過(guò)wx.login獲取到該用戶UnionID
即:如果用戶沒(méi)有關(guān)注過(guò)公眾號(hào),或者沒(méi)有登陸過(guò)App,通過(guò)wx.login是無(wú)法獲取到該用戶UnionID,只能通過(guò)wx.getUserInfo來(lái)獲取UnionId
經(jīng)驗(yàn)證,系統(tǒng)不存在UnionId的小程序用戶都是沒(méi)有關(guān)注公眾號(hào)或未在App中使用微信授權(quán)的用戶
解決方案
-
獲取小程序UnionId應(yīng)該以wx.getUserInfo的UnionId為主
-
wx.getUserInfo需要用戶授權(quán),產(chǎn)品方面,需要考慮用戶拒絕授權(quán)的處理流程
|