如何向我的浏览器的Javascript应用发送静默推送?

时间:2018-10-05 16:00:07

标签: javascript push-notification firebase-cloud-messaging web-push

我正在使用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中进行更新,尤其是在应用程序位于前台时。

1 个答案:

答案 0 :(得分:0)

我通过在服务工作者中向Firebase的setBackgroundMessageHandler()注册处理程序来解决了这个问题。

Firebase的文档指出,仅对“仅数据”推送(即,无声)进行后台处理才需要此操作,但事实证明,前台处理似乎也需要此操作(即使您的处理程序什么也不做。)

注册虚拟处理程序后,我便开始在前台接收无声推送到应用程序中。