我的应用使用UIDevice currentDevice identifierForVendor
来帮助我识别设备。最近我遇到了一个我无法理解的情况。我的一个客户的UIDevice currentDevice identifierForVendor
iPad似乎发生了变化。这有可能吗?
答案 0 :(得分:8)
当用户从设备中删除所有该供应商的应用程序并随后重新安装其中一个或多个应用程序时,该值会更改。使用Xcode安装测试版本或使用ad-hoc分发在设备上安装应用程序时,该值也会发生变化。因此,如果您的应用程序将此属性的值存储在任何位置,则应优雅地处理标识符更改的情况。
答案 1 :(得分:4)
UIDevice currentDevice
只返回有关当前正在运行的设备的信息。在其中,您可以检查几个属性。我假设你正在检查[UIDevice currentDevice] identifierForVendor]
如果是这种情况,是的,它可以改变。如果用户删除了您的应用以及您(应用供应商)创建的所有其他应用,则identifierForVendor
可能会发生变化。它可以改变的另一种情况是它是不是从App Store安装的,后来是。例如,您为客户端提供了一个临时构建版本以供测试,然后他们会从App Store安装真实应用程序。
答案 2 :(得分:3)
我在搜索“几乎”一致/固定ID的唯一且固定ID时找到的另一个解决方案是使用advertisingIdentifier。您可以查看ASIdentifierManager。要访问您需要的ID,请执行以下操作:
@import AdSupport
...
NSString *id = [[ASIdentifierManager sharedManager] advertisingIdentifier];
如果设备重置了设置或重置了广告标识符,则会重置此ID。
目前我正在坚持使用
创建新的UUIDNSString *UUID = [[NSUUID UUID] UUIDString];
并将其存储在某处。
答案 3 :(得分:1)
在用户更新App Store中的应用程序后,似乎有一个错误在5月底出现导致identifierForVendor
返回新标识符,根据文档,它应该返回相同的标识符。请参阅these和these Apple开发者论坛帖子。我也看到了这一点,它影响了大约20%的用户。
答案 4 :(得分:0)
[UIDevice currentDevice]不是标识符。它是一个类的实例。我假设你的意思是identifierForVendor,它是唯一的,但不是固定的。
文档对于理解它以及提供替代方案非常有帮助。没有列出的是推送通知的设备令牌,但这是一个你不想进入的完全不同的包。