iOS獲取設(shè)備唯一標(biāo)識的各種方法?IDFA、IDFV、UDID分別是什么含義?

image.png

一、UDID (Unique Device Identifier)

UDID的全稱是Unique Device Identifier,顧名思義,它就是蘋果IOS設(shè)備的唯一識別碼,它由40個字符的字母和數(shù)字組成。在很多需要限制一臺設(shè)備一個賬號的應(yīng)用中經(jīng)常會用到。在iOS5中可以獲取到設(shè)備的UDID,后來被蘋果禁止了。

二、UUID(Universally Unique Identifier)

UUID是Universally Unique Identifier的縮寫,中文意思是通用唯一識別碼。它是讓分布式系統(tǒng)中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。這樣,每個人都可以建立不與其它人沖突的 UUID。在此情況下,就不需考慮數(shù)據(jù)庫建立時的名稱重復(fù)問題。蘋果公司建議使用UUID為應(yīng)用生成唯一標(biāo)識字符串。

三、MAC Address

用來表示互聯(lián)網(wǎng)上每一個站點(diǎn)的標(biāo)識符,采用十六進(jìn)制數(shù)表示,共六個字節(jié)(48位)。其中,前三個字節(jié)是由IEEE的注冊管理機(jī)構(gòu)RA負(fù)責(zé)給不同廠家分配的代碼(高位24位),也稱為“編制上唯一的標(biāo)識符” (Organizationally Unique Identifier),后三個字節(jié)(低位24位)由各廠家自行指派給生產(chǎn)的適配器接口,稱為擴(kuò)展標(biāo)識符(唯一性)。
  MAC地址在網(wǎng)絡(luò)上用來區(qū)分設(shè)備的唯一性,接入網(wǎng)絡(luò)的設(shè)備都有一個MAC地址,他們肯定都是不同的,是唯一的。一部iPhone上可能有多個MAC地址,包括WIFI的、SIM的等,但是iTouch和iPad上就有一個WIFI的,因此只需獲取WIFI的MAC地址就好了,也就是en0的地址。
  MAC地址就如同我們身份證上的身份證號碼,具有全球唯一性。這樣就可以非常好的標(biāo)識設(shè)備唯一性,類似與蘋果設(shè)備的UDID號,通常的用途有:1)用于一些統(tǒng)計與分析目的,利用用戶的操作習(xí)慣和數(shù)據(jù)更好的規(guī)劃產(chǎn)品;2)作為用戶ID來唯一識別用戶,可以用游客身份使用app又能在服務(wù)器端保存相應(yīng)的信息,省去用戶名、密碼等注冊過程。
使用Mac地址生成設(shè)備的唯一標(biāo)識主要分三種:
1、直接使用“MAC Address”
2、使用“MD5(MAC Address)”
3、使用“MD5(Mac Address+bundle_id)”獲得“機(jī)器+應(yīng)用”的唯一標(biāo)識(bundle_id 是應(yīng)用的唯一標(biāo)識)
  在iOS7之后,如果請求Mac地址都會返回一個固定值。

四、IDFA(identifierForIdentifier)

廣告標(biāo)示符,適用于對外:例如廣告推廣,換量等跨應(yīng)用的用戶追蹤等。
  是iOS 6中另外一個新的方法,提供了一個方法advertisingIdentifier,通過調(diào)用該方法會返回一個NSUUID實(shí)例,最后可以獲得一個UUID,由系統(tǒng)存儲著的。不過即使這是由系統(tǒng)存儲的,但是有幾種情況下,會重新生成廣告標(biāo)示符。如果用戶完全重置系統(tǒng)((設(shè)置程序 -> 通用 -> 還原 -> 還原位置與隱私) ,這個廣告標(biāo)示符會重新生成。另外如果用戶明確的還原廣告(設(shè)置程序-> 通用 -> 關(guān)于本機(jī) -> 廣告 -> 還原廣告標(biāo)示符) ,那么廣告標(biāo)示符也會重新生成。關(guān)于廣告標(biāo)示符的還原,有一點(diǎn)需要注意:如果程序在后臺運(yùn)行,此時用戶“還原廣告標(biāo)示符”,然后再回到程序中,此時獲取廣 告標(biāo)示符并不會立即獲得還原后的標(biāo)示符。必須要終止程序,然后再重新啟動程序,才能獲得還原后的廣告標(biāo)示符。
  在同一個設(shè)備上的所有App都會取到相同的值,是蘋果專門給各廣告提供商用來追蹤用戶而設(shè)的,用戶可以在 設(shè)置|隱私|廣告追蹤 里重置此id的值,或限制此id的使用,故此id有可能會取不到值,但好在Apple默認(rèn)是允許追蹤的,而且一般用戶都不知道有這么個設(shè)置,所以基本上用來監(jiān)測推廣效果,是戳戳有余了。

*** 注意:由于idfa會出現(xiàn)取不到的情況,故絕不可以作為業(yè)務(wù)分析的主id,來識別用戶。 ***

代碼:

#import <AdSupport/AdSupport.h>
NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
五、IDFV(identifierForVendor)

Vendor標(biāo)示符,適用于對內(nèi):例如分析用戶在應(yīng)用內(nèi)的行為等。
  是給Vendor標(biāo)識用戶用的,每個設(shè)備在所屬同一個Vender的應(yīng)用里,都有相同的值。其中的Vender是指應(yīng)用提供商,但準(zhǔn)確點(diǎn)說,是通過BundleID的DNS反轉(zhuǎn)的前兩部分進(jìn)行匹配,如果相同就是同一個Vender,例如對于

com.somecompany.appone
com.somecompany.apptwo

這兩個BundleID來說,就屬于同一個Vender,共享同一個idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常適合于作為內(nèi)部用戶行為分析的主id,來標(biāo)識用戶,替代OpenUDID。

*** 注意:如果用戶將屬于此Vender的所有App卸載,則idfv的值會被重置,即再重裝此Vender的App,idfv的值和之前不同。***

代碼:

NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
六、OPEN UDID

每臺iOS設(shè)備的OpenUDID是通過第一個帶有OpenUDID SDK包的App生成,如果你完全刪除全部帶有OpenUDID SDK包的App(比如恢復(fù)系統(tǒng)等),那么OpenUDID會重新生成,而且和之前的值會不同,相當(dāng)于新設(shè)備;
  優(yōu)點(diǎn)是沒有用到MAC地址;不同設(shè)備能夠獲取各自唯一的識別碼,保證了唯一性,可以用于以往UDID的相關(guān)用途;從代碼分析OpenUDID的獲取,識別碼獲取方便并且保存謹(jǐn)慎。缺點(diǎn)是當(dāng)將設(shè)備上所有使用了OpenUDID方案的應(yīng)用程序刪除,且設(shè)備關(guān)機(jī)重啟,xcode徹底清除并重啟,重裝應(yīng)用程序去獲取OpenUDID,此時OpenUDID變化,與之前不一樣了,所有OpenUDID應(yīng)用卸載后,由UIPasteboard保存的數(shù)據(jù)即被清除,重裝故會重新獲取新的OpenUDID。
  那么當(dāng)因?yàn)橛脩舾深A(yù)或者惡意程序,致使UIPasteboard數(shù)據(jù)清除,從而導(dǎo)致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]; 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容