在iOS系統(tǒng)中,獲取設備唯一標識的方法有很多:
一.UDID(Unique Device Identifier)
二.UUID(Universally Unique Identifier)
三.MAC Address
四.OPEN UDID
五.廣告標示符(IDFA-identifierForIdentifier)
六.Vindor標示符 (IDFV-identifierForVendor)
七.推送token+bundle_id
UDID的全稱是Unique Device Identifier帮碰,它就是蘋果IOS設備的唯一識別碼,它由40個字符的字母和數(shù)字組成(越獄的設備通過某些工具可以改變設備的UDID)粥烁。但是蚀浆,從IOS5.0(2011年8月份)開始,蘋果宣布將不再支持用uniqueIdentifier方法獲取設備的UDID容诬,iOS5以下是可以用的粱快。在2013年3月21日蘋果已經(jīng)通知開發(fā)者:從2013年5月1日起秩彤,訪問UIDIDs的程序將不再被審核通過,替代的方案是開發(fā)者應該使用“在iOS 6中介紹的Vendor或Advertising標示符”事哭。
OPEN UDID呐舔,沒有用到MAC地址,同時能保證同一臺設備上的不同應用使用同一個OpenUDID慷蠕,只要用戶設備上有一個使用了OpenUDID的應用存在時珊拼,其他后續(xù)安裝的應用如果獲取OpenUDID,都將會獲得第一個應用生成的那個流炕。如果把使用了OpenUDID方案的應用全部都刪除澎现,再重新獲取OpenUDID,此時的OpenUDID就跟以前的不一樣每辟〗1瑁可見,這種方法還是不保險渠欺。
廣告標示符妹蔽,是iOS 6中另外一個新的方法,提供了一個方法advertisingIdentifier,通過調用該方法會返回一個NSUUID實例胳岂,最后可以獲得一個UUID编整,由系統(tǒng)存儲著的。不過即使這是由系統(tǒng)存儲的乳丰,但是有幾種情況下掌测,會重新生成廣告標示符。如果用戶完全重置系統(tǒng)((設置程序 -> 通用 -> 還原 -> 還原位置與隱私) 产园,這個廣告標示符會重新生成汞斧。另外如果用戶明確的還原廣告(設置程序-> 通用 -> 關于本機 -> 廣告 -> 還原廣告標示符) ,那么廣告標示符也會重新生成什燕。關于廣告標示符的還原粘勒,有一點需要注意:如果程序在后臺運行,此時用戶“還原廣告標示符”屎即,然后再回到程序中庙睡,此時獲取廣 告標示符并不會立即獲得還原后的標示符。必須要終止程序剑勾,然后再重新啟動程序埃撵,才能獲得還原后的廣告標示符赵颅。
Vendor標示符虽另,也是在iOS 6中新增的,跟advertisingIdentifier一樣饺谬,該方法返回的是一個 NSUUID對象捂刺,可以獲得一個UUID。如果滿足條件“相同的一個程序里面-相同的vendor-相同的設備”募寨,那么獲取到的這個屬性值就不會變族展。如果是“相同的程序-相同的設備-不同的vendor,或者是相同的程序-不同的設備-無論是否相同的vendor”這樣的情況拔鹰,那么這個值是不會相同的仪缸。
UUID是Universally Unique Identifier的縮寫,中文意思是通用唯一識別碼列肢。它是讓分布式系統(tǒng)中的所有元素恰画,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定瓷马。蘋果公司建議使用UUID為應用生成唯一標識字符串拴还。
iOS中獲取UUID的代碼如下:
-(NSString*) uuid {
CFUUIDRef puuid = CFUUIDCreate( nil );
CFStringRef uuidString = CFUUIDCreateString( nil, puuid );
NSString * result = (NSString *)CFStringCreateCopy( NULL, uuidString);
CFRelease(puuid);
CFRelease(uuidString);
return [result autorelease];
}
開發(fā)者可以在應用第一次啟動時調用一 次,然后將該串存儲起來欧聘,以便以后替代UDID來使用片林。但是,如果用戶刪除該應用再次安裝時,又會生成新的字符串费封,所以不能保證唯一識別該設備焕妙。一個解決的辦法是:UUID一般只生成一次,保存在iOS系統(tǒng)里面孝偎,如果應用刪除了访敌,重裝應用之后它的UUID還是一樣的,除非系統(tǒng)重置 衣盾。但是不能保證在以后的系統(tǒng)升級后還能用(如果系統(tǒng)保存了該信息就能用)寺旺。