代码之家  ›  专栏  ›  技术社区  ›  Ahmed

在iOS中,当应用程序不在后台运行时如何获取通知负载

  •  0
  • Ahmed  · 技术社区  · 7 年前

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Mobile Team iOS-RN    7 年前

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

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

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

    将以下代码添加到 应用程序(:didFinishLaunchingWithOptions:) ,在返回语句之前:

    // 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)
    }