如何在iPhone上生成一个好的、不变的UDID

4
在iOS 5中,[[UIDevice currentDevice] uniqueIdentifier]的使用已被弃用。现在我们被鼓励使用自己生成的UUID,并将其存储在应用程序的NSDefaults中。我想这对大多数用途来说都是可以的。
但我的问题是 - 是否可能生成一个行为类似于当前设备ID的UUID - 即使应用程序被删除并重新安装,我也希望保持它不变。这样做的目的是帮助跟踪可能从iPhone上进行的欺诈尝试。
我想知道是否可以使用MAC地址,就像这个类别:https://github.com/erica/uidevice-extension/blob/master/UIDevice-Hardware.m一样?

自1970年以来到当前日期的秒数应该是唯一的,如果用户没有玩弄iPhone时间的话。 - iOSPawan
但它不限于特定设备... 我需要它保持不变。 - kender
1
Unix时间戳并不是一个好的选择作为唯一标识符,因为它并不真正独一无二。对于大多数应用程序来说,它可能在大多数情况下都足够使用,但只需要两个用户在同一时间首次启动应用程序,系统就会崩溃。此外,它不能在卸载和重新安装之间持久化,因此根本不适合作为唯一标识符。 - Jonathan Ellis
2个回答

2
文本翻译如下:
文档中对uniqueIdentifier属性的讨论如下:
不要使用uniqueIdentifier属性。要创建特定于您的应用程序的唯一标识符,可以调用CFUUIDCreate函数创建UUID,并使用NSUserDefaults类将其写入默认数据库。
将其写入用户默认值应该确保在删除/重新安装应用程序时保留它。
抱歉,应用程序被删除时它们不会被保留文档 描述了如何生成UUID,但我无法确定对于给定的用户/设备是否是恒定的。我看到有些人建议使用keychain来实现在应用程序删除/重新安装时的持久性,但我不知道这是否可靠(而且无论如何,我想用户可以删除这些条目)。

0
使用苹果描述的方法(由jbat指出)创建自己的UUID,并将其存储在NSUserDefaults中。
使用iCloud,您可以使用键值存储来帮助“持久化”此UUID到特定用户之间,在安装和不同设备之间。

1
我在考虑这个问题,但是问题在于用户可以禁用iCloud及其存储功能,而且这可以针对每个应用程序进行设置,对吧? - kender
据我所知,您无法针对每个应用程序禁用iCloud,但是您可以禁用“文档和数据”iCloud同步,从而导致该应用程序无法备份。 - JonB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接