【问题标题】:How can I check when an app comes back into the foreground from the background, but not from push notification?如何检查应用程序何时从后台返回前台,而不是从推送通知返回?
【发布时间】:2015-06-26 12:41:41
【问题描述】:
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)
        }
    }

这就是我检查推送通知的方式。但是,当我发送推送通知时,用户错过了它,然后通过图标打开应用程序?如何通过图标查看应用何时打开?

【问题讨论】:

  • 你的意思是,如何检测应用是否已打开但有未打开的通知挂起?
  • @Simon 是的,我想是的。

标签: ios swift lifecycle appdelegate application-lifecycle


【解决方案1】:

The UIApplicationDelegate protocol 定义了几种方法,可让您将代码添加到应用程序的多个生命周期事件中。

您会特别感兴趣的是:

  • application(_:willFinishLaunchingWithOptions:) - 在应用程序尚未在后台处于活动状态时,在应用程序完成启动之前调用
  • application(_:didFinishLaunchingWithOptions:) - 在应用程序尚未在后台处于活动状态时,在应用程序完成启动后立即调用
  • applicationDidBecomeActive(_:) - 在应用程序激活后立即调用,当用户从头启动、从后台重新打开时调用,以及当用户从临时中断(例如电话呼叫)返回时调用
  • applicationWillEnterForeground(_:) - 在应用程序进入后台之前调用它——紧随其后的是 applicationDidBecomeActive(_:) 调用

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

【讨论】:

  • 我猜“applicationDidBecomeActive”是我要找的吧?
  • 可能。将断点或println 放置在所有这些中并四处玩转以确切了解生命周期如何运作并弄清楚您究竟需要什么,这很容易。
  • 根据参考页面,有一个带有键的字典,您可以在其中找到是否仍有通知挂起:developer.apple.com/library/ios/documentation/UIKit/Reference/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多