重要的是要注意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