iOS獲取設備唯一標識的各種方法?IDFA、IDFV、UDID分別是什麼含義? [摘要:1、UDID (Unique Device Identifier) UDID的齊稱是Unique Device Identifier,望文生義,它便是蘋果IOS裝備的獨一辨認碼,它由40個字元的字母戰數字構成。正 ...
iOS獲取設備唯一標識的各種方法?IDFA、IDFV、UDID分別是什麼含義?
[摘要:1、UDID (Unique Device Identifier) UDID的齊稱是Unique Device Identifier,望文生義,它便是蘋果IOS裝備的獨一辨認碼,它由40個字元的字母戰數字構成。正在良多須要限定]一、UDID (Unique Device Identifier)
UDID的全稱是Unique Device Identifier,顧名思義,它就是蘋果IOS設備的唯一識別碼,它由40個字元的字母和數字組成。在很多需要限制一臺設備一個賬號的應用中經常會用到。在iOS5中可以獲取到設備的UDID,後來被蘋果禁止了。
二、UUID(Universally Unique Identifier)
UUID是Universally Unique Identifier的縮寫,中文意思是通用唯一識別碼。它是讓分散式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。這樣,每個人都可以建立不與其它人衝突的 UUID。在此情況下,就不需考慮資料庫建立時的名稱重覆問題。蘋果公司建議使用UUID為應用生成唯一標識字元串。
開發者可以在應用第一次啟動時調用一 次,然後將該串存儲起來,替代UDID來使用。但是,如果用戶刪除該應用再次安裝時,又會生成新的字元串,所以不能保證唯一識別該設備。使用UUID,就要考慮應用被刪除後再重新安裝時的處理。一個解決的辦法是:UUID一般只生成一次,保存在iOS系統裡面,如果應用刪除了,重裝應用之後它的UUID還是一樣的,除非系統重置 。但是不能保證在以後的系統升級後還能用(如果系統保存了該信息就能用)。
三、MAC Address
用來表示互聯網上每一個站點的標識符,採用十六進位數表示,共六個位元組(48位)。其中,前三個位元組是由IEEE的註冊管理機構 RA負責給不同廠家分配的代碼(高位24位),也稱為“編製上唯一的標識符” (Organizationally Unique Identifier),後三個位元組(低位24位)由各廠家自行指派給生產的適配器介面,稱為擴展標識符(唯一性)。
MAC地址在網路上用來區分設備的唯一性,接入網路的設備都有一個MAC地址,他們肯定都是不同的,是唯一的。一部iPhone上可能有多個MAC地址,包括WIFI的、SIM的等,但是iTouch和iPad上就有一個WIFI的,因此只需獲取WIFI的MAC地址就好了,也就是en0的地址。 MAC地址就如同我們身份證上的身份證號碼,具有全球唯一性。這樣就可以非常好的標識設備唯一性,類似與蘋果設備的UDID號,通常的用途有:1)用於一些統計與分析目的,利用用戶的操作習慣和數據更好的規劃產品;2)作為用戶ID來唯一識別用戶,可以用游客身份使用app又能在伺服器端保存相應的信息,省去用戶名、密碼等註冊過程。 使用Mac地址生成設備的唯一標識主要分三種: 1、直接使用“MAC Address” 2、使用“MD5(MAC Address)”3、使用“MD5(Mac Address+bundle_id)”獲得“機器+應用”的唯一標識(bundle_id 是應用的唯一標識) 在iOS7之後,如果請求Mac地址都會返回一個固定值。
四、IDFA(identifierForIdentifier)
廣告標示符,適用於對外:例如廣告推廣,換量等跨應用的用戶追蹤等。
是iOS 6中另外一個新的方法,提供了一個方法advertisingIdentifier,通過調用該方法會返回一個NSUUID實例,最後可以獲得一個UUID,由系統存儲著的。不過即使這是由系統存儲的,但是有幾種情況下,會重新生成廣告標示符。如果用戶完全重置系統((設置程式 -> 通用 -> 還原 -> 還原位置與隱私) ,這個廣告標示符會重新生成。另外如果用戶明確的還原廣告(設置程式-> 通用 -> 關於本機 -> 廣告 -> 還原廣告標示符) ,那麼廣告標示符也會重新生成。關於廣告標示符的還原,有一點需要註意:如果程式在後臺運行,此時用戶“還原廣告標示符”,然後再回到程式中,此時獲取廣 告標示符並不會立即獲得還原後的標示符。必須要終止程式,然後再重新啟動程式,才能獲得還原後的廣告標示符。
在同一個設備上的所有App都會取到相同的值,是蘋果專門給各廣告提供商用來追蹤用戶而設的,用戶可以在 設置|隱私|廣告追蹤 里重置此id的值,或限制此id的使用,故此id有可能會取不到值,但好在Apple預設是允許追蹤的,而且一般用戶都不知道有這麼個設置,所以基本上用來監測推廣效果,是戳戳有餘了。
註意:由於idfa會出現取不到的情況,故絕不可以作為業務分析的主id,來識別用戶。
代碼:
#import <AdSupport/AdSupport.h>
NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
五、IDFV(identifierForVendor)
Vindor標示符,適用於對內:例如分析用戶在應用內的行為等。
是給Vendor標識用戶用的,每個設備在所屬同一個Vender的應用里,都有相同的值。其中的Vender是指應用提供商,但準確點說,是通過BundleID的DNS反轉的前兩部分進行匹配,如果相同就是同一個Vender,例如對於com.somecompany.appone,com.somecompany.apptwo 這兩個BundleID來說,就屬於同一個Vender,共用同一個idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常適合於作為內部用戶行為分析的主id,來標識用戶,替代OpenUDID。
註意:如果用戶將屬於此Vender的所有App卸載,則idfv的值會被重置,即再重裝此Vender的App,idfv的值和之前不同。
代碼:
NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
六、OPEN UDID
每台iOS設備的OpenUDID是通過第一個帶有OpenUDID SDK包的App生成,如果你完全刪除全部帶有OpenUDID SDK包的App(比如恢復系統等),那麼OpenUDID會重新生成,而且和之前的值會不同,相當於新設備;
優點是沒有用到MAC地址;不同設備能夠獲取各自唯一的識別碼,保證了唯一性,可以用於以往UDID的相關用途;從代碼分析OpenUDID的獲取,識別碼獲取方便並且保存謹慎。缺點是當將設備上所有使用了OpenUDID方案的應用程式刪除,且設備關機重啟,xcode徹底清除並重啟,重裝應用程式去獲取OpenUDID,此時OpenUDID變化,與之前不一樣了,所有OpenUDID應用卸載後,由UIPasteboard保存的數據即被清除,重裝故會重新獲取新的OpenUDID。
那麼當因為用戶干預或者惡意程式,致使UIPasteboard數據清除,從而導致OpenUDID被刪除,重裝也會獲取新的OpenUDID。
OpenUDID生成唯一識別碼的代碼:
- unsigned char result[16];
- const charchar *cStr = [[[NSProcessInfo processInfo] globallyUniqueString] UTF8String];
- CC_MD5( cStr, strlen(cStr), result );
- _openUDID = [NSString stringWithFormat:
- @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%08x",
- result[0], result[1], result[2], result[3],
- result[4], result[5], result[6], result[7],
- result[8], result[9], result[10], result[11],
- result[12], result[13], result[14], result[15],
- arc4random() % 4294967295];