首页 > 解决方案 > Firebase 云消息在超出窗口焦点时不显示通知

问题描述

最近开始研究 FCM,有两种情况,或者您在浏览器窗口中,您将使用事件侦听器在窗口内收到应用内通知,或者如果您不在浏览器窗口中,您将收到桌面通知.

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

navigator.serviceWorker.addEventListener("message", ({ data }) => {
  dispatch(getNotifications(10));
});

这工作正常,但是当我有一个打开的选项卡但我在另一个窗口上时,FCM 没有得到这个消息对象并且没有调用事件侦听器,基本上我必须刷新页面或使用 window.onfocus 重新当我回到选项卡时调用 api。

有人有解决方法吗?

标签: reactjsfirebasereduxfirebase-cloud-messaging

解决方案


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

但是您可以开箱即用地使用BroadcastChannel 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 上不起作用,但这个解决方案似乎有效:https ://stackoverflow.com/a/57964685/11827624


推荐阅读