对于尚未首次发布的应用,很容易弄清楚如何检测首次启动:在 UserDefaults 中查找是否缺少“wasLaunched” bool 值或版本号。然后设置它的值。这在 StackOverflow 上的多个地方都有问答。
但是...我正在更新一个已经存在的应用程序,该应用程序在其第一个版本中没有保存任何 UserDefaults 信息(任何类型)。有什么方法可以在新版本发布时检测到以前的版本已经存在并运行?我想不出一个,但这并不能证明太多。
这很重要,因为新版本对某些过去免费的功能收费。我希望早期用户不要突然面临功能丧失的问题。
之前也有人问过这个问题 (Detecting the first launch of an app with previous versions),但所有答案都忽略了应用程序已经存在的意义。
请注意,写入 UserDefaults 也不是万无一失的。如果用户在重新安装或升级之前删除了应用程序,则 UserDefaults 将消失。但是,这是一个边缘情况,我可以忽略。
Best Answer-推荐答案 strong>
根据您对评论中前几个问题的回答,您发布的问题确实应该改写为:
我目前有一个免费的应用程序。在下一次更新中,我希望使用应用内购买将一些当前免费的功能变成付费功能。但是,我不希望该应用程序的任何现有用户必须为他们已经使用的功能付费。只有从此更新开始的应用程序新用户才需要为应用程序内购买付费。如何实现我更新的应用程序,以便以前版本应用程序的下载者无需付费?
鉴于此,您的问题与任何类型的“首次启动”检测无关。您需要查看用户是否“购买”(或下载)了您应用的旧版本。
这可以通过执行收据验证来完成。获取并验证收据后,您可以检查收据并获取原始购买日期和原始购买版本。如果该版本是添加付费应用内购买之前的版本,请将用户视为他们已经进行了应用内购买,并向他们展示您的应用的付费功能。否则,请检查收据以查看其是否包含有关应用内购买的数据并酌情授予用户访问权限。
关于ios - 将首次启动检测添加到*已经存在的* iOS 应用程序,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/46853645/
|