【问题标题】:Not able to send an iOS CriticalAlert to Firebase Cloud Messaging无法向 Firebase Cloud Messaging 发送 iOS CriticalAlert
【发布时间】: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 一起使用,顺便说一句,这很棒。使用此库运行的所有平台都可以轻松获取推送通知。

标签: ios firebase google-cloud-messaging apple-push-notifications firebase-cloud-messaging


【解决方案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,但它仍然无法正常工作。那很奇怪。请参阅“通知有效负载支持”->“声音”。这里指出,可以使用声音词典。我们尝试了所有可能的组合...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 2016-09-22
  • 1970-01-01
  • 2016-11-21
  • 2018-11-02
  • 1970-01-01
相关资源
最近更新 更多