未调用 didReceiveRemoteNotification swift

didReceiveRemoteNotification not called swift

为什么我收不到后台未收到的通知???

这是我第一次使用推送通知。我阅读了文档并遵循 Google Firebase Doc. Also I implement code from firebase/quickstart-ios 的指南。之后,我在 firebase 服务上创建了控制台,上传了我的证书并成功发送了我在前台和后台收到的消息。

但是当我更改从后端开发人员那里获取的控制台时,我的应用程序停止在后台模式下接收推送通知。

我在做什么:

我不明白为什么应用程序停止在后台接收通知,如果它之前运行良好。

我也在 Whosebug 上阅读了同样的问题,但没有找到我的问题的解决方案。

请帮忙解决这个问题!

更新:

实际上我没有收到任何通知,就像在后台一样在前台。原因是当我从第一个控制台使用 GoogleService-Info.list 安装我的应用程序时,我接受了接收通知。所以,如果你改变控制台,当然你改变了GoogleService-Info.list,你应该再次接受接收通知!!!如果您不接受,didReceiveRemoteNotification 将不会调用!

您尚未添加任何代码,因此可能需要考虑以下几点:

确保您已定义 fetchCompletionHandler,以便 content-available: true 能够在收到推送通知时唤醒应用程序。

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

FCM 根据推送通知负载中包含的内容以不同方式处理通知。尝试将推送通知与仅数据有效负载和仅通知有效负载一起使用,进行实验,看看会发生什么。

{
  "to":"push_token",
    "content_available": true,
    "priority": "high",
    "notification": {
      "title": "New Message",
      "message": "Bob sent you a message",
    },
    "data": {
      "title": "New Message",
      "message": "Bob sent you a message",
    }
}

使用此 CURL 命令而不是使用 firebase 控制台来测试发送推送通知

curl -X POST --header "Authorization: key=APIKEY" --Header "Content-Type: application/json" https://fcm.googleapis.com/fcm/send -d "@push_payload.json"

原因是当我从第一个控制台使用 GoogleService-Info.list 安装我的应用程序时,我接受了接收通知。所以,如果你改变控制台,当然你改变了GoogleService-Info.list,你应该再次接受接收通知!!!如果您不接受,didReceiveRemoteNotification 将不会调用!

P.S。 在我的变体中,我通过调配来实现通知。如果您选择相同的方式,请确保在您的 Info.plist 文件中有 属性 FirebaseAppDelegateProxyEnabled 值设置为 YES