无法向 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发送消息

向 Firebase Cloud Firestore 和 Angular 添加数据

如何检测真正的 iOS/APNS 推送令牌何时向 Firebase Cloud Messaging (FCM) 注册?