ios - 当应用程序被杀死而不在IOS后台运行时如何获取通知有效负载

标签 ios swift uilocalnotification

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

最佳答案

您需要以不同的方式处理通知,具体取决于您的应用收到通知时所处的状态:

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

如果您的应用程序在前台或后台运行,系统会通过调用 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)
}

关于ios - 当应用程序被杀死而不在IOS后台运行时如何获取通知有效负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54566830/

相关文章:

ios - ScrollView 对齐问题

ios - 本地 UserNotifications 的限制

ios - 将应用程序上传到 iTunes Store 停顿

ios - 如何为 UITableView 中的部分添加标题?

ios - 此 bundle 无效 -/Payload/MyAppName.app/Sticker Pack.stickerpack 的 Info.plist 文件丢失或无法读取

Swift:for-in循环要求 '[DeepSpeechTokenMetadata]'符合 'Sequence'

ios - 如何在 Swift 中对 NSProgress 进行键值观察

iphone - 在本地通知后呈现 UIViewController

iphone - uilocalnotification 未在准确时间触发

android - ios和android之间的蓝牙连接