理解 : UDID、UUID、IDFA、IDFV
關于UUID的理解 :
英文名稱是:Universally Unique Identifier,翻譯過來就是通用唯一標識符。
UUID是指在一臺機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。通常平臺會提供生成的API。
是一個32位的十六進制序列,使用小橫線來連接:8-4-4-4-12 。
代碼獲取的方式:
NSLog(@"uuid = %@",[NSUUID UUID].UUIDString);
但是通過運行程序可以發現,循環10次,每一次打印的值都是不一樣的,當然循環的再多,這個值永遠不會出現兩個一樣的值。
所以從某種程序上來說,UUID跟你的設備沒有什么關系了。
由于UUID的本身特性,它保證對在同一時空中的所有機器都是唯一的。
所以,需要作為唯一標識碼的話,你可以通過保存在keychain或者NSUserDefaults中.</code></pre>
關于UDID的理解 :
所謂UDID指的是設備的唯一設備識別符,移動廣告商和游戲網絡運營商往往需要通過UDID用來識別玩家用戶,并對用戶活動進行跟蹤。
UDID 在 iOS5.0 的時候已經被拋棄使用了.
代碼實現 : [[UIDevice cuurrent] uniqueIdenfier]
在很早之前,蘋果宣稱如果第三方應用開發者繼續分享或者使用iPhone、Mac、AppleWatch的UDID的話,那么他們的應用將會禁止上架。
為什么蘋果要在應用中禁止使用呢?那是因為隱私問題。比如我開發了5款App,很多用戶都下載了這5款App并使用。
如果我能輕易的獲取這些用戶的UDID,其實我能拼湊出用戶的很多信息。由于UDID本身的隱私屬性,之前常常用來做第三方統計和其他的目的。
當然現在也有人使用MAC地址來識別設備,因為MAC地址也唯一的識別了一臺設備并且不會被修改,不知道以后蘋果會對此如何操作。
UDID是放棄在代碼中獲取,目前主要用于配置真機調試證書.
因為隱私的問題,蘋果就推出了一個identifierForVendor的屬性獲取UDID,但獲取的值只是個替代品.詳細往下看</code></pre>
以下是蘋果對于禁用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的開發者沒有辦法去區分某一臺設備了,而是只能識別某個應用在某臺設備上。
PS:這里個人覺得不一定對,但是作為一個參考幫助理解吧,我嘗試不斷同一應用同一設備安裝卸載都會生成新的IDFV.
---------------------------------------------------</code></pre>
關于IDFA的理解 :
代碼實現:
import <AdSupport/AdSupport.h>
NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
在今年iOS10推出后,蘋果推出了“限制廣告追蹤”功能,設置的路徑和iOS9一致。
不過經過實際的測試,在iOS10之前,即使用戶打開這個功能,商家一樣可以獲取IDFA,只不過與之前的不一樣了,每次切換這個開關與點擊“還原廣告標識符”的效果一樣。
而iOS10就不一樣了,當用戶打開這個功能后,商家只能獲取到一連串無意義的0</code></pre>

idfa.jpg
總結 :
目前在項目中使用的比較多的也就數IDFV了,其他的幾個基本都被蘋果淘汰了.
來自:http://www.jianshu.com/p/b810d7e007ad