1. 程式人生 > 其它 >裝置唯一識別符號 UDID,UUID, IDFA,IDFV,

裝置唯一識別符號 UDID,UUID, IDFA,IDFV,

一、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可能會變化

三、IDFAidentifierForIdentifier

廣告標示符,適用於對外:例如廣告推廣,換量等跨應用的使用者追蹤等。是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

四、IDFVidentifierForVendor

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 會發生改變。

五、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虛擬的地址。

備註:

不讓獲取

在北京的燈中,有一盞是我家的。這個夢何時可以實現?哪怕微微亮。北京就像魔鬼訓練營,有能力的留,沒能力的走……