我正在使用Firebase,但不确定是否相关。
我正在尝试向运行在浏览器中的应用程序发送静默推送(这是一个JS / React单页应用程序),根据Firebase FCM文档,我要做的就是发送一条带有“数据”的消息”键。
但是,这对我不起作用:如果我的消息没有“通知”键,则浏览器不会接收到它。
要对此进行测试,我运行以下两个curl命令:
curl -H "Content-type: application/json" -H "Authorization:key=<MYKEY>" -X POST -d '{ "data": { "foo": "1","bar": "2"},"to" : "<TOKEN>", "notification": { "data" : "Some data" } }' https://fcm.googleapis.com/fcm/send
curl -H "Content-type: application/json" -H "Authorization:key=<MYKEY>" -X POST -d '{ "data": { "foo": "1","bar": "2"},"to" : "<TOKEN>" }' https://fcm.googleapis.com/fcm/send
当应用程序“打开”时,第一个进入浏览器,当应用程序“关闭”(关闭选项卡或关闭浏览器)时,第一个进入通知中心。
第二个从不到达任何东西(但对curl调用的响应为“成功”:1,“失败”:0)
我在做什么错? WebPush是否仅支持此功能?我在线阅读矛盾的信息。
在某些情况下,静默推送对于更新浏览器中的客户端状态非常有用。例如,如果我使用频道/组构建聊天应用程序,则希望能够将有关聊天状态的更新发送给客户端,而不会收到用户可见的通知:我不希望用户看到例如,当聊天组的参与者有更新时,会显示明确的“ over the top”通知:我只想在浏览器的UI中进行更新,尤其是在应用程序位于前台时。
答案 0 :(得分:0)
我通过在服务工作者中向Firebase的setBackgroundMessageHandler()注册处理程序来解决了这个问题。
Firebase的文档指出,仅对“仅数据”推送(即,无声)进行后台处理才需要此操作,但事实证明,前台处理似乎也需要此操作(即使您的处理程序什么也不做。)
注册虚拟处理程序后,我便开始在前台接收无声推送到应用程序中。