我需要检查设备上是否曾经安装过我的应用程序。
我曾有一个方法,在密钥链中存储了一些数据,然后在首次启动时检查这些数据是否存在,从而确定应用程序之前是否已安装。
不幸的是,和其他人一样,我遇到了苹果关于使用加密的“出口合规信息”,当上传构建时。目前还不清楚密钥链是否合法地包含在所要求的加密使用中,这只会给开发者带来巨大的麻烦,而且并不是开发者擅长判断的领域。
是否还有其他方法可以确定应用程序之前是否已安装?
我需要检查设备上是否曾经安装过我的应用程序。
我曾有一个方法,在密钥链中存储了一些数据,然后在首次启动时检查这些数据是否存在,从而确定应用程序之前是否已安装。
不幸的是,和其他人一样,我遇到了苹果关于使用加密的“出口合规信息”,当上传构建时。目前还不清楚密钥链是否合法地包含在所要求的加密使用中,这只会给开发者带来巨大的麻烦,而且并不是开发者擅长判断的领域。
是否还有其他方法可以确定应用程序之前是否已安装?
在目前来说,将信息存储在钥匙串中是唯一可靠的方式,直到苹果最终决定移除这个(被认为是)特性。
“出口合规信息”在这里并不起作用,这个问题与像https那样的加密有关。除非您实现了自定义加密方案,否则通常可以回答“否”,或者在您的Info.plist中添加ITSAppUsesNonExemptEncryption
以及您的答案。
多年来,苹果已禁用所有设备唯一标识符的访问:UDID、MAC地址等。
因此答案是否定的,没有其他方法在应用程序安装之间唯一地标识设备。
唯一有时可能有效的是将推送通知标记存储在服务器上。我不知道现在情况如何,但几年前,这个标记在应用重新安装后并不会改变。但根据苹果的文档,推送通知标记不能保证保持不变。因此,它可能有效也可能无效。
要使用推送标记检查应用程序在之前是否已安装,需要在服务器上存储推送标记和任何唯一的ID(例如最明显的UUID)。这个唯一的ID还必须存储在您应用程序的磁盘空间中(例如最明显的UserDefaults
)。然后当应用程序启动时,您可以检查唯一的ID是否已经存在,等等...我想现在很清楚了。
替代方法
首先询问用户。例如,给他们一个跳过长介绍的按钮(和一个简单的回到那里的方法)。
如果这是一个耗时的步骤,允许他们通过电子邮件或导出数据,并提供一个非常简单的方法将其重新导入。
了解您想要实现什么会很有帮助。
澄清
钥匙串没有加密就无法运行。所有启用iCloud钥匙串存储的用户都会以加密形式通过互联网传输您的数据。
目前(2022年),当您在苹果appstoreconnect.apple.com上将上传的构建分配给应用程序发布时,“导出合规性信息”对话框会询问:
你的应用程序是否符合美国出口管理条例第5类第2部分提供的任何豁免条件?https://getonthestore.com/export-compliance/
...以及一个有用的表单生成器...
https://github.com/annual-self-classification-report/annual-self-classification-report.github.io
游说
此外,为什么不联系苹果要求他们澄清Keychain(等)的明确情况,并代表开发者游说美国政府发布更完整的方案清单呢?如果你认为这很相关,请明确表示你并不是在寻求法律建议。
https://developer.apple.com/contact/topic/select ⬅ 兔子洞从这里开始。
https://www.apple.com/public-policy-advocacy/ ⬅ 苹果公司公共政策游说的概述。