在iOS中确定您的应用程序是否已安装

3

我需要检查设备上是否曾经安装过我的应用程序。

我曾有一个方法,在密钥链中存储了一些数据,然后在首次启动时检查这些数据是否存在,从而确定应用程序之前是否已安装。

不幸的是,和其他人一样,我遇到了苹果关于使用加密的“出口合规信息”,当上传构建时。目前还不清楚密钥链是否合法地包含在所要求的加密使用中,这只会给开发者带来巨大的麻烦,而且并不是开发者擅长判断的领域。

是否还有其他方法可以确定应用程序之前是否已安装?

3个回答

5

在目前来说,将信息存储在钥匙串中是唯一可靠的方式,直到苹果最终决定移除这个(被认为是)特性。

“出口合规信息”在这里并不起作用,这个问题与像https那样的加密有关。除非您实现了自定义加密方案,否则通常可以回答“否”,或者在您的Info.plist中添加ITSAppUsesNonExemptEncryption以及您的答案。


2

多年来,苹果已禁用所有设备唯一标识符的访问:UDID、MAC地址等。

因此答案是否定的,没有其他方法在应用程序安装之间唯一地标识设备。

唯一有时可能有效的是将推送通知标记存储在服务器上。我不知道现在情况如何,但几年前,这个标记在应用重新安装后并不会改变。但根据苹果的文档,推送通知标记不能保证保持不变。因此,它可能有效也可能无效。

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


1
我没有想到APNS令牌。这很聪明。在重新安装后,apns-token不会改变,但我想OP是在尝试弄清楚是否在“删除然后再次安装”之后安装了应用程序,而不是重新安装。您是否在重新安装后获得特定的回调,或者只是可以缓存当前版本,并在每次应用程序启动和更改时进行比较,然后将其视为重新安装/升级? - mfaani
@Honey 请查看答案底部添加的部分。 - meaning-matters
@meaning-matters 我不确定 Xcode 版本12.2 和 iOS 14 的具体情况,但我认为一些应用程序可以找出该应用程序之前是否已安装,例如 Sketch 提供30天免费使用,此后将无法使用,如果您删除并重新安装它,则该应用程序将会识别您,在这种情况下,macOS 与iOS 是否有所不同? - ios coder
@Omid 为了知道谁获得了30天的免费试用,Sketch会跟踪用户(而不是设备),通过应用内购买或某些账户,对吗? - meaning-matters
不,实际上Sketch并不是一个真正需要安装的应用程序,它会复制到桌面或您想要的位置,并从该位置启动,而无需进行任何常规安装,也不会询问任何用户名或电子邮件信息。您可以删除该文件或应用程序,并重新下载,但它将知道历史记录。 - ios coder
@Omid 你说“桌面”?我们在谈论的是iOS,而不是macOS。 - meaning-matters

0

替代方法

首先询问用户。例如,给他们一个跳过长介绍的按钮(和一个简单的回到那里的方法)。

如果这是一个耗时的步骤,允许他们通过电子邮件或导出数据,并提供一个非常简单的方法将其重新导入。

了解您想要实现什么会很有帮助。

澄清

钥匙串没有加密就无法运行。所有启用iCloud钥匙串存储的用户都会以加密形式通过互联网传输您的数据。

目前(2022年),当您在苹果appstoreconnect.apple.com上将上传的构建分配给应用程序发布时,“导出合规性信息”对话框会询问:

你的应用程序是否符合美国出口管理条例第5类第2部分提供的任何豁免条件?
如果您的应用程序加密是: (a)专门为医疗终端使用而设计 (b)仅限于知识产权和版权保护 (c)仅限于身份验证、数字签名或数据或文件的解密 (d)专门为银行业务或“货币交易”而设计和限制;或者 (e)仅限于“固定”的数据压缩或编码技术
您可以选择此问题的答案为“是”。
如果您的使用不符合上述豁免条件等,则需要提交表格。
以下是有关此问题的讨论...

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/  ⬅ 苹果公司公共政策游说的概述。


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