确定您的应用程序之前是否已安装 iOS

Determine if your app was installed before in iOS

我需要检查我的应用程序之前是否安装在设备上。

我有一种方法可以在钥匙串上存储一些数据,然后在第一次启动时检查数据是否存在,从而确定之前是否安装过该应用程序。

不幸的是,像每个人一样,我遇到了关于在您的应用程序中使用加密的“出口合规信息”,Apple 在上传构建时要求这些信息。目前尚不清楚使用钥匙串是否合法地包含在我们被要求的加密使用中,这只是一个巨大的头痛,而不是开发人员确定的专业领域..

有没有其他方法可以确定之前是否安装过某个应用程序?

在钥匙串中存储信息是目前唯一可靠的方法,直到 Apple 最终决定删除此(错误)功能。

“Export Compliance Information”在这里不起作用,这个问题与 https 中的加密有关。除非您实施自定义加密方案,否则您通常可以对问题回答“否”(或在 Info.plist 的答案中添加 ITSAppUsesNonExemptEncryption)。

多年来,Apple 已禁止对设备唯一标识符的所有访问:UDID、MAC 地址、...

所以答案是:不,没有其他方法可以在应用安装之间唯一标识设备。

有时唯一可行的方法是将推送通知令牌存储在服务器上。我不知道现在情况如何,但几年前这个令牌在应用程序重新安装后没有改变。但根据 Apple 文档,不能保证推送通知令牌保持不变。因此,它可能有效也可能无效。

要在使用推送令牌之前检查应用程序是否已安装,您需要在服务器上存储推送令牌和任何唯一 ID(例如最明显的 UUID)。此唯一 ID 还必须存储在您的应用程序磁盘 space 中(例如最明显的 UserDefaults)。然后当应用程序启动时,您可以检查唯一ID是否已经存在,...等等。我想现在很清楚了。