Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Firebase云消息传递不';不显示窗口焦点时的通知_Reactjs_Firebase_Redux_Firebase Cloud Messaging - Fatal编程技术网

Reactjs Firebase云消息传递不';不显示窗口焦点时的通知

Reactjs Firebase云消息传递不';不显示窗口焦点时的通知,reactjs,firebase,redux,firebase-cloud-messaging,Reactjs,Firebase,Redux,Firebase Cloud Messaging,最近开始使用FCM,有两种情况,一种是在浏览器窗口中,您将使用事件侦听器在窗口内收到应用程序内通知;另一种是在浏览器窗口外,您将收到桌面通知 在我的特殊情况下,每当我在窗口上时,只要接收到某个消息对象,我就会调用API来获取数据 navigator.serviceWorker.addEventListener("message", ({ data }) => { dispatch(getNotifications(10)); }); 这很好,但是当我有一个打开的选

最近开始使用FCM,有两种情况,一种是在浏览器窗口中,您将使用事件侦听器在窗口内收到应用程序内通知;另一种是在浏览器窗口外,您将收到桌面通知

在我的特殊情况下,每当我在窗口上时,只要接收到某个消息对象,我就会调用API来获取数据

navigator.serviceWorker.addEventListener("message", ({ data }) => {
  dispatch(getNotifications(10));
});
这很好,但是当我有一个打开的选项卡,但我在另一个窗口上时,FCM不会获取此消息对象,并且没有调用任何事件侦听器,基本上我必须刷新页面或使用window.onfocus在返回选项卡时重新调用api


任何有解决方法的人?

当您在另一个选项卡上时,Firebase都不会显示该消息,很遗憾

但是您可以使用开箱即用的API。它就像一个符咒。 在服务人员中,您可以添加以下内容:

const broadcast = new BroadcastChannel('background-message');

messaging.onBackgroundMessage(message => {
    broadcast.postMessage(message);
})
然后在应用程序中收听“背景信息”:

const broadcast = new BroadcastChannel('background-message');
broadcast.onmessage = (event) => {
  console.log('message from service-worker:', event.data)
};
更新:这在safari上不起作用,但此解决方案似乎有效: