检测应用程序的首次运行

Posted

技术标签:

【中文标题】检测应用程序的首次运行【英文标题】:Detecting the first ever run of an app 【发布时间】:2011-10-13 18:33:07 【问题描述】:

我正在创建一个应用程序,当应用程序首次启动时,我必须在其中创建一个 plist。稍后我将使用 plist 来存储用户稍后输入的详细信息。如何检测应用程序的首次启动?我正在试验 NSUserDefaults 但我认为我做错了什么。

【问题讨论】:

【参考方案1】:

您可以使用 NSUserDefaults 来做到这一点。但请注意版本号。

执行以下操作:

NSString *bundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];

NSString *appFirstStartOfVersionKey = [NSString stringWithFormat:@"first_start_%@", bundleVersion];

NSNumber *alreadyStartedOnVersion = [[NSUserDefaults standardUserDefaults] objectForKey:appFirstStartOfVersionKey];
if(!alreadyStartedOnVersion || [alreadyStartedOnVersion boolValue] == NO) 
    [self firstStartCode];
    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:appFirstStartOfVersionKey];

选择器 firstStartCode 只会在第一次运行时为每个应用程序版本按时调用。

好吗?

【讨论】:

【参考方案2】:

我喜欢使用 NSUserDefaults 来存储第一次运行的指示。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
if (![defaults objectForKey:@"firstRun"])
  [defaults setObject:[NSDate date] forKey:@"firstRun"];

[[NSUserDefaults standardUserDefaults] synchronize];

您可以稍后对其进行测试...

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];        
if([defaults objectForKey:@"firstRun"])           

  // do something or not...

取自:Best way to check if an iPhone app is running for the first time

【讨论】:

那么第一段代码,我是不是把它放在didFinishLaunching下的app delegate中?【参考方案3】:

您可以使用以下内容:

-(void) firstLaunch 
    //Code goes here


-(void) firstLaunchCheck 
    if(![[NSUserDefaults standardUserDefaults] boolForKey:@"didLaunchFirstTime"]) 
        [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"didLaunchFirstTime"];
        [self firstLaunch];
    

【讨论】:

以上是关于检测应用程序的首次运行的主要内容,如果未能解决你的问题,请参考以下文章

检测iOS应用程序的首次启动[重复]

通过IP检测用户的首次访问

我可以优化 Meteor Android Cordova 应用程序的首次加载时间吗?

如何设置 iOS 应用程序的首次启动

检查应用程序是不是首次运行[重复]

为啥我的 iOS 应用程序仅在首次运行时正确检测到当前语言?