一、UDID:
UDID的全稱是Unique Device Identifier,是蘋果IOS設備的唯一識別碼,它由40個字符的字母和數字組成。在很多需要限制一台設備一個賬號的應用中經常會用到。在iOS5中可以獲取到設備的UDID,后來被蘋果禁止了。
備注:
代碼不讓獲取
獲取UDID的幾種方法:
1、Xcode
手機連接電腦后,打開Xcode,然后選擇window-->Device and Simulator-->Device
選中自己的手機,就能看到信息,"Identifier"這一欄,便是UDID。
2、蒲公英
https://www.pgyer.com/tools/udid
點擊上面鏈接,掃描二維碼,會提示安裝一個描述文件,點擊安裝之后,就會在瀏覽器中顯示出設備信息。長按復制"設備信息UDID"下面的值,就是UDID了。
二、UUID:
UUID是Universally Unique Identifier的縮寫,中文意思是通用唯一識別碼。它是讓分布式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。這樣,每個人都可以建立不與其它人沖突的UUID。在此情況下,就不需考慮數據庫建立時的名稱重復問題。蘋果公司建議使用UUID為應用生成唯一標識字符串。
開發者可以在應用第一次啟動時調用一次,然后將該串存儲起來,替代UDID來使用。使用UUID,就要考慮應用被刪除后再重新安裝時的處理。一個解決的辦法是:UUID一般只生成一次,通過 KeyChain 鑰匙串保存在iOS系統里面,如果應用刪除了,重裝應用之后它的UUID還是一樣的,除非系統重置。但是不能保證在以后的系統升級后還能用(如果系統保存了該信息就能用)。
/// 獲取設備 UUID +(NSString*)createUUID { CFUUIDRef puuid = CFUUIDCreate( nil ); CFStringRef uuidString = CFUUIDCreateString( nil, puuid ); NSString * uuid = (NSString *)CFBridgingRelease(CFStringCreateCopy( NULL, uuidString)); CFRelease(puuid); CFRelease(uuidString); return uuid; }
備注:
不同的應用不同的uuid,
還原設備,uuid變化
卸載重裝,uuid不變
如果iPhone系統升級,導致存儲路徑變化,uuid可能會變化
三、IDFA(identifierForIdentifier)
廣告標示符,適用於對外:例如廣告推廣,換量等跨應用的用戶追蹤等。是iOS6中另外一個新的方法,提供了一個方法advertisingIdentifier,通過調用該方法會返回一個NSUUID實例,最后可以獲得一個UUID,由系統存儲着的。不過即使這是由系統存儲的,但是有幾種情況下,會重新生成廣告標示符。如果用戶完全重置系統((設置程序-> 通用 -> 還原 -> 還原位置與隱私) ,這個廣告標示符會重新生成。另外如果用戶明確的還原廣告(設置程序->通用 -> 關於本機 -> 廣告 -> 還原廣告標示符),那么廣告標示符也會重新生成。關於廣告標示符的還原,有一點需要注意:如果程序在后台運行,此時用戶“還原廣告標示符”,然后再回到程序中,此時獲取廣告標示符並不會立即獲得還原后的標示符。必須要終止程序,然后再重新啟動程序,才能獲得還原后的廣告標示符。
在同一個設備上的所有App都會取到相同的值,是蘋果專門給各廣告提供商用來追蹤用戶而設的,用戶可以在 設置|隱私|廣告追蹤 里重置此id的值,或限制此id的使用,故此id有可能會取不到值,但好在Apple默認是允許追蹤的,而且一般用戶都不知道有這么個設置,所以基本上用來監測推廣效果,是戳戳有余了。
注意:由於idfa會出現取不到的情況,故絕不可以作為業務分析的主id,來識別用戶。
ios14的 idfa 是默認關閉的,當然你可以打開。美國99%的用戶選擇不會分享 idfa。這對數字媒體平台的廣告精准發布是個大障礙,用戶畫像更將模糊。對用戶來說,你的數字設備上收到的個性化廣告或相關性廣告將變得少得多。
代碼:
#import <AdSupport/AdSupport.h>
NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
備注:
還原設備,idfa變化 (設置程序 -> 通用 -> 還原 -> 還原位置與隱私)
還原廣告標識符,idfa變化 (設置程序-> 通用 -> 關於本機 -> 廣告 -> 還原廣告標示符)
在隱私-Apple廣告-個性化廣告中,iOS14以上默認是關閉的,所以取不到idfa
idfa可能會取不到值
每個設備只有一個IDFA,不同APP在同一設備上獲取IDFA的結果是一樣的
設備重啟不會產生新的IDFA
四、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];
備注:
idfv的值是一定能取到
同一台設備上,來自同一個供應商的 App,IDFV 相同。
同一台設備上,來自不同廠商的 App,IDFV 不同。
不同設備的 IDFV 不同,與供應商無關。換言之,即使同一個廠商的 App,在不同設備上 IDFV 也不相同。
當 iOS 設備上存在同一廠商的其他應用時,刪除 App 重裝,IDFV 保持不變。
刪除 iOS 設備上同一廠商全部 App,重新安裝 App,IDFV 會發生改變。
使用 Xcode 安裝測試版本或 ad-hoc 包時,IDFV 會發生改變。
還原設備,idfv變化 (設置程序 -> 通用 -> 還原 -> 還原位置與隱私)
五、IMEI
IMEI:英文名稱是:International Mobile Equipment Identity,是國際移動設備身份碼的縮寫,國際移動裝備辨識碼,是由15位數字組成的”電子串號”,它與每台手機一一對應,而且該碼是全世界唯一的。每一部手機在組裝完成后都將被賦予一個全球唯一的一組號碼,這個號碼從生產到交付使用都將被制造生產的廠商所記錄。手機用戶可以在手機中查到自己手機的IMEI碼。因為隱私問題,蘋果用戶在iOS5以后不能再獲取IMEI的值了。如果開發的App不上架蘋果商店,又想獲取IMEI值,可參考此鏈接,獲取IMEI值。
備注:
不讓獲取
六、IMSI
IMSI:英文名稱是:International Mobile Subscriber Identification Number,是國際移動用戶識別碼的縮寫,IMSI分為兩部分:一部分叫MCC(Mobile Country Code移動國家碼),MCC的資源由國際電聯(ITU)統一分配,唯一識別移動用戶所屬的國家,MCC共3位,中國地區的MCC為460;另一部分叫MNC(Mobile Network Code 移動網絡號碼),MNC用於識別移動客戶所屬的移動網絡運營商。MNC由二到三個十進制數組成,例如中國移動MNC為00、02、07,中國聯通的MNC為01、06、09,中國電信的MNC為03、05、11。
七、MAC
MAC地址:Mac地址是唯一的,unix有系統調用可以獲取Mac地址。iPhone可能有多個Mac地址,wifi的地址、以及SIM卡的地址。一般來講,我們取en0的地址,因為它是iPhone的wifi的地址,是肯定存在的(例外情況依然有:市面上依然存在一部分聯通的閹割版無wifi的iPhone)。Mac地址涉及到隱私,不應該胡亂將用戶的Mac地址傳播,所以我們需要將Mac地址進行hash之后再去使用。同樣因為隱私問題,在iOS7以后,蘋果禁止獲取MAC地址,系統現在只會返回02:00:00:00:00:00虛擬的地址。
備注:
不讓獲取