将首次启动检测添加到*已存在* iOS 应用程序

Add first-launch detection to *already existing* iOS app

对于尚未首次发布的应用程序,很容易弄清楚如何检测首次启动:在 UserDefaults 中查找是否缺少 "wasLaunched" Bool 或版本号.然后设置它的值。这在 Whosebug 上的几个地方都有问答。

但是...我正在更新一个 已经存在的 应用程序,它在第一个版本中没有保存任何 UserDefaults 信息(任何类型的)。有没有什么方法可以在新版本发布时检测到以前的版本已经存在并且运行?我想不出一个,但这并不能证明什么。

这很重要,因为新版本对某些 过去 免费的功能收费。我希望早期用户不会突然面临功能丧失的问题。

之前也有人问过这个问题 (Detecting the first launch of an app with previous versions),但所有答案都没有抓住应用程序已经存在的要点。

请注意,写入 UserDefaults 也不是万无一失的。如果用户在重新安装或升级之前删除了应用程序,则 UserDefaults 将消失。但是,这是一个边缘情况,我可以忽略。

根据您对评论中前几个问题的回答,您发布的问题确实应该重写为:

我目前有一个免费的应用程序。在下一次更新中,我希望通过应用内购买将一些当前免费的功能变成付费功能。但是,我不希望该应用程序的任何现有用户必须为他们已经使用的功能付费。只有从此更新开始的应用程序新用户才需要为应用程序内购买付费。如何实施我更新后的应用程序,以便以前版本应用程序的下载者无需付费?

鉴于此,您的问题与任何类型的 "first launch" 检测无关。您的需要是查看用户是否 "purchased"(或下载)您的应用程序的先前版本。

这可以通过执行收据验证来完成。获取并验证收据后,您可以查看收据并获得原始购买日期和原始购买版本。如果该版本是添加付费应用内购买之前的版本,请将用户视为已经进行了应用内购买,并向他们展示您应用的付费功能。否则,请检查收据以查看其是否包含有关应用内购买的数据并酌情授予用户访问权限。