10

我想为 iphone/ipad 设备创建 UDID,它将保持不变,所以请告诉我是否有人对此有想法?

我搜索了谷歌和堆栈溢出,但没有得到解决方案。

也有人建议使用 OpenUDID 和 CFUUID,但是当用户删除并重新安装您的应用程序时,CFUUID 会有所不同。但是我想为每个应用程序使用相同的 UDID,该 UDID 将在第一次生成,并且在每个应用程序的每个设备的生命周期内应该保持不变。

4

3 回答 3

8

编辑 2

由于 iOS 升级,并且根据新文档identifierForVendor,重新安装应用程序时不会保留价值。我在这个链接上看到了答案。这可能以一种或其他方式有所帮助。请注意,即使系统重置,也只有 UDID 会保留,因此即使在系统重置时,对于寻求终身 UDID 的开发人员来说,这个答案可能会成为限制。除此之外,提到的答案似乎很有用。

也看这里的摘要


identifierForVendor可从UIDevice类参考中获得。

对于来自同一供应商并在同一设备上运行的应用,此属性的值相同。

[[UIDevice currentDevice] identifierForVendor].UUIDString

注意: 在 iOS 6.0 及更高版本中可用。

编辑 1根据UIDevice 类参考的新版本

当应用程序(或来自同一供应商的另一个应用程序)安装在 iOS 设备上时,此属性中的值保持不变。当用户从设备中删除该供应商的所有应用程序并随后重新安装其中一个或多个应用程序时,该值会发生变化。因此,如果您的应用程序将此属性的值存储在任何地方,您应该优雅地处理标识符更改的情况。


编辑

我希望你在这个受欢迎的链接上看到

1)MAC+CFBundleIdentifier的MD5

[[UIDevice currentDevice] uniqueDeviceIdentifier]

每个应用程序都将保持相同,但每个应用程序都不同。如果您删除并重新安装您的应用程序,每个应用程序将是相同的。

2) MAC的MD5

[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier]

对于来自同一设备的所有应用程序,这将保持不变。如果您删除并重新安装您的应用程序,则每台设备都是相同的。

编辑 3

注意:iOS 7 中的此解决方案不再有用,因为 iOS7 中不再提供 uniqueIdentifier。

于 2013-04-13T04:48:01.993 回答
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];
}
于 2013-04-30T17:38:20.057 回答
0

第一次生成 UUID(CFUUIDRef也许是使用 API),并将其存储在钥匙串中。

于 2013-04-13T06:04:47.363 回答