检测启动后首次打开应用程序的时间

Posted

技术标签:

【中文标题】检测启动后首次打开应用程序的时间【英文标题】:Detect when app is opened for the first time after launch 【发布时间】:2011-02-22 00:57:10 【问题描述】:

我只想在第一次安装和打开应用时在视图控制器上显示帮助消息。

我有什么方法可以做到这一点吗?

【问题讨论】:

【参考方案1】:

您可以显示一次帮助消息,然后在NSUserDefaults 中存储一个布尔值以指示它不应再次显示:

NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
BOOL appHasBeenLaunchedBefore = [userDefaults boolForKey:@"HasBeenLaunched"];
if (!appHasBeenLaunchedBefore)

    [self showHelpMessage];

[userDefaults setBool:YES forKey:"HasBeenLaunched"];

【讨论】:

【参考方案2】:

使用 Grand Central Dispatch 的 dispatch_once() 并检查一些持久性存储。

static dispatch_once_t pred;
dispatch_once(&pred,^
    NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
    BOOL hasLaunched = [userDefaults boolForKey:kAppHasLaunched];
    if (!hasLaunched) 
        [self showFirstLaunchMessage];
        [userDefaults setBool:YES forKey:kAppHasLaunched];
    
);

这是确保代码在每次启动时仅在您的应用中运行一次的最简单方法(在这种情况下,该块将仅执行一次)。有关这方面的更多信息,请参阅the Grand Central Dispatch Reference。在此块中,您只需检查一些持久性存储,例如您的首选项,以查看您的应用是否曾经启动过,并根据需要显示一条消息。

【讨论】:

【参考方案3】:

在用户默认值中使用一个键。例如:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
BOOL launchedBefore = [userDefaults boolForKey:@"hasRunBefore"];

if(!hasRunBefore)

    NSLog(@"this is my first run");
    [userDefaults setBool:YES forKey:@"hasRunBefore"];

用户默认设置由 iTunes 备份,因此通常是用户的首次启动,而不是每台设备的首次启动。

编辑:这与 e.James 在我之前给出的答案明确相同。 “其他答案已发布”栏未能出现。我将把它留给示例代码,但第一个答案不值得称赞。

【讨论】:

滚出我的脑袋! ;) 但是 +1 提到了 iTunes 备份。我没想到。 哦,现在您也添加了代码!我正在努力想一个不删除我的理由。很抱歉踩到你的脚趾。 不用担心。有两个正确答案没有坏处。我们一定同时在打字!

以上是关于检测启动后首次打开应用程序的时间的主要内容,如果未能解决你的问题,请参考以下文章

应用启动时间的测试

软件更新后首次启动

单击“确定”后首次运行 GPS 未启动

Facebook仅适用于安装后首次启动应用程序,而不是重新启动应用程序

android 安装后首次启动的欢迎页面的总结和demo

Branch.io 在 Android 上安装后首次运行时检索 BranchUniversalObject