我正在使用新的admin.messaging().sendToDevice()
方法发送网络推送通知。我正在发送notification
和data
,因此我可以在消息中向用户显示一些上下文。
在客户端,我正在使用firebase.messaging().setBackgroundMessageHandler()
处理接收消息。
问题是setBackgroundMessageHandler()
永远不会被调用。我尝试了来自a similar question的解决方案但是如果我改变服务器上的有效负载结构以在notification
字段中添加data
,则会抛出一个错误,说我应该只使用字符串作为值data
(notification
是一个对象。请参阅admin.messaging.NotificationMessagePayload)。
如果我不在服务器上使用firebase.messaging
并且只是按照建议的其他答案进行重组,我将无法享受clickAction
的精彩功能,这使我免于处理{{ 1}}我自己。
我还在服务工作者的notificationclick
事件中添加了监听器,并且我收到了完整的有效负载(push
和notification
都可用),它只是不调用回调
这是data
的错误吗?或者我不是按照我的方式使用它?
答案 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",
}