首页 > 解决方案 > 当应用程序被杀死而不在IOS后台运行时如何获取通知有效负载

问题描述

我有个问题。即使应用程序没有在后台运行,当您从通知中打开应用程序时是否可以获得通知正文。它被完全杀死。

标签: iosswiftuilocalnotification

解决方案


您需要根据应用收到通知时所处的状态以不同方式处理通知:

如果您的应用程序没有运行并且用户通过点击推送通知来启动它,则推送通知将在 的launchOptions 中传递给您的应用程序application(_:didFinishLaunchingWithOptions:)

如果您的应用程序在前台或后台运行,系统会通过调用通知您的应用程序application(_:didReceiveRemoteNotification:fetchCompletionHandler:)。如果用户通过点击推送打开应用,iOS 可能会再次调用该方法,因此您可以更新 UI 并显示相关信息。

将以下代码添加到 的末尾application(_:didFinishLaunchingWithOptions:),就在 return 语句之前:

// Check if launched from notification
let notificationOption = launchOptions?[.remoteNotification]

// 1
if let notification = notificationOption as? [String: AnyObject],
  let aps = notification["aps"] as? [String: AnyObject] {

  // 2
  print(aps)

}

要处理接收推送通知的其他情况,请将以下方法添加到 AppDelegate:

func application(
  _ application: UIApplication,
  didReceiveRemoteNotification userInfo: [AnyHashable: Any],
  fetchCompletionHandler completionHandler:
  @escaping (UIBackgroundFetchResult) -> Void
) {
  guard let aps = userInfo["aps"] as? [String: AnyObject] else {
    completionHandler(.failed)
    return
  }
  print(aps)
}

推荐阅读