Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将首次启动检测添加到*已存在*iOS应用程序_Ios_Upgrade_Launch - Fatal编程技术网

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

将首次启动检测添加到*已存在*iOS应用程序,ios,upgrade,launch,Ios,Upgrade,Launch,对于尚未首次发布的应用程序,很容易找到如何检测首次发布的方法:在UserDefaults中查找是否缺少“wasLaunched”Bool或版本号。然后设置它的值。在StackOverflow上的几个地方都有这样的问题 但是。。。我正在更新一个已经存在的应用程序,它在第一个版本中没有保存任何UserDefaults信息(任何类型)。在新版本发布时,是否有任何方法可以检测到以前的版本已经存在并运行?我想不出一个,但这证明不了什么 这一点很重要,因为新版本对一些以前免费的功能收费。我更希望早期用户不会

对于尚未首次发布的应用程序,很容易找到如何检测首次发布的方法:在UserDefaults中查找是否缺少“wasLaunched”Bool或版本号。然后设置它的值。在StackOverflow上的几个地方都有这样的问题

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

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

之前也有人问过这个问题(),但所有的答案都忽略了应用程序已经存在的要点


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

根据您对评论中前几个问题的回答,您发布的问题确实应该改写为类似以下内容:

我目前有一个免费的应用程序。在下一次更新中,我希望使用应用内购买将当前的一些免费功能转换为付费功能。然而,我不希望该应用程序的任何现有用户必须为他们已经使用的功能付费。只有以此更新开始的应用程序的新用户才需要支付应用程序内购买费用。如何实现我的更新应用程序,以便下载以前版本的应用程序的人不必付费

鉴于此,您的问题与任何类型的“首次发射”检测无关。您需要查看用户是否“购买”(或下载)了以前版本的应用程序


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

要澄清:您希望为安装旧版本的用户保留旧应用行为,但如果没有,则应用新的行为?您的更新是否将使用应用内购买来开始为以前免费的东西收费?您的应用的旧版本是否将任何数据保存在应用的沙箱中的任何位置?前两个问题的答案是肯定的。第三个问题的答案是:该应用程序确实在/temp中缓存了一些东西,但并不保证会在那里。不过,我可能不得不把它作为一个最佳猜测。你的任务实际上与使用相同解决方案时的任务相同。检查“首次启动”不是您应该检查的内容。