Firebase消息传递`setBackgroundMessageHandler`覆盖通知主体#AskFirebase

时间:2017-02-04 20:44:49

标签: firebase web-push firebase-admin

我正在使用新的admin.messaging().sendToDevice()方法发送网络推送通知。我正在发送notificationdata,因此我可以在消息中向用户显示一些上下文。

在客户端,我正在使用firebase.messaging().setBackgroundMessageHandler()处理接收消息。

问题是setBackgroundMessageHandler()永远不会被调用。我尝试了来自a similar question的解决方案但是如果我改变服务器上的有效负载结构以在notification字段中添加data,则会抛出一个错误,说我应该只使用字符串作为值datanotification是一个对象。请参阅admin.messaging.NotificationMessagePayload)。

如果我不在服务器上使用firebase.messaging并且只是按照建议的其他答案进行重组,我将无法享受clickAction的精彩功能,这使我免于处理{{ 1}}我自己。

我还在服务工作者的notificationclick事件中添加了监听器,并且我收到了完整的有效负载(pushnotification都可用),它只是不调用回调

这是data的错误吗?或者我不是按照我的方式使用它?

2 个答案:

答案 0 :(得分:1)

我联系了Firebase支持,他们说这是预期的行为。

因此,如果在glfwSetMouseButtonCallback发生时想要做某事,他应该只发送push字段。如果发送data字段,它将优先,并且不会调用回调,但用户将收到通知。

答案 1 :(得分:0)

详细的答案:

请参阅FCM文档:

  

https://firebase.google.com/docs/cloud-messaging/js/receive

     

“注意:如果您在HTTP或XMPP发送请求中设置了通知字段,则这些值优先于服务工作者中指定的任何值。”

所以,如果有

{
    "notification": {
      "title": "Your title",
      "body": "Your message"
    },
    "to": "topic",
}

它从不触发BackgroundMessageHandler。由于以这种方式发送数据,因此只需覆盖变量即可。如果要触发它,则需要像这样发送通知:

{
    "data": {
      "notification": {
        "title": "Your title",
        "body": "Your message"
      }
    },
    "to": "topic",
}