Firebase Web推送通知,firefox两次显示通知

时间:2020-07-31 10:56:46

标签: javascript firebase push-notification firebase-cloud-messaging service-worker

我正在使用Firebase构建具有Web通知的应用程序,并使用https://github.com/kreait/firebase-php从服务器发送通知

我已经能够在浏览器中正确注册servicer worker并接收通知,但是我在firefox / chrome中遇到了异常行为。

这是浏览器收到的通知:

data: {
  ​​"gcm.notification.e": "1"​​,
  "google.c.a.e": "1",
  "fcmOptions": {
    "link": "/link-to-target.html"
  }
  "from": "XXXXXXXXXX",
  "notification": {
    "body": "A new post is ready for you to read",
    "icon": "/images/ic_launcher.png",
    "title": "New post"
  },
  "priority": "normal"
}

如果我在服务人员中什么也不做,chrome不会显示任何内容,但是firefox会正确显示通知,并带有文本,图标和单击后重定向到正确的目标。就像Firefox是自动“理解”“通知”,而chrome却不是。

这是服务人员的代码:

importScripts('https://www.gstatic.com/firebasejs/7.16.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.16.1/firebase-messaging.js');

firebase.initializeApp({
  apiKey: '****',
  authDomain: '****',
  databaseURL: '****,
  projectId: '****',
  storageBucket: '****',
  messagingSenderId: '****',
  appId: '******'
});

const messaging = firebase.messaging();

如果我将事件监听器添加到push事件中,以便能够在chrome中处理通知,则在chrome中显示通知(尽管该图标未显示),但是在Firefox中,通知显示为 两次,一次是像以前一样处理“自动”通知,另一次是在监听器上创建我的通知。

这是代码:

self.addEventListener('push', event => {
  const data = event.data ? event.data.json() : {};
  console.log('SW: Push received', data);

  if (data.notification && data.notification.title) {
    event.stopImmediatePropagation();
    const options = {
      body: data.notification.body,
      icon: data.notification.icon ? data.notification.icon : '/images/ic_launcher.png',
      data: data
    };
    event.waitUntil(self.registration.showNotification('****' + data.notification.title, options));
  }
});

我在标题中添加了****,以便能够区分我触发的通知和firefox自动触发的通知。

更改服务器推送的通知不是可行的解决方案,因为它对于移动设备中的应用程序目前运行良好。

谢谢。

0 个答案:

没有答案