重要的是要注意UDID和UUID之間的區別。
UDID「唯一設備ID」是硬件特定的。它永遠不會改變一個特定的設備。出於這個原因,它已成爲一個隱私問題,蘋果正在阻止試圖使用它的應用程序。因此,Apple已經生成了一個選擇退出的「設備ID」哈希,特別是對於廣告使用。這個新的ID散列稱爲IFA,可在iOS 6.0或更高版本中使用。
UUID「通用唯一ID」不是硬件特定的。它是用來識別設備的散列。但不是絕對的價值。例如,PhoneGap根據設備屬性生成一個UUID;這是您在執行device.uuid時所得到的結果。如果你刪除了應用程序並重新安裝,你會得到一個新的ID散列。 UUID沒有被Apple阻止。
我認爲您的案例中最好的解決方案是使用IFA,OpenUDID作爲iOS < 6.0的備份。
這是我們使用的代碼。如果IFA不可用,請獲取OpenUDID。你必須安裝OpenUDID,在這裏閱讀更多關於https://github.com/ylechelle/OpenUDID。
NSString* uuid = nil;
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
// IOS 6 new Unique Identifier implementation, IFA
uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
} else {
// Before iOS6 (or if IFA disabled) you shoud use a custom implementation for uuid
// Here I use OpenUDID (you have to import it into your project)
// https://github.com/ylechelle/OpenUDID
NSString* openUDID = [OpenUDID value];
uuid = [OpenUDID value];
}
我有類似的需求。如果一個被黑客攻擊的應用程序每次發送一個生成的UUID而不是原始的UUID,會發生什麼?有從安裝的原始應用程序確定UUID的方法嗎? – 2013-05-29 17:15:51