阻止后台推送消息

时间:2017-12-27 10:17:37

标签: firebase-cloud-messaging

当我的网站在后台(关闭或其他网站窗口处于活动状态)时,firebase-messaging-sw.js中是否有任何方法可以阻止推送消息?

我使用Google Firebase服务在我的网站上实施了网络推送通知。 firebase.google.com/docs/cloud-messaging/js/client

我测试了它,一切正常,但是当我的网站窗口不在焦点(它在后台)或关闭时,如果我得到推送通知,它将在20秒后消失。

在我的https://hdlava.me/j/firebase_subscribe.js文件中,我添加了

requireInteraction: true 
message.onMessage中的

标志,所以当我的网站打开时,如果我得到推送消息,那么在我点击它之前消息不会消失。

我尝试添加此

requireInteraction: true
我在https://hdlava.me/firebase-messaging-sw.js中的messaging.setBackgroundMessageHandler中的

,但它无效。甚至:

console.log('[firebase-messaging-sw.js] Received background message ', payload)

不起作用。它看起来像整个messaging.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所以我一次有两个混乱。第一条消息消失,第二条消息消失,但第二条消息不可点击。是否可以阻止第一条消息并使第二条消息可以点击?

1 个答案:

答案 0 :(得分:0)

使用Firebase Cloud Messaging的主要目的之一是在应用未处于活动状态时接收消息。

当应用未处于活动状态时,无法阻止接收消息。但你可以:

  1. 仅在应用程序处于活动状态时对该消息执行某些操作,即在应用程序未处于活动状态时忽略该消息。
  2. 当应用处于活动状态时,只有从服务器发送消息。这要求服务器以某种方式知道应用程序是否处于活动状态,因此您需要将此信息从客户端传送到服务器。