Могу ли я запускать Firebase Cloud Messaging полностью с работником веб-службы? - PullRequest
0 голосов
/ 05 апреля 2020

TLDR: Есть ли проблема, если у вас не запущен код FCM на переднем плане приложения? Есть ли какие-либо проблемы, которые могут возникнуть из-за наличия всего в веб-работнике?


У меня есть следующий работник службы:

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);
    });
});

Если этот работник службы запущен так:

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 кажется правильной?

1 Ответ

0 голосов
/ 05 апреля 2020

Вы хотите использовать, указать существующий сервисный работник с именем js/service-worker.js?

Имя файла сервисного работника службы сообщений Firebase по умолчанию: firebase-messaging-sw.js.

Если вы хотите использовать, укажите существующего сервисного работника, тогда вы должны указать существующего сервисного работника с помощью useServiceWorker.

См .:

Ваше приложение должно определить работника службы сообщений Firebase в firebase-messaging-sw. js. Кроме того, вы можете указать существующего работника службы с помощью useServiceWorker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...