Я перестал получать push-уведомления (используя FCM) из моего проекта, начал расследование и обнаружил, что мой сервисный работник даже не может получить свой собственный push-токен для FCM, всегда получая ошибку:
Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential.
После этого я обнаружил, что IndexedDB для моего домена пуст.Существует целая структура, но нет данных в ней, поэтому работник сервисной службы не может получить ее vapid-ключ.Когда я пытаюсь принудительно ввести ключ в сервисную мастерскую, я получаю:
Messaging: This method is available in a Window context. (messaging/only-available-in-window).
Вот код моей сервисной мастерской:
importScripts('https://www.gstatic.com/firebasejs/5.4.2/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/5.4.2/firebase-messaging.js');
var config = {
apiKey: "xxx",
authDomain: "xxx.firebaseapp.com",
databaseURL: "https://xxx.firebaseio.com",
projectId: "xxx",
storageBucket: "xxx.appspot.com",
messagingSenderId: "xxx"
};
firebase.initializeApp(config);
const messaging = firebase.messaging();
var token = '';
self.addEventListener('notificationclick', function(event) {
event.notification.close();
event.waitUntil(self.clients.openWindow(event.notification.data.url));
});
messaging.setBackgroundMessageHandler(function(payload) {
var options = payload.data;
options.requireInteraction = true;
options.vibrate = [300, 100, 400];
options.data = {};
options.data.url = options.url.replace('%TOKEN%',encodeURIComponent(token));
return self.registration.showNotification(options.title,options);
});
messaging.getToken().then(function(currentToken){
token = currentToken;
});
Так как я могу получить токен в своей сервисной мастерской,когда indexeddb пуст?Или как я могу заставить Vapid ключ?