如何检查应用程序何时从后台返回到前台,而不是来自推送通知?

TIM*_*MEX 7 lifecycle application-lifecycle ios appdelegate swift

func application(application: UIApplication, didReceiveRemoteNotification data: [NSObject : AnyObject]) {
        var dat = JSON(data)
        if application.applicationState == UIApplicationState.Active {
            // app was already in the foreground
            println("App is in foreground")
            processNotification(dat)
        }else{
            // app was just brought from background to foreground via PUSH
            println("App brought back via PUSH")
            processNotification(dat)
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是我检查推送通知的方式.但是,如果我发送推送通知,用户会错过它,然后通过图标打开应用程序?如何从图标中查看应用程序的打开时间?

nhg*_*rif 13

UIApplicationDelegate协议定义了几种方法,可以将代码添加到应用程序的几个生命周期事件中.

您特别感兴趣的是:

  • application(_:willFinishLaunchingWithOptions:) - 在应用程序尚未在后台运行时,在应用程序完成启动之前调用
  • application(_:didFinishLaunchingWithOptions:) - 当应用程序在后台尚未激活时,在应用程序完成启动后调用
  • applicationDidBecomeActive(_:) - 在应用程序变为活动状态后调用,当用户从头开始启动,从后台重新打开,以及用户从临时中断(例如电话呼叫)返回时调用
  • applicationWillEnterForeground(_:)- 这是在应用程序进入后台之前调用之后 - 紧接着是applicationDidBecomeActive(_:)调用

无论用户是通过通知还是通过点击图标打开您的应用程序,此生命周期事件都可以触发.据我所知,没有办法确定应用程序是通过点击图标打开的.您可以知道(ish)应用程序未通过通知打开,因为相关的"确实收到通知"方法永远不会触发.但是这仍然允许用户打开应用程序的两种(至少)方法:点击应用程序图标双击主页按钮并点击应用程序将其从后台唤醒.