如何向浏览器的 Javascript 应用程序发送静默推送?
How do I send a silent push to my browser's Javascript app?
我正在使用 Firebase,但我不确定它是否相关。
我正在尝试在浏览器中向我的应用程序 运行ning 发送静默推送(这是一个 JS/React 单页应用程序),根据 Firebase FCM 文档,我必须要做的是使用 "data" 键发送消息。
但是,这对我不起作用:如果我的消息没有 "notification" 密钥,则浏览器不会接收它。
为了测试这个,我 运行 这两个 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
第一个在应用 "open" 时进入浏览器,并在应用 "closed"(标签页关闭或浏览器关闭)时进入通知中心。
第二个从未达到任何目的(但对 curl 调用的响应给出 "success":1,"failure":0)
我做错了什么?
这只是 WebPush 不支持的吗?我在网上看到了相互矛盾的信息。
在某些情况下,静默推送对于在浏览器中更新客户端状态非常有用。例如,如果我使用 channels/groups 构建一个聊天应用程序,我希望能够向客户端发送有关聊天状态的更新,而无需用户看到通知:我不希望用户当聊天组的参与者有更新时看到明确的 "over the top" 通知,例如:我只想在浏览器的 UI 中更新它,尤其是当应用程序在前台时。
我通过在服务工作线程中使用 Firebase 的 setBackgroundMessageHandler() 注册处理程序解决了这个问题。
Firebase 的文档指出这仅是 "data only" 推送的后台处理所必需的(即静默),但事实证明它似乎也是前台处理所必需的(即使您的处理程序什么都不做。)
一旦我注册了我的虚拟处理程序,我就开始在前台接收到应用程序的静默推送。
我正在使用 Firebase,但我不确定它是否相关。
我正在尝试在浏览器中向我的应用程序 运行ning 发送静默推送(这是一个 JS/React 单页应用程序),根据 Firebase FCM 文档,我必须要做的是使用 "data" 键发送消息。
但是,这对我不起作用:如果我的消息没有 "notification" 密钥,则浏览器不会接收它。
为了测试这个,我 运行 这两个 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
第一个在应用 "open" 时进入浏览器,并在应用 "closed"(标签页关闭或浏览器关闭)时进入通知中心。
第二个从未达到任何目的(但对 curl 调用的响应给出 "success":1,"failure":0)
我做错了什么? 这只是 WebPush 不支持的吗?我在网上看到了相互矛盾的信息。
在某些情况下,静默推送对于在浏览器中更新客户端状态非常有用。例如,如果我使用 channels/groups 构建一个聊天应用程序,我希望能够向客户端发送有关聊天状态的更新,而无需用户看到通知:我不希望用户当聊天组的参与者有更新时看到明确的 "over the top" 通知,例如:我只想在浏览器的 UI 中更新它,尤其是当应用程序在前台时。
我通过在服务工作线程中使用 Firebase 的 setBackgroundMessageHandler() 注册处理程序解决了这个问题。
Firebase 的文档指出这仅是 "data only" 推送的后台处理所必需的(即静默),但事实证明它似乎也是前台处理所必需的(即使您的处理程序什么都不做。)
一旦我注册了我的虚拟处理程序,我就开始在前台接收到应用程序的静默推送。