iOS平台UDID方案比較


蘋果在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 在蘋果宣布禁用傳統UDID方案后,部分應用也采用了該方案(目前github上數據顯示該方案下載量僅次於OpenUDID,具體使用情況未知)




系統支持情況
蘋果在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
  


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


參考文獻
● http://www.doubleencore.com/2013/04/unique-identifiers/
● Apple開發文檔

http://www.cocoachina.com/bbs/read.php?tid=144524


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM