蘋果在iOS6中禁用了[UIDevice uniqueIdentifier],在iOS7中又把mac地址的獲取給堵上了。沒辦法,畢竟人家是老大,說不讓你用,你也沒辦法。
在這邊總結一下現有的一部分UDID獲取方法(有蘋果推薦的,也有第三方的),目的在於拋磚,沒有切實的說明哪一種方法好用。用哪一種方法,徹底由你們本身根據須要來決定。
iOS2~iOS7目前已有的技術方案php
方案 | 提供方 | 實現方法 | 用途及使用狀況 |
傳統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 | ●在蘋果宣佈禁用傳統UDID方案後,部分應用也採用了該方案(目前github上數據顯示該方案下載量僅次於OpenUDID,具體使用狀況未知) |
系統支持狀況
蘋果在iOS6之後,已禁用了UIDevice的uniqueIdentifier方法,因此傳統的UDID方法在iOS6之後已不能使用;而從iOS7開始,獲取MAC地址的方法統一返回02:00:00:00:00:00,因此使用MAC+MD5方法已無心義。
git
方案
|
iOS 2
|
iOS 3
|
iOS 4
|
iOS 5
|
iOS 6
|
iOS 7
|
UDID
|
√
|
√
|
√
|
√
|
×
|
×
|
MAC+MD5
|
√
|
√
|
√
|
√
|
√
|
×
|
CFUUID
|
√
|
√
|
√
|
√
|
√
|
√
|
NSUUID
|
×
|
×
|
×
|
×
|
√
|
√
|
IDFV
|
×
|
×
|
×
|
×
|
√
|
√
|
Ad ID
|
×
|
×
|
×
|
×
|
√
|
√
|
OpenUDID
|
?
|
√
|
√
|
√
|
√
|
√
|
SecureUDID
|
?
|
√
|
√
|
√
|
√
|
√
|
持久化狀況
github
啓動程序
|
從後臺返回
|
重置廣告標識
|
從新安裝程序
|
系統重啓
|
系統還原設置
|
升級系統
|
重裝系統
|
|
傳統UDID
|
√
|
√
|
√
|
√
|
√
|
√
|
√
|
√
|
MAC+MD5
|
√
|
√
|
√
|
√
|
√
|
√
|
√
|
√
|
CFUUID/NSUUID
|
×
|
×
|
×
|
×
|
×
|
×
|
×
|
×
|
IDFV
|
√
|
√
|
√
|
×
|
√
|
×
|
?√
|
?×
|
ADID
|
√
|
√
|
×
|
√
|
√
|
×
|
?√
|
?×
|
OpenUDID
|
√
|
√
|
√
|
√
|
√
|
×
|
?√
|
?×
|
SecureUDID
|
√
|
√
|
√
|
×
|
√
|
×
|
?√
|
?×
|
注:算法
優缺點
安全
|
優勢
|
缺點
|
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 |
注:優缺點是我的判斷,還請各位看官指正
參考文獻
● http://www.doubleencore.com/2013/04/unique-identifiers/
● Apple開發文檔ide
http://www.cocoachina.com/bbs/read.php?tid=144524加密