一种替代设备UDID的方法 - 我们的准备工作

11

可能是重复问题:
UIDevice uniqueIdentifier已经被弃用-现在该怎么办?

我知道在Stack Overflow上已经有很多关于这个问题的提问,但我认为由于苹果公司正提前执行并积极拒绝使用UDID(http://pulse.me/s/7mzKE)的应用程序,我们开发者需要采取积极的方法批判性地讨论这个问题。

所以问题是 - 除了访问其UDID属性之外,什么是好的、稳定的和正确的唯一设备标识的替代方法?

5个回答

15

这取决于您的需求......如果您想要一个简单的设备标识符供您的应用程序使用,那么关于废弃的uniqueIdentifier方法的文档基本上已经给出了您的答案:

不要使用uniqueIdentifier属性。为创建特定于您的应用程序的唯一标识符,可以调用CFUUIDCreate函数创建UUID,并使用NSUserDefaults类将其写入默认数据库。

CFUUIDCreate将返回一个唯一的手机标识符,该标识符是特定于您的应用程序的唯一标识符。您需要将其存储在NSUserDefaults中,因为如果进行后续调用,则会发生更改。对于大多数用途,这就足够了,苹果也提供了足够的警告(iOS 5已经发布超过六个月了,并且开发者文档更长)。

另一个场景是,您需要跨应用程序共享设备标识符(即移动广告网络)。这是一个更复杂的问题,有许多替代选项(还没有保证它们将来会存在:苹果废弃UDID API的主要原因可能是为了阻止跨应用程序的用户跟踪)。


4
如果用户删除并重新安装你的应用程序,CFUUID 将会改变。 - Tuyen Nguyen
2
您可以将其保存到钥匙串中,而不是用户默认设置中,在这种情况下,普通的删除/重新安装不会影响它。合理地删除终端用户的钥匙串条目的唯一方法是对设备进行完全擦除。 - lxt
2
但是,当备份被恢复时,NSUserDefaults不会被恢复到新设备上吗?在这种情况下,它就不是唯一的设备标识符了。 - Nestor
没有UDID,推送通知将如何工作? - Amit Battan
2
推送通知不使用UDID - 它们使用设备令牌,该令牌在用户选择接收通知时由设备生成。它们可以并且确实因应用程序而异。 - lxt

9

我个人最喜欢的是OpenUDID。

你可以在GitHub上获取这里

我总结了我的想法,并在这里简要描述了它。


从代码来看,它只是像这里的另一个答案所描述的那样,在NSUserDefaults中使用UUID技巧。 - Nestor
@Nestor - 我错过了那个。但如果它被广泛采用并且我们再次获得标准设备标识符,将其放在库中会非常方便! - Chris Maddern
OpenUDID不是恢复安全的。如果用户恢复设备,则OpenUDID会更改。在我看来,这使其不太有用。 - Sirio
现已弃用,请参阅以下链接:https://github.com/ylechelle/OpenUDID/ 和 http://blog.appsfire.com/udid-is-dead-openudid-is-deprecated-long-live-advertisingidentifier/。 - King-Wizard

4

SecureUDID是基于OpenUDID的安全性更高的替代品,只能通过域名访问(和盐)

更多信息.


1

在任何无线通信期间,设备2或3的MAC地址已经被协议规范公开。


不能再使用MAC地址了。 - Alberto M

0

虽然我认为这不是一个典型的“如何克服特定技术挑战”的问题,但我同意这非常重要,并且可以在SO上得到很好的讨论(不确定-维基?论坛?)。 我很想知道是否有关于 Flurry如何做到这一点的讨论。


他们不是唯一一个克服这个问题的人。我读到了其他几种方法,但主要问题是现在我们正在寻找一种非集中式的解决方案,这对我们开发人员来说将是一个巨大的痛苦。感谢您的回复。 - Stavash

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