未调用 didReceiveRemoteNotification swift
didReceiveRemoteNotification not called swift
为什么我收不到后台未收到的通知???
这是我第一次使用推送通知。我阅读了文档并遵循 Google Firebase Doc. Also I implement code from firebase/quickstart-ios 的指南。之后,我在 firebase 服务上创建了控制台,上传了我的证书并成功发送了我在前台和后台收到的消息。
但是当我更改从后端开发人员那里获取的控制台时,我的应用程序停止在后台模式下接收推送通知。
我在做什么:
- 功能推送通知设置为"ON"
- 在功能后台模式中启用 "Background fetch"、"Remote notification"
- content_available 设置为“1”
- 发送消息优先级设置为"High"
我不明白为什么应用程序停止在后台接收通知,如果它之前运行良好。
我也在 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
为什么我收不到后台未收到的通知???
这是我第一次使用推送通知。我阅读了文档并遵循 Google Firebase Doc. Also I implement code from firebase/quickstart-ios 的指南。之后,我在 firebase 服务上创建了控制台,上传了我的证书并成功发送了我在前台和后台收到的消息。
但是当我更改从后端开发人员那里获取的控制台时,我的应用程序停止在后台模式下接收推送通知。
我在做什么:
- 功能推送通知设置为"ON"
- 在功能后台模式中启用 "Background fetch"、"Remote notification"
- content_available 设置为“1”
- 发送消息优先级设置为"High"
我不明白为什么应用程序停止在后台接收通知,如果它之前运行良好。
我也在 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