做好用戶獲取第一步,微信小程序OpenID和UnionID詳解

OpenID 和 UnionID 是什么

OpenID 是微信提供給開發(fā)者的用戶唯一標(biāo)識(shí)。然而當(dāng)開發(fā)者擁有多個(gè)移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用、和公眾賬號(hào)(包括小程序)時(shí),同一用戶、不同應(yīng)用下的 OpenID 是不一樣的。

而同一個(gè)微信開放平臺(tái)賬號(hào)下的不同應(yīng)用,用戶的 UnionID 是唯一的。

因此,對(duì)有多個(gè)應(yīng)用的開發(fā)者來講,只有通過 UnionID 來區(qū)分用戶的唯一性,才能實(shí)現(xiàn)多個(gè)應(yīng)用間的賬號(hào)打通。

應(yīng)該使用哪個(gè) ID 登錄

理論上講,當(dāng)產(chǎn)品有App、小程序、公眾號(hào)等多種形式時(shí),用 UnionID 是最好的選擇,否則會(huì)因?yàn)橥挥脩粼诓煌瑧?yīng)用下的 OpenID 不一樣導(dǎo)致產(chǎn)生多個(gè)賬號(hào),那處理起來就很麻煩了。

然而 UnionID 并不是那么容易獲取的。微信小程序最新的限制是:

  1. 必須使用一個(gè)專用按鈕控件讓用戶主動(dòng)點(diǎn)擊,否則無法彈出授權(quán)彈窗
  2. 用戶必須點(diǎn)擊「允許」同意小程序獲取公開信息

以上2步,每一步都會(huì)造成一定的用戶流失。所以有的開發(fā)者會(huì)使用 OpenID ,以最大程度的降低用戶獲取的成本,從而推動(dòng)注冊(cè)用戶數(shù)的快速增長(zhǎng)。

拿拼多多來說,用戶打開小程序之后會(huì)靜默獲取 OpenID 并生成賬號(hào),可以正常使用購(gòu)物車、歷史記錄等服務(wù)。用戶在「?jìng)€(gè)人中心」頁(yè)面點(diǎn)擊「更新資料」時(shí)就會(huì)觸發(fā)授權(quán)彈窗獲取公開信息和 UnionID。


對(duì)于不同的業(yè)務(wù)場(chǎng)景,會(huì)有各自最適合的選擇。深入研究下微信的機(jī)制,或許能有一些啟發(fā),在某些場(chǎng)景下可以嘗試優(yōu)化用戶獲取的路徑。

小程序 OpenID 和 UnionID 獲取機(jī)制

在小程序的官方文檔里有一張圖解釋了小程序調(diào)用wx.login接口的登錄流程。不過那張圖除了開發(fā)能看懂,一般人應(yīng)該都看不懂什么意思。翻譯成一般人都能看懂的圖,小程序登錄流程是這樣的:


  1. 首先,開發(fā)者可以在小程序中靜默調(diào)用登錄接口,拿到一個(gè)憑證
  2. 小程序把憑證發(fā)送到開發(fā)者的服務(wù)器上
  3. 服務(wù)器拿著這個(gè)憑證以及小程序密鑰向微信接口請(qǐng)求換取 OpenID
  4. 微信接口返回 OpenID 給開發(fā)者服務(wù)器,滿足特殊條件時(shí)會(huì)一并返回 UnionID
  5. 開發(fā)者服務(wù)器創(chuàng)建登錄態(tài)并返回給小程序,從而完成登錄

其中第4點(diǎn),在滿足下面任何一個(gè)條件時(shí)可以同時(shí)獲得 UnionID:

  1. 如果開發(fā)者賬號(hào)下存在同主體的公眾號(hào),并且該用戶已經(jīng)關(guān)注了該公眾號(hào)
  2. 如果開發(fā)者賬號(hào)下存在同主體的公眾號(hào)或移動(dòng)應(yīng)用,并且該用戶已經(jīng)授權(quán)登錄過該公眾號(hào)或移動(dòng)應(yīng)用

此時(shí)獲取該用戶 UnionID 是不需要用戶再次授權(quán)的。

除了調(diào)用登錄接口,用戶在小程序中支付完成5分鐘內(nèi),開發(fā)者可以直接通過 getPaidUnionID 接口獲取該用戶的 UnionID,也不需要用戶授權(quán)。

總結(jié)一下:

OpenID可以無感獲取。

而無感獲取 UnionID 必須滿足以下任一條件:

  • 用戶已經(jīng)關(guān)注了同主體的公眾號(hào)
  • 用戶已經(jīng)授權(quán)過同主體的其他應(yīng)用獲取 UnionID
  • 用戶剛剛通過小程序完成了支付
    否則就必須讓用戶主動(dòng)點(diǎn)擊按鈕并允許獲取公開信息后,才可以獲得 UnionID。

公開信息有哪些

最后說說微信的用戶公開信息(UserInfo)究竟包含哪些信息:

  1. 微信昵稱
  2. 微信頭像圖片的URL,如果用戶沒有頭像,URL會(huì)是空的。如果用戶更換了頭像,原有頭像的URL會(huì)失效
  3. 用戶性別:未知、男性、女性
  4. 所在國(guó)家
  5. 所在省份
  6. 所在城市
  7. 國(guó)家、省份、城市所用的語(yǔ)言:英文、簡(jiǎn)體中文、繁體中文

與用戶信息一并返回的還有一串加密信息,轉(zhuǎn)交給開發(fā)者的服務(wù)器解密之后,就可以得到用戶的 OpenID 和 UnionID 了。

一件比較tricky的事情是,如果只是需要在小程序中展示用戶頭像和昵稱,可以使用 <open-data>,微信在渲染小程序的時(shí)候會(huì)顯示用戶的頭像和昵稱。但是此時(shí)只是顯示出來能被用戶看到,開發(fā)者并不能拿到用戶頭像昵稱的數(shù)據(jù),所以這個(gè)時(shí)候就不要想什么分享到聊天的時(shí)候小程序卡片標(biāo)題能帶上用戶昵稱了。

<open-data type="userAvatarUrl"></open-data>
<open-data type="userNickName"></open-data>

通過<open-data>除了可以不經(jīng)過授權(quán)直接展示頭像、昵稱之外,還可以直接展示:

  1. 用戶性別
  2. 用戶所在國(guó)家
  3. 用戶所在城市
  4. 用戶所在省份
  5. 用戶的語(yǔ)言
  6. 群名稱(必須是用戶曾經(jīng)分享過小程序的群)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容