iOS平台UDID方案比較

2021-06-16 11:37:45 字數 3791 閱讀 8074

蘋果在ios6中禁用了[uidevice uniqueidentifier],在ios7中又把mac位址的獲取給堵上了。沒辦法,畢竟人家是老大,說不讓你用,你也沒辦法。

在這邊總結一下現有的一部分udid獲取方法(有蘋果推薦的,也有第三方的),目的在於拋磚,沒有切實的說明哪種方法好用。用哪種方法,完全由大家自己根據需要來決定。

ios2~ios7目前已有的技術方案

方案提供方

實現方法

用途及使用情況

傳統udid

蘋果api

uidevice的例項方法uniqueidentifier直接可獲取

●獲取裝置的唯一識別碼

●在ios5及之前的版本中,基本上使用該方法來獲取udid。

mac+md5

unix系統呼叫

使用unix api獲取裝置的mac位址,再使用md5加密演算法生成乙個字串

●由於蘋果在ios6後停用了udid方案,所以大部分應用都開始使用這種方案來生成裝置的唯一識別碼

cfuuid/nsuuid

蘋果api

通過唯一標識裝置的乙個值

(通常是乙太網硬體位址)和乙個時間值來生成乙個唯一標識串

● 蘋果建議基於cfuuid來生成乙個udid,然後將其存在程式中使用

idfv

蘋果api

uidevice的例項方法identifierforvendor

● 用於標識**商

adid

蘋果api

asidentifiermanager的例項方法advertisingidentifier

●用於廣告服務

openudid

第三方開源**

以cfuuid為基礎生成乙個串,並同時儲存於系統剪下板和程式的沙盒(nsuserdefault)中,應用程式從這兩個地方之一獲取udid

●在蘋果宣布禁用傳統udid方案後,這是目前使用較為廣泛的開源方案,包括友盟在內的很多開發商都使用這一方案。

secureudid

第三方開源**

以cfuuid為基礎生成乙個串,並同時儲存於程式剪下板中,程式可以從該剪下板中獲取udid

●在蘋果宣布禁用傳統

系統支援情況

蘋果在ios6以後,已禁用了uidevice的uniqueidentifier方法,所以傳統的udid方法在ios6以後已不能使用;而從ios7開始,獲取mac位址的方法統一返回02:00:00:00:00:00,所以使用mac+md5方法已無意義。

方案

ios 2

ios 3

ios 4

ios 5

ios 6

ios 7

udid

×

×

mac+md5

×

cfuuid

nsuuid

×

×

×

×

idfv

×

×

×

×

ad id

×

×

×

×

openudid

?

secureudid

?

持久化情況

啟動程式

從後台返回

重置廣告標識

重新安裝程式

系統重啟

系統還原設定

公升級系統

重灌系統

傳統udid

√√

mac+md5

cfuuid/nsuuid

×

×

×

×

×

×

×

×

idfv√√

√×√×

?√?×

adid√√

×√√×

?√?×

openudid√√

√√√×

?√?×

secureudid√√

√×√×

?√?×

注:√表示能夠保證udid的持久化,

×表示該情況下udid可能會丟失改變,?表示該種情況沒有實際驗證過,純屬猜測(畢竟公升級系統什麼的太麻煩)

優缺點

優點

缺點

cfuuid/nsuuid

● 刪除程式再安裝時,會生成新的udid

idfv

● 對於執行於同一裝置上的同一**商的所有程式,該值都是相同的。

● 對於同一裝置上不同**商的程式,該值是不同的

● 所謂同一**商是由cfbundleidentifier中的反轉dns前兩部分來確定,如com.test1和com.test2即認為不是同一**商

● 使用者如果刪除同一**商的所有程式,再安裝該**商的程式時,該值會改變。

● 該值在程式執行於後台時,或使用者在重啟系統後第一次解鎖裝置可能返回nil值。

adid

● 該值由系統持久化

● 即使使用者限制廣告跟蹤,也可以使用該值來統計使用者數量、安全等方面的操作

● 該值對於所有的**商都是一樣的

● 只能用於廣告服務的程式訪問乙個唯一標識

● 如果使用者還原所有系統設定或還原廣告識別符號時,可能重置該值。

● 該值在程式執行於後台時,或使用者在重啟系統後第一次解鎖裝置可能返回nil值。

openudid

●同一臺裝置上使用openudid的所有程式其獲取到的udid都是相同的

● 沒有用到取mac位址等可能被蘋果禁用的api

● 在系統恢復設定或刷機的情況下會丟失

● 非蘋果原生api

secureudid

●對於執行於同一裝置上的同一**商的所有程式,該值都是相同的(**商自己控制)。這樣防止因乙個程式外洩udid,而導致裝置的udid外洩

● 與硬體裝置無關

● 不能確保不同裝置上的udid不同

● 使用者可以選擇阻止secureudid收集udid資訊

● 如果使用者備份a裝置系統並將其恢復到b裝置,則b裝置將得到a裝置的udid

● 刪除程式並清空剪下板可能會導致丟失

● 非蘋果原生的api

注:優缺點是個人判斷,還請各位看官指正

參考文獻

● 

iOS平台UDID方案比較

蘋果在ios6中禁用了 uidevice uniqueidentifier 在ios7中又把mac位址的獲取給堵上了。沒辦法,畢竟人家是老大,說不讓你用,你也沒辦法。系統支援情況 蘋果在ios6以後,已禁用了uidevice的uniqueidentifier方法,所以傳統的udid方法在ios6以後...

iOS平台UDID方案比較

蘋果在ios6中禁用了 uidevice uniqueidentifier 在ios7中又把mac位址的獲取給堵上了。沒辦法,畢竟人家是老大,說不讓你用,你也沒辦法。在這邊總結一下現有的一部分udid獲取方法 有蘋果推薦的,也有第三方的 目的在於拋磚,沒有切實的說明哪種方法好用。用哪種方法,完全由大...

UDID替代方案

from 大多數應用都會用到蘋果裝置的udid號,udid通常有以下兩種用途 1 用於一些統計與分析目的 第三方統計工具如友盟,廣告商如admob等 2 將udid作為使用者id來唯一識別使用者,省去使用者名稱,密碼等註冊過程。不過,2011年時,蘋果就宣布ios5.0以後的系統中將不再支援以下方法...