首页 > 解决方案 > 我可以完全在 Web Service Worker 中运行 Firebase 云消息传递吗?

问题描述

TLDR:如果您没有在应用程序的前台运行 FCM 代码,会不会有问题?将所有内容都放在 Web Worker 中是否会出现任何问题?


我有以下服务人员:

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

firebase.initializeApp({ ... });

const messaging = firebase.messaging();

self.addEventListener('activate', event => {
    console.log('Service worker activating...');

    // Add the public key generated from the console here.
    messaging.usePublicVapidKey();

    // Get Instance ID token. Initially this makes a network call, once retrieved
    // subsequent calls to getToken will return from cache.
    messaging.getToken().then((currentToken) => {
        console.log("currentToken", currentToken);

        if (currentToken) {
            // sendTokenToServer(currentToken);
        } else {
            console.error('No Instance ID token available. Request permission to generate one.');
        }
    }).catch((err) => {
        console.error('An error occurred while retrieving token. ', err);
    });

    messaging.setBackgroundMessageHandler(function(payload) {
        console.log('[firebase-messaging-sw.js] Received background message ', payload);
    });
});

如果这个 service worker 是这样启动的:

if ('serviceWorker' in navigator) {
    window.addEventListener('load', () => {
        navigator.serviceWorker.register('js/service-worker.js')
        .then(registration => {
            console.log('Service Worker is registered', registration);
        })
        .catch(err => {
            console.error('Registration failed:', err);
        });
    });
}

onTokenRefresh考虑到这只能在前台处理,如果从不处理回调是否有问题。

FCM 的这种设置是否正确?

标签: javascriptfirebasefirebase-cloud-messagingservice-workerweb-worker

解决方案


你想使用指定一个现有的服务工作者命名js/service-worker.js吗?

Firebase 消息传递的默认服务工作线程文件名为firebase-messaging-sw.js.

如果要使用指定现有的服务工作者,则应使用 useServiceWorker 指定现有的服务工作者。

看:

您的应用必须在 firebase-messaging-sw.js 中定义 Firebase 消息传递服务工作者。或者,您可以使用 useServiceWorker 指定现有的服务工作者。


推荐阅读