iOS平臺UDID方案比較

蘋果在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
  
  
  
  
  
  
  
  
×
  
  
  
  
×
  
  
?√
  
  
?×
  

注:算法

√表示可以保證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開發文檔ide

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

相關文章
相關標籤/搜索