我目前正在使用一个已经生成弹出消息的应用程序,因此我想使用 firebase 在后台监听推送通知,但我只想将一些数据传递给客户端,并避免显示来自服务人员的消息。我已经尝试了不同的方式,但它们都显示来自谷歌的自定义弹出窗口“该网站已在后台更新”。 现在我的代码按预期工作,但我不喜欢等待空承诺的想法。有更好的解决方案吗?使用这种方法有哪些风险。我没有找到关于 event.waitUntil() 的太多信息,例如,我不知道它等待了多少时间。欢迎任何帮助。 (我已经尝试过所有这些https://github.com/firebase/quickstart-js/issues/126)
const messaging = firebase.messaging();
self.addEventListener('push', function(event) {
if(event.data) {
const listenerEvent = event.data.text();
const response = JSON.parse(listenerEvent);
var promiseChain = null;
const bc = new BroadcastChannel('firebase_background_message_channel');
bc.postMessage(response);
event.waitUntil(promiseChain);
}
});
Chrome显示“此网站已在后台更新”。收到推送消息时的通知,并且在传递给
event.waitUntil()
的 Promise 完成后,Service Worker 中的推送事件不会显示通知。
Chrome 要求在收到推送消息时显示通知,以防止网站通过发送大量安静的推送消息来耗尽用户的电池。
处理推送事件中有更多相关信息。
在您的代码中,
promiseChain
始终为空,这将导致出现模糊的 Chrome 消息。当调用 event.waitUntil()
时,你实际上必须传递一个 Promise。