确定您自己的应用程序当前是否以编程方式安装

Determine if you own app is currently installed or not programmatically

我正在我的一个应用程序中创建一项新功能来显示 "What's New" 页面。我让这一切都按预期工作,并将上一个版本(存储)与当前版本进行比较,然后在显示功能列表后更新当前版本。

这一切都很好,符合预期。我现在遇到的问题是确定用户是否已经安装了该应用程序。

案例1)如果用户是一个全新的用户,并且是他们第一次下载应用程序,那么不应显示新功能列表。

情况 2) 如果他们已经安装了应用程序并且正在将他们的应用程序更新到新版本,那么我们需要显示新功能列表。

我需要帮助的部分是案例 2。您如何确定应用程序是否已被用户安装,而不必发布次要更新只是为了预先设置 currentInstalledVersion 变量?

if(currentInstalledVersion)
{
   if(currentInstalledVersion < actualCurrentVersion)
   {
      // user upgraded
   }
}
else
{
   if(someOtherDataSavedOnDiskExists)
   {
      // user had the app with a version before you implemented currentInstalledVersion and is updating
   }
   else
   {
     // fresh install
   }
}

根据以下评论更新

好的,在那种情况下,没有内置机制可以帮助您解决这个问题。在您自己实现一种方法(使用此标志)之前,您无法检查。但是,如果您有任何类型的其他标志或数据写入 NSUserDefaults,您可以在启动时立即检查以查看是否设置了这些值,这会告诉您这是一个现有用户安装了应用程序(如果未设置 currentInstalledVersion,则仅检查其他标志)。如果您还没有将任何数据写入磁盘或 NSUserDefaults,那么您就不能顺利发布此功能。

我更新了上面的代码以反映这一点。

您可以使用 NSUserDefault 并设置一个布尔值来检查它是否是新用户。 例如:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"user"]){
  // it's a new user
  [[NSUserDefaults standardUserDefaults] setBool:YES ForKey:@"user"];
}

如果未设置默认值,boolForKey: 方法将 return NO