检查进入前台时iPhone App在后台的时间长度

时间:2012-02-29 09:37:35

标签: iphone objective-c ios

我有一个iPhone应用程序,允许用户登录并与Web服务交互。我希望用户能够在一段时间不活动后自动注销...更具体地说,如果应用程序已经在后台停留了一段时间(例如1小时)。

我最好在App Delegate方法applicationWillEnterForeground中运行一个检查,检查应用程序在后台的时间长度,然后是否超过允许的时间,将它们带到登录屏幕。

我如何在上述方法中运行此检查?我会很感激一些示例代码。

如果这不是达到我要求的最佳方式,那么建议也欢迎!

非常感谢提前

安迪

4 个答案:

答案 0 :(得分:12)

您可以使用:

- (void)applicationWillResignActive:(UIApplication *)application
{    
    NSDate *thisMagicMoment = [NSDate date];
    [[NSUserDefaults standardUserDefaults] setObject:thisMagicMoment forKey:@"lastMagicMoment"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    NSDate *thisMagicMoment = [NSDate date];
    NSDate *lastMagicMoment =  (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"lastMagicMoment"];

    if (lastMagicMoment==nil)
    {
        NSLog (@"First launch!");
    }
    else
    {
        NSTimeInterval timeOfNoMagic = [thisMagicMoment timeIntervalSinceDate:lastMagicMoment]/3600.0;
        NSLog (@"Application was in background for %.1f hours", timeOfNoMagic);

        //do your stuff - treat NSTimeInterval as double

        if (timeOfNoMagic > 1.0)
        {
            //logout
        }
    }
}

答案 1 :(得分:2)

当应用程序进入后台或退出时,将时间和日期写入NSUserDefaults。然后从applicationWillEnterForeground中的NSUserDefaults读取该时间和日期并进行比较。如果超过1小时(或者您设置的超时时间),则显示登录屏幕。

答案 2 :(得分:2)

节省应用进入NSUserDefaults后台的时间。然后在重新进入前景时读取它。

在applicationWillEnterForeground中,如果时差超过1小时,您可以设置标记或发布通知。即你可以在你的app委托中有一个记录用户的方法,或者你可以在viewWillAppear中检查一个标志,如果需要,可以将用户记录下来。

答案 3 :(得分:0)

首先在方法applicationdidFinishLaunching中设置计时器:

现在检查方法applicationDidBecomeActive中的时间:每次用户再次启动应用程序时都会调用此时间。

如果时间大于ex(1小时),则重置计时器并注销用户。