firebase-messaging-sw.js中是否有任何方法可以在我的网站(关闭或其他网站窗口处于活动状态)时防止推送消息?
我使用Google Firebase服务在网站上实现了Web-Push通知。firebase.google.com/docs/cloud-messaging/js/client
我对其进行了测试,一切都很好,但是当我的网站窗口不在焦点(背景中)或关闭时,如果我得到推动通知,它将在20秒后消失。
在我的https://hdlava.me/j/firebase_subscribe.js文件中我添加了
requireInteraction: true
MEDAGING.ONMESSAGE中的标志,因此,如果我在打开网站时会得到推送,直到我单击它才会消失。
我尝试添加此
requireInteraction: true
在我的https://hdlava.me/firebase-messaging-sw.js中,在Messaging.SetBackgroundMessageHandler中,但它不起作用。均匀:
console.log('[firebase-messaging-sw.js] Received background message ', payload)
不起作用。看起来整个消息传递。setBackgroundMessageHandler不起作用。
// firebase-messaging-sw.js
importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-messaging.js');
firebase.initializeApp({
messagingSenderId: '593513494453'
});
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function(payload) {
console.log('[firebase-messaging-sw.js] Received background message ', payload);
// Customize notification here
const notificationTitle = 'Background Message Title';
const notificationOptions = {
body: 'Background Message body.',
icon: '/firebase-logo.png'
};
return self.registration.showNotification(notificationTitle,
notificationOptions);
});
有人可以帮我弄清楚问题是什么?另外,如果我在firebase-messaging-sw.js
中使用 self.addEventListener("push",function(event)
self.addEventListener("push",function(event) {
if (!(self.Notification && self.Notification.permission === 'granted')) {
return;
}
var data = {};
if (event.data) {
data = event.data.json();
}
console.log(data.notification);
const notificationTitle = data.notification.title;
const notificationOptions = {
body: data.notification.body,
icon: data.notification.icon,
click_action: data.notification.click_action,
requireInteraction: true
};
return self.registration.showNotification(notificationTitle,
notificationOptions);
});
messaging.setBackgroundMessageHandler
,所以我一次有两个消息。第一条消息消失了,第二个消息不会,但是第二个消息不可点击。是否有可能阻止第一消息并使第二个消息可单击?
使用Firebase Cloud Messaging的主要目的之一是在应用不活动的情况下接收消息。
当应用不活动时,无法防止收到消息。但是您可以:
- 在应用程序处于活动状态时仅对消息中的消息进行操作,即应用程序不活动时忽略消息。
- 仅当应用程序处于活动状态时,从服务器发送消息。这要求服务器以某种方式知道该应用程序是否处于活动状态,因此您需要将这些信息从客户端传达到服务器。