理解 : UDID、UUID、IDFA、IDFV

iOS獲取設備惟一標識的各類方法?IDFA、IDFV、UDID分別是什麼含義?
iOS獲取設備ID總結
IDFA解釋網絡

關於UUID的理解 :

英文名稱是:Universally Unique Identifier,翻譯過來就是通用惟一標識符。
UUID是指在一臺機器上生成的數字,它保證對在同一時空中的全部機器都是惟一的。一般平臺會提供生成的API。
是一個32位的十六進制序列,使用小橫線來鏈接:8-4-4-4-12 。

代碼獲取的方式: 
        NSLog(@"uuid = %@",[NSUUID UUID].UUIDString);

可是經過運行程序能夠發現,循環10次,每一次打印的值都是不同的,固然循環的再多,這個值永遠不會出現兩個同樣的值。

因此從某種程序上來講,UUID跟你的設備沒有什麼關係了。

因爲UUID的自己特性,它保證對在同一時空中的全部機器都是惟一的。
因此,須要做爲惟一標識碼的話,你能夠經過保存在keychain或者NSUserDefaults中.

關於UDID的理解 :

所謂UDID指的是設備的惟一設備識別符,移動廣告商和遊戲網絡運營商每每須要經過UDID用來識別玩家用戶,並對用戶活動進行跟蹤。

UDID 在 iOS5.0 的時候已經被拋棄使用了.
代碼實現 : [[UIDevice cuurrent] uniqueIdenfier]

在很早以前,蘋果宣稱若是第三方應用開發者繼續分享或者使用iPhone、Mac、AppleWatch的UDID的話,那麼他們的應用將會禁止上架。
爲何蘋果要在應用中禁止使用呢?那是由於隱私問題。好比我開發了5款App,不少用戶都下載了這5款App並使用。
若是我能輕易的獲取這些用戶的UDID,其實我能拼湊出用戶的不少信息。因爲UDID自己的隱私屬性,以前經常用來作第三方統計和其餘的目的。

固然如今也有人使用MAC地址來識別設備,由於MAC地址也惟一的識別了一臺設備而且不會被修改,不知道之後蘋果會對此如何操做。

UDID是放棄在代碼中獲取,目前主要用於配置真機調試證書.

由於隱私的問題,蘋果就推出了一個identifierForVendor的屬性獲取UDID,但獲取的值只是個替代品.詳細往下看
如下是蘋果對於禁用UDID的聲明:

UDID放棄使用.png

關於IDFV的理解 :

目前取代獲取UDID的方式: 
[[[UIDevice currentDevice] identifierForVendor] UUIDString];

關於identifierForVendor . 蘋果官方文檔有說明.
Normally, the vendor is determined by data provided by the App Store. 
If the app was not installed from the app store (such as enterprise apps and apps still in development), then a vendor identifier is calculated based on the app’s bundle ID. 
The bundle ID is assumed to be in reverse-DNS format.

大概的意思是: 
一般, vendor的值根據已經上架到App Store的app決定.
但若是app並非從AppStore中下載安裝,好比說是依然處於開發階段.
那麼vendor這個值會根據app's bundle ID 來計算.

bundle ID是反向DNS格式。如:com.example.app


參考網上一些博客講解理解:
此時打印出的字符串UUIDString這個東西不是真正的UDID,而是一個有一點像的替代品。如同我上面所說,UDID是隻和iOS設備有關的,而這個identifierForVendor是應用和設備二者都有關的:
    A應用安裝到張三這臺設備上,就會產生一個identifierForVendor(好比是:1234);
    A應用安裝到李四這臺設備上,就會產生另外一個identifierForVendor(好比是:5678);
    B應用安裝到張三這臺設備上,又是一個全新的identifierForVendor(好比是:9999),
    B應用安裝到李四這臺設備上,仍是一個全新的identifierForVendor(好比是:7777)。

    可是不管A應用安裝卸載多少次,產生的是都是1234.  因此咱們知道,這個identifierForVendor是一種應用加設備綁定產生的標識符,至關因而:Z(identifierForVendor) = X(某應用) + Y(某設備)。

固然,和真正的UDID的區別是顯而易見的:也就是說App的開發者沒有辦法去區分某一臺設備了,而是隻能識別某個應用在某臺設備上。


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的值和以前不一樣。

關於IDFA的理解 :

代碼實現:
#import <AdSupport/AdSupport.h>
  NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

在今年iOS10推出後,蘋果推出了「限制廣告追蹤」功能,設置的路徑和iOS9一致。
不過通過實際的測試,在iOS10以前,即便用戶打開這個功能,商家同樣能夠獲取IDFA,只不過與以前的不同了,每次切換這個開關與點擊「還原廣告標識符」的效果同樣。
而iOS10就不同了,當用戶打開這個功能後,商家只能獲取到一連串無心義的0

idfa.jpg

總結 :

目前在項目中使用的比較多的也就數IDFV了,其餘的幾個基本都被蘋果淘汰了.
同時關於UUID,由於保證對在同一時空中的全部機器都是惟一的,因此在程序安裝的時候生成惟一的UUID而且保存在keychain中,以這個惟一的UUID做爲惟一標識符,就能夠用於判斷惟一設備.變相的做爲UDID的用法.app

相關文章
相關標籤/搜索