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