无法向 Firebase Cloud Messaging 发送 iOS CriticalAlert
Posted
技术标签:
【中文标题】无法向 Firebase Cloud Messaging 发送 iOS CriticalAlert【英文标题】:Not able to send an iOS CriticalAlert to Firebase Cloud Messaging 【发布时间】:2019-04-15 20:11:55 【问题描述】:我有一个内部应用程序,我在我的应用程序中设置了criticalAlert 选项。我已经确认,当我通过推送应用程序发送以下内容时,我能够获得关键警报以在 ios 应用程序上工作。
问题是我们的内部服务器目前仅将通知发送到 Firebase 云消息传递,我无法配置原始推送负载以在设备上播放关键警报。
这里是the example,Apple 给出了关于 APNS 的推送应该如何看待:
这是我使用适用于该应用程序的 pushy 应用程序发送的内容:
"aps" :
"content_available": true,
"priority": "high",
"alert" : "Your message Here",
"badge" : 1,
"sound":
"critical": 1,
"name": "alert.wav",
"volume": 1.0
,
"data":
"volume": 7,
"time_to_live": 900,
"id": 3618,
"type": "engagement",
"overrideMessage": "Testing oncall for iOS",
"case": "Test Case",
"repeatNumber": 3,
"customer": "Google"
这是我们发送到 FCM 的当前有效负载,它可以与自定义声音一起使用,但我们真的希望关键警报能够正常工作,因为推送是针对待命参与的:
"to": "firebaseToken",
"content_available": true,
"priority": "high",
"isCritical": "true",
"notification":
"title": "Title in notification",
"body": "Body in notification",
"sound": "alert.wav",
"badge": "1",
"subtitle": "subtitle in notification"
,
"data":
"volume": 7,
"time_to_live": 900,
"id": 3618,
"type": "engagement",
"overrideMessage": "Testing oncall for iOS",
"case": "Test Case",
"repeatNumber": 3,
"customer": "Google"
我已经尝试了很多关于发送到 FCM 的内容的组合,但都没有成功:
"to": "firebaseToken",
"apns":
"headers":
"apns-priority": "10"
,
"payload":
"aps" :
"sound":
"critical": 1,
"name": "alert.wav",
"volume": 0.5
,
和
"aps" :
"to": "firebaseToken",
"content_available": true,
"priority": "high",
"alert" : "Your message Here",
"badge" : 1,
"sound":
"critical": 1,
"name": "alert.wav",
"volume": 0.5
,
和
"to": "firebaseToken",
"aps" :
"sound" :
"critical": 1,
"name": "alert.wav",
"volume": 1.0
,
"notification":
"badge": "1",
和
"to": "firebaseToken",
"isCritical": "true",
"content_available": true,
"notification":
"badge": "1",
"sound" :
"critical": 1,
"name": "alert.wav",
"volume": 1.0
,
他们都不允许将声音词典传递给 FCM。
我也有the answer here,但它不能解决我的问题。因为我要求 iOS 知道这个推送通知很重要,并让操作系统而不是我的应用程序来处理它。
【问题讨论】:
当您说“传递给 FCM”时,您使用的是 REST API 还是 Admin SDK?如果您使用的是 REST,是否可以包含端点,如果您使用的是 Admin,是否可以包含服务器代码? 我无权访问服务器代码,但我目前正在使用 Postman 并将 json 有效负载发送到 fcm.googleapis.com/fcm/send 如果我可以获得正确的 json 发送到 FCM,那么我可以获得服务器侧更改为匹配。 您是否使用旧版 http 运行它?我们还尝试了所有可能的组合 - 它不起作用。 APNS,虽然有效。但是我们必须使用FCM 我们可以在下面批准 Jen 的回答,尽管我不能投赞成票,因为文档显然已经损坏,并且据说它正在使用旧的 http api。它绝对可以与管理 SDK 一起使用,顺便说一句,这很棒。使用此库运行的所有平台都可以轻松获取推送通知。 【参考方案1】:在我回答您的具体问题之前,我想建议您尽可能考虑使用Admin SDK 而不是 REST API。该 SDK 在 Node.js、Java、python、go 和 C# 中可用。如果您的服务器代码是用这些语言中的任何一种编写的,那么这是使用 FCM 处理发送消息的一种更简单的方法。 SDK 处理重试和其他您必须在代码中实现的场景。
至于您的问题,guides 中指出特定于平台的字段仅适用于 FCM v1 端点。要使用 FCM,您的端点将如下所示:
https://fcm.googleapis.com/v1/projects/[your-project-id]/messages:send
您可以在guides 中看到这样的示例。从 sn-p 选项卡中选择 REST 以查看示例。
请注意,您授权发送的方式与 V1 不同。您可以在guide 中找到更多信息。如果您在 auth 部分遇到问题,我还写了一个 blog post 来讨论它,因为它经常出现。
【讨论】:
@Jen Person 为什么在此处记录:firebase.google.com/docs/cloud-messaging/… 该文档清楚地描述了 http 遗留 API,但它仍然无法正常工作。那很奇怪。请参阅“通知有效负载支持”->“声音”。这里指出,可以使用声音词典。我们尝试了所有可能的组合...以上是关于无法向 Firebase Cloud Messaging 发送 iOS CriticalAlert的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Firebase Cloud Messaging 向所有设备发送通知
如何使用 Firebase Cloud Messaging 向所有用户发送数据负载?
按用户属性向用户发送 Firebase Cloud Messaging 通知
通过NodeJS向Firebase Cloud Messaging发送消息