我想为iphone / ipad设备创建UDID,它将保持不变,所以请告诉我是否有人有这个想法?
我搜索了谷歌和堆栈溢出,但没有得到解决方案。
还有人建议使用OpenUDID和CFUUID,但当用户删除并重新安装您的应用时,CFUUID会有所不同。但我希望每个应用程序使用相同的UDID,这将在第一次生成,并且对于每个应用程序,每个设备的生命周期应保持不变。
答案 0 :(得分:8)
编辑2
由于iOS升级,并且根据新文档identifierForVendor
不会保留应用重新安装的价值。我在this link看到了回答。这可能有助于一种或另一种方式。只是要注意,即使系统重置,只有UDID才会保留,因此,即使在系统重置时,这个答案也可能成为寻求终身UDID的开发人员的限制。除此之外,提到的答案似乎很有用。
另请查看summary here。
identifierForVendor
可从UIDevice
Class Reference.
此属性的值对于来自的应用程序是相同的 同一供应商在同一设备上运行。
[[UIDevice currentDevice] identifierForVendor].UUIDString
注意: 适用于iOS 6.0及更高版本。
编辑1 根据新版UIDevice Class Reference
此应用程序(或其他应用程序)中此属性的值保持不变 iOS设备上安装了来自同一供应商的应用程序。价值 当用户从中删除所有该供应商的应用程序时更改 设备,然后重新安装其中一个或多个。因此,如果 你的应用程序应该在任何地方存储此属性的值 优雅地处理标识符更改的情况。
修改强>
我希望您在this popular link
看到1) MAC + CFBundleIdentifier的MD5
[[UIDevice currentDevice] uniqueDeviceIdentifier]
每个应用程序保持相同但每个应用程序不同。如果您删除并重新安装应用,则每个应用都会相同。
2)MAC
的 MD5[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier]
对于来自同一设备的所有应用,这将保持相同。如果您删除并重新安装应用程序,则每台设备都会相同。
编辑3
注意:iOS 7中的此解决方案不再有用,因为iOS7中不再提供uniqueIdentifier。
答案 1 :(得分:2)
重要的是要注意UDID和UUID之间的区别。
UDID“唯一设备ID”是特定于硬件的。它永远不会改变特定设备。出于这个原因,它已成为一个隐私问题,Apple正在阻止试图使用它的应用程序。因此,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];
}
答案 2 :(得分:0)
首次生成UUID(可能使用CFUUIDRef
API),并将其存储在钥匙串中。