UDID和UUID的區(qū)別
1.1【UDID】
UDID的全名為 Unique Device Identifier :設(shè)備唯一標(biāo)識符。
從名稱上也可以看出,UDID這個東西是和設(shè)備有關(guān)的,而且是只和設(shè)備有關(guān)的,有點類似于MAC地址。需要把UDID這個東西添加到Provisoning Profile授權(quán)文件中,也就是把設(shè)備唯一標(biāo)識符添加進(jìn)去,以此來識別某一臺設(shè)備。
UDID是一個40位十六進(jìn)制序列,我們可以使用iTunes和Xcode來獲取這個值。
(1)iTunes獲取UDID:把我們的手機(jī)連上電腦,然后打開iTunes.:選中摘要--默認(rèn)這個位置顯示的是序列號,只要點擊一下序列號的位置,就可以切換為UDID了。
(2)Xcode獲取UDID:
把手機(jī)連上電腦,然后打開Xcode,選擇Window-->Devices,就會顯示出當(dāng)前你連接上的所有設(shè)備,其中顯示的Identifier就是該設(shè)備的UDID:
自從iOS5之后,蘋果就禁止了通過代碼訪問UDID,在這之前,可以使用
[[UIDevice cuurrent] uniqueIdenfier]
這個方法來獲取某設(shè)備UDID,現(xiàn)在是不可能了。
而在目前的SDK中,蘋果提供了一個參數(shù)identifierForVendor來替代原來UDID的作用。通過代碼實現(xiàn)如下:
NSUUID *uuid = [UIDevice currentDevice].identifierForVendor;
NSLog(@"uuid 1 = %@",uuid.UUIDString);
此時打印出的字符串UUIDString這個東西不是真正的UDID,而是一個有一點像的替代品。如同我上面所說,UDID是只和iOS設(shè)備有關(guān)的,而這個identifierForVendor是應(yīng)用和設(shè)備兩者都有關(guān)的.
我們推測,這個identifierForVendor是一種應(yīng)用加設(shè)備綁定產(chǎn)生的標(biāo)識符,相當(dāng)于是:Z(identifierForVendor) = X(某應(yīng)用) + Y(某設(shè)備),再經(jīng)過加密而來的. 當(dāng)然,和真正的UDID的區(qū)別是顯而易見的:也就是說App的開發(fā)者沒有辦法去區(qū)分某一臺設(shè)備了,而是只能識別某個應(yīng)用在某臺設(shè)備上。
1.2【UUID】
英文名稱是:Universally Unique Identifier,翻譯過來就是通用唯一標(biāo)識符。
是一個32位的十六進(jìn)制序列,使用小橫線來連接:8-4-4-4-12 。UUID在某一時空下是唯一的。比如在當(dāng)前這一秒,全世界產(chǎn)生的UUID都是不一樣的;當(dāng)然同一臺設(shè)備產(chǎn)生的UUID也是不一樣的。
下面是最簡單獲取UUID的代碼如下:
for (int i = 0; i < 10; i++)
{
NSString *uuid = [NSUUID UUID].UUIDString;
NSLog(@"uuid 2 = %@",uuid);
}
通過運行程序可以發(fā)現(xiàn),循環(huán)10次,每一次打印的值都是不一樣的,當(dāng)然循環(huán)的再多,這個值永遠(yuǎn)不會出現(xiàn)兩個一樣的值。所以從某種程序上來說,UUID跟你的設(shè)備沒有什么關(guān)系了。
蘋果宣稱如果第三方應(yīng)用開發(fā)者繼續(xù)分享或者使用iPhone、Mac、AppleWatch的UDID的話,那么他們的應(yīng)用將會禁止上架。
為什么蘋果要在應(yīng)用中禁止使用呢?
那是因為隱私問題。比如我開發(fā)了5款A(yù)pp,很多用戶都下載了這5款A(yù)pp并使用。如果我能輕易的獲取這些用戶的UDID,
其實我能拼湊出用戶的很多信息。由于UDID本身的隱私屬性,之前常常用來做第三方統(tǒng)計和其他的目的。當(dāng)然現(xiàn)在也
有人使用MAC地址來識別設(shè)備,因為MAC地址也唯一的識別了一臺設(shè)備并且不會被修改,不知道以后蘋果會對此如何操
作。果然iOS7中蘋果再一次無情的封殺mac地址,使用之前的方法獲取到的mac地址全部都變成了02:00:00:00:00:00。