【问题标题】:didReceiveRemoteNotification is not called when app was opened from notification从通知打开应用程序时不调用 didReceiveRemoteNotification
【发布时间】:2020-01-27 16:31:54
【问题描述】:

如果在应用程序处于活动状态时收到删除通知 - 它处理得很好。如果应用程序处于后台或非活动状态 - 什么也没有发生。通知来自 Firebase 云消息传递。 xcode 11.3.1

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

    if application.applicationState == .active {
        Utils.handlePushNotification(userInfo: userInfo) // works good
    }

    if application.applicationState == .background {
        UserDefaults.standard.set(true, forKey: "openedFromPush") // doesn't work
    }

    if application.applicationState == .inactive {
        UserDefaults.standard.set(true, forKey: "openedFromPush") // doesn't work
    }
}

【问题讨论】:

标签: ios swift xcode


【解决方案1】:
  1. 确保您在应用目标的签名和功能选项中勾选了远程通知后台模式:

  2. 当应用在后台响应收到的通知时,您的方法应调用 completionHandler(.newData)completionHandler(.noData)

    Apple documentation 声明:

    如果用户从系统显示的警报中打开您的应用程序,系统可能会在您的应用程序即将进入前台时再次调用此方法,以便您可以更新用户界面并显示与通知有关的信息。 当远程通知到达时,系统将通知显示给用户并在后台启动应用程序(如果需要),以便它可以调用此方法。在后台启动您的应用可以让您有时间处理通知并下载与其相关的任何数据,从而最大限度地减少通知到达和向用户显示该数据之间的时间。

    完成通知处理后,您必须致电 在处理程序参数中阻止,否则您的应用程序将被终止。您的 应用程序有长达 30 秒的挂钟时间来处理 通知并调用指定的完成处理程序块。在 练习,你应该在完成后立即调用处理程序块 处理通知。

【讨论】:

    【解决方案2】:

    我已经用这个解决了我的问题:

    func userNotificationCenter(_ center: UNUserNotificationCenter, 
                                  didReceive response:UNNotificationResponse, 
                                  withCompletionHandler completionHandler: @escaping () -> Void) {
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多