我一直在研究如何唯一地识别iOS设备并确保我们的应用程序在手机被擦除之前的同一设备上使用。
我知道已经弃用了查询UDID,并且有一种新方法可以将设备映射到应用程序:CFUUID但是这种方法的问题是CFUUID给出的这个UUID在每次新安装时都是不同的该应用程序。
编辑:其实我的意思是[[UIDevice currentDevice] identifierForVendor]
而不是CFUUID。 对不起,我指的是这个identifierForVendor,每次卸载应用程序时都不同。这是我在应用程序中不想要的。必须有一种方法,因为我擦了我的手机,Testflight能够将它识别为同一设备。我想知道他们是如何做到的。
即使在查询MAC地址(现在为所有设备返回相同的数字)并且不推荐使用UDID之后,像testflight和所有分析服务这样的服务仍然能够唯一地识别设备和用户。有人可以告诉我一种唯一识别iOS设备的机制,即使在手机擦除后也可以识别它。
我已查看Apple OTA Configuration但我不确定这是否可以帮助以某种方式仅跟踪设备,而不是为登录我们服务的用户发回任何配置文件。
答案 0 :(得分:7)
在iOS 7上没有您想要的可公开访问的API。
您正在寻找的最接近的选项是
[[UIDevice currentDevice] identifierForVendor]
来自Apple的文档:
对于来自同一设备上运行的同一供应商的应用,此属性的值相同。对于来自不同供应商的同一设备上的应用程序以及不同供应商的不同设备上的应用程序,将返回不同的值。
当iOS设备上安装了应用程序(或来自同一供应商的其他应用程序)时,此属性中的值保持不变。当用户从设备中删除所有该供应商的应用程序并随后重新安装其中一个或多个应用程序时,该值会更改。
答案 1 :(得分:1)
无论好坏,Apple已弃用任何可能有用的东西(如果您尝试解决方法,将拒绝AppStore中的应用程序,尽管您可能没有计划App Store分发)。他们的理由是,用户应该能够随意更换/升级手机,只要他们的Apple ID保持不变,他们就可以继续使用他们以前的资产。
当然,我可以想象他们的逻辑存在缺陷并且设备很重要的情况,但这不取决于我......
你有没有办法把东西绑定到用户登录而不是设备?如果没有,你可以做的是在设备上生成并存储一个随机数。
答案 2 :(得分:0)
没有公开(即Apple批准)的方法来识别擦拭设备。如果设备被擦除/恢复,identifierForVendor
和advertisingIdentifier
都会改变。
TestFlight等服务能够识别设备,因为它们会安装特殊的配置文件,为其提供一些额外的功能,例如获取实际的UDID。
如果您未定位AppStore(即尝试通过AdHoc应用或越狱设备执行此操作),则可以通过私有API实现此目的。