極光推送的設(shè)備唯一性標(biāo)識RegistrationID

對于 App 云平臺系統(tǒng),如何唯一地識別移動設(shè)備是非常重要的。否則,每次用戶在設(shè)備上卸載掉應(yīng)用再重新安裝,后端系統(tǒng)只能把這個(gè)用戶當(dāng)作一個(gè)全新的用戶了。

Android 上識別設(shè)備的唯一性,因?yàn)檫@個(gè)圈太亂,所以設(shè)備本身的任何標(biāo)識都是無法直接用作設(shè)備唯一標(biāo)識的。iOS 是系統(tǒng)強(qiáng)力限制被唯一識別的,目前唯一可以部分滿足條件是 IDFA,但需要你的 App 本身的確嵌入了廣告。

很多開發(fā)者使用極光推送時(shí),都有這個(gè)疑問:極光推送是如何來做設(shè)備的唯一性識別的。本文解析極光推送如何盡可能地來識別設(shè)備唯一。

極光推送對安裝在設(shè)備上的 App 使用 RegistrationID 作為標(biāo)識。極光推送要『盡可能』確保設(shè)備的唯一性,就是要使得 RegistrationID 盡可能唯一。

RegistrationID 的定義

關(guān)于 RegistrationID 極光官方文檔有如下的定義:

集成了 JPush SDK 的應(yīng)用程序在第一次 App 啟動后,成功注冊到 JPush 服務(wù)器時(shí),JPush 服務(wù)器會給客戶端返回唯一的該設(shè)備的標(biāo)識 - RegistrationID。JPush SDK 會以廣播的形式發(fā)送 RegistrationID 到應(yīng)用程序。

有了這個(gè)標(biāo)識,App 編程可以把這個(gè) RegistrationID 保存到自己的應(yīng)用服務(wù)器上,然后就可以根據(jù) RegistrationID 來向設(shè)備推送消息或者通知。

RegistrationID 變化可能性

如果 App 不卸載,是直接覆蓋安裝,Android, iOS 上 RegistrationID 的值都不會變化。

如果 App 是卸載之后再次安裝:

  • Android 上 RegistrationID 基本不會變;
  • iOS 上如果啟用了 IDFA 變化可能性不大,如果未啟用 IDFA 則每次安裝 RegistrationID 都會變;

RegistrationID 生成規(guī)則解析

Android 平臺

Android 上因?yàn)閲鴥?nèi)存在大量山寨設(shè)備的原因,正常的 IMEI, Mac Address, AndroidID 這些可以考慮用作唯一標(biāo)識的值,都是不可以用的,因?yàn)檫@些值在一批設(shè)備中可能都是同一個(gè)值。

極光的基本思路是:

  1. 生成一個(gè) DeviceID 保存到 Settings, External Storage。依賴本地存儲,應(yīng)用被卸載后重新安裝這些存儲里的 DeviceID 還在的話,就是同一個(gè)設(shè)備。這一條理論上解決 90% 的不變性問題。
  2. DeviceID 之外增加補(bǔ)充規(guī)則:綜合根據(jù) IMEI, MAC Address, AndroidID 這幾個(gè)值來判斷,是否可能是老設(shè)備。

具體的邏輯細(xì)節(jié),也是根據(jù)實(shí)際運(yùn)行情況,以及收集到的反饋不斷調(diào)整的,大多數(shù)邏輯可在服務(wù)器端調(diào)整。

iOS平臺

鑒于 iOS 系統(tǒng)設(shè)計(jì)上限制設(shè)備唯一標(biāo)識,所以極光一直使用 Device Token 作為標(biāo)識,也因?yàn)闃O光推送本身就是需要 Device Token 這個(gè)值才可能運(yùn)作的。

iOS 9 版本之后,每次卸載后重裝都會導(dǎo)致 Device Token 變化,所以對于極光后臺來說,都只能被識別為新用戶。

極光 SDK 新版本增加了 IDFA 選項(xiàng),在集成初始化 SDK 時(shí)可選把 IDFA 這個(gè)值設(shè)置進(jìn)來,這樣極光后臺就優(yōu)先根據(jù) IDFA 值來識別用戶,從有一定的可能性應(yīng)用被卸載后重裝還能識別回老設(shè)備。

IDFA 是廣告標(biāo)識符,是 iOS 專門為廣告跟蹤唯一地識別用戶而設(shè)計(jì)的。在 iOS 設(shè)備上,設(shè)備 -> 隱私 -> 廣告這個(gè)頁面,有一個(gè)設(shè)置項(xiàng):限制廣告跟蹤。默認(rèn)是未選中狀態(tài)的,即是關(guān)閉狀態(tài),是不限制的。用戶可以選中,從而限制廣告跟蹤。設(shè)置項(xiàng)之外還有一個(gè)按鈕:還原廣告標(biāo)識符...。如果用戶點(diǎn)擊了這個(gè)按鈕,則 IDFA 值會變化。

默認(rèn)的情況下,沒有限制廣告跟蹤,可以取到 IDFA 這個(gè)值。并且用戶未點(diǎn)擊『還原廣告標(biāo)識』時(shí),這個(gè)值是不會變的。這樣就達(dá)到了唯一地標(biāo)識設(shè)備、跟蹤到用戶的目標(biāo)。

但是,但是,請一定留意,IDFA 并不是一定可以啟用的,是需要你的 App 的確有廣告功能才可以用的,否則 Apple 在上架審核時(shí)有可能發(fā)現(xiàn)從而拒絕上架。

關(guān)于蘋果 App 上架對 IDFA 的要求,可參考這里的說明:The Advertising Identifier (IDFA)

高級使用建議

因?yàn)?RegistrationID 是 JPush SDK 注冊完成之后才得到的,所以調(diào)用 SDK API 來獲取 RegistrationID 的值時(shí)需要稍注意,不是總能夠立即得到。

比如 iOS 上建議在監(jiān)聽到 kJPFNetworkDidLoginNotification 這個(gè)通知后的代碼里,來獲取 RegistrationID 的值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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