重新安装后identifierForVendor会发生变化

21

identifierForVendor不应该在重新安装应用程序时更改:

  

只要在iOS设备上安装了该应用程序(或同一供应商的另一个应用程序),此属性中的值将保持不变。当用户从设备中删除该供应商的所有应用程序并随后重新安装其中一个或多个应用程序时,该值会更改。在使用Xcode安装测试版本或使用ad-hoc分发在设备上安装应用程序时,该值也可以更改。因此,如果您的应用程序在任何地方存储此属性的值,则应优雅地处理标识符更改的情况。

https://developer.apple.com/reference/uikit/uidevice/1620059-identifierforvendor

然而,我刚刚在我们在应用商店上的一个实时应用程序上进行了测试。即使在设备上仍安装有其他几款应用程序,如果我重新安装应用程序A,则从identifierForVendor返回的UUID每次都会更改。

以前不是这样的。

这曾经起作用。但是在某个时间点,UUID似乎已经开始在“简单的重新安装”上更改了(如上所述)。这是已知的错误吗?与上述文档相比,identifierForVendor是否已知存在问题?除了将UUID保存到钥匙串之外,是否有任何解决方法(因为该方法在iCloud同步中会出现问题)?


保留identifierForVendor或自定义UUID在KeyChain中。详情请参见:如何在设备上卸载iOS应用程序后保留iOS中的identifierForVendor? - Reming Hsu
让我引用自己的话:“除了将UUID保存到钥匙串中,因为该方法在iCloud同步时会出现问题”。好吧,在某些情况下这种方法可能有效。这意味着它并不适用于所有情况。 - Jonny
你可以使钥匙串条目特定于设备(注意:我从WWDC视频中回想起来并寻找资源-我自己没有明确测试这一点的需要)。https://www.andyibanez.com/using-ios-keychain/ 和 https://developer.apple.com/library/ios/documentation/Security/Reference/keychainservices/index.html#//apple_ref/doc/constant_group/Keychain_Item_Accessibility_Constants - Brad Brighton
我之前没有看到过这个提到,但如果您使用推送通知,也许可以将设备令牌用作UUID。只是一个想法。 - Elliot Alderson
你好@Jonny,已经过去3年4个月了,我仍然遇到同样的问题。苹果公司有没有修复它的可能性? - hamada147
3个回答

15

这是一个已知的 bug。看起来苹果公司在 AppStore 上进行了更新,导致 identifierForVendor 在 5 月 28 日左右出现了这种新行为。如果在 App 开发者论坛中搜索,会发现其他开发者也报告了同样的问题。

来自苹果公司的签名 GC 已经回复了这个问题,他给出了以下答复: “请在https://developer.apple.com/bug-reporting上报告错误。我们已经意识到了这个问题并正在调查。目前还没有已知的解决方法。”


我在新论坛中找到了这个/一个帖子。看起来就像你所说的那样是一个已知问题。 - Jonny

1
identifierForVendor 期望在设备上删除所有供应商的应用程序时更改。此外,如果您直接从Xcode构建和安装,则会更改它。
在iOS设备上安装应用程序(或来自同一供应商的另一个应用程序)时,此属性中的值保持不变。当用户从设备中删除该供应商的所有应用程序并随后重新安装其中一个或多个应用程序时,该值将更改。在使用Xcode安装测试构建或使用特定分发在设备上安装应用程序时,该值也可能更改。因此,如果您的应用程序在任何地方存储此属性的值,则应优雅地处理标识符更改的情况。
来源:UIKit/UIDevice/identifierForVendor

0
我们即将使用App Group权限重新提交,以便获得共享的NSUserDefaults。听起来,与keychain-access-group和iCloud键值存储权限不同,App Group NSUserDefaults在设备上是共享的,但不会在iCloud账户上共享。如果共享的“deviceid” NSUserDefaults键不存在,我们将保存IdentifierForVendor ID,然后在保存后为所有应用程序使用它。

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