我需要能够识别跨卸载/重新安装的iOS设备。为此,我计划在第一次安装时将identifierForVendor存储在密钥链中,并在下面的安装中检索它。这样做是否有被AppStore拒绝的风险?
我见过几个关于这方面的问题,所以我想这是允许的,但开发人员程序许可协议规定:
此外,您和您的应用程序都不会使用任何永久的、基于设备的标识符或由此派生的任何数据来唯一地标识设备。
我也可以用NSUUID代替,这样会更安全吗?
编辑:添加一些答案的上下文,建议实现登录。
我的应用程序已经有了一个识别系统(带有登录)。它允许用户连接到他的帐户,他应该能够看到连接到其帐户的设备列表(也就是他在某个时候确实连接到的设备),以便监视或断开它们。问题是,在卸载/重新安装应用程序之后,identifierForVendor会发生变化,在用户列表中留下一个“幽灵”设备。存储和检索它将使应用程序的重新安装不会被视为一种新设备。它将只用于这一点,而不是用于广告或跟踪以任何方式。
发布于 2017-05-18 16:23:25
TL;DR:将UUID存储在手机的密钥链中,不会导致应用程序被拒绝。所以不用担心。
您试图使用的UUID是而不是,正如我们所知,它是一个永久标识符,存储它们并不违反您引用的许可条款。苹果反对UDID、MAC地址、IMEI编号等,以防止开发人员根据其独特的ID跟踪/垃圾邮件用户。这是一个隐私问题。由于UDID是一个临时ID,所以我们可以自由地存储和使用它们,这不会对用户造成伤害。
我引用的是苹果资源中的链接:使用identifierForVendor
当应用程序(或来自同一供应商的另一个应用程序)安装在iOS设备上时,此属性中的值保持不变。当用户从设备中删除该供应商的所有应用程序并随后恢复其中一个或多个应用程序时,该值会发生变化。在使用Xcode安装测试版本或在使用即席发行版的设备上安装应用程序时,该值也可能发生变化。因此,如果应用程序将此属性的值存储在任何地方,则应该优雅地处理标识符更改的情况。
苹果似乎已经改变了iOS 10.3+中密钥链的工作方式。当从特定的供应商卸载所有应用程序时,密钥链中存储在密钥链中的项目将被删除。据苹果公司称,即使在应用程序离开设备后,应用程序的敏感信息也可能导致安全风险,因此他们决定禁止这种行为。
即使在卸载应用程序之后,依赖密钥链存储的开发人员也可以使用这个解决办法继续实现预期的功能。根据此解决方案,任何应用程序都可以访问存储在特定密钥链访问组中的信息,因此建议在数据中添加额外的加密层将以更高的安全性保护它,尽管密钥链默认对项进行加密。
发布于 2017-05-18 14:37:38
您可以在服务器上生成设备id(->similar到UUID),并将其存储在iOS的密钥链中。如果您的应用程序重新安装在设备上,并且在密钥链中找到该设备id,那么您将能够识别该设备。
https://stackoverflow.com/questions/44048334
复制相似问题