使用iOS版Swift处理来自关闭的应用程序的推送通知,如何显示它然后返回关闭或暂停状态?

时间:2018-06-22 19:01:08

标签: ios swift

当应用关闭并收到推送通知时,我想快速处理该通知并将其显示给用户,然后让应用返回关闭(或暂停)状态。相反,该应用程序将保持运行状态,甚至尝试加载根视图控制器。 我的代码注册为后台工作,完成后注销。

    var backgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid
    func registerBackgroundTask() {
      if backgroundTask == UIBackgroundTaskInvalid {
        backgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in
          self?.endBackgroundTask()
      }
      assert(backgroundTask != UIBackgroundTaskInvalid)
      }
    }

func endBackgroundTask() {
  print("Background task ended.")
  UIApplication.shared.endBackgroundTask(backgroundTask)
  backgroundTask = UIBackgroundTaskInvalid
}

由于新的APNs推送通知,我可以使用Xcode来测试我的代码,使其在启动时附加到我的应用程序中。通知处理完成后,应用仍然有效。 我是否需要强制应用暂停? 我以为iOS会在完成处理通知后立即关闭或暂停该应用程序,因此我调用endBackgroundTask。 另外,如果我关闭Xcode从而使应用程序调试器停止运行,然后在我的设备上启动它,我会看到它正在运行并显示根视图控制器(尽管尚未完全初始化,因为该代码不适用于此类启动)。 我想念什么?

1 个答案:

答案 0 :(得分:0)

首先,两次调用“ registerBackgroundTask”将导致“ backgroundTask”被覆盖,并且您将失去终止最新任务之外的任务的能力。

  

相反,应用程序保持运行状态,甚至尝试加载根视图控制器。

第二,确保您已阅读有关应用程序生命周期的信息:[1]和委托方法[2]。通常,您的应用程序将在后台运行(处于后台执行模式或处于挂起状态),但推送通知也可能会强制您的应用程序启动(以防万一它根本没有运行)。然后由您来优雅地处理它,并在不需要时不加载UI。

1-https://developer.apple.com/documentation/uikit/core_app/managing_your_app_s_life_cycle 2-https://developer.apple.com/documentation/uikit/uiapplicationdelegate