firebase Web通知中firebase-messaging-sw.js的用途是什么?

Vik*_*mar 5 javascript push-notification firebase service-worker firebase-cloud-messaging

我已经在网站上为Firebase推送通知配置了Javascript API。一切正常,但我看到许多“背景消息”。我只是将firebase-messaging-sw.js文件放在我的网站目录中。

我不知道它的用途。我只是想知道它在做什么。如果您看到以下代码,则会看到我还没有提供messagingSenderId该文件仍被执行的信息。

所以我想知道的是:

没有ID如何运作?

有什么用?它是接收推送通知并在onMessage处理程序中处理它们的强制性文件吗?

我实际上应该在哪里放置该文件(我的当前目录是:MY-SITE-DOMAIN / firebase-messaging-sw.js,但是firebase通知是在其他目录中配置的)?

这是代码:

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

firebase.initializeApp({
  'messagingSenderId': 'YOUR-SENDER-ID'
});

const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function(payload) {
 console.log('[firebase-messaging-sw.js] Received background message ', payload);
 const notificationTitle = 'Background Message from html';
  const notificationOptions = {
   body: 'Background Message body.',
   icon: '/firebase-logo.png'
 };

  return self.registration.showNotification(notificationTitle,
     notificationOptions);
});
Run Code Online (Sandbox Code Playgroud)

原始文件在这里

小智 5

您可以使用下面的配置或仅使用 messagesSenderID。您可能已经在其他 javascript 中设置了配置,因此它不会抛出任何错误。

var config = {
        apiKey: "",
        authDomain: "",
        databaseURL: "",
        storageBucket: "",
        messagingSenderId: ""
    };
Run Code Online (Sandbox Code Playgroud)

firebase-messaging-sw.js 是必须的,并且应该存在于主机根目录中。当浏览器未处于焦点或在后台时,这是设置后台通知处理程序所必需的。

  • 是否有任何链接/来源可以确认“firebase-messaging-sw.js 应存在于主机根目录中”? (2认同)

小智 5

默认情况下,firebase 将查找 /firebase-messaging-sw.js,其中应包含 firebase 库和侦听器。更多细节在这里:https : //firebase.google.com/docs/cloud-messaging/js/receive

如果您想使用现有的 Service Worker,可以使用https://firebase.google.com/docs/reference/js/firebase.messaging.Messaging#useServiceWorker

像这样...

navigator.serviceWorker.register('/service-worker.js').then(registration => {
  firebase.messaging().useServiceWorker(registration)
})
Run Code Online (Sandbox Code Playgroud)