ServiceWorker не может получить токен, когда IndexDB отброшен - PullRequest
0 голосов
/ 19 апреля 2019

Я перестал получать 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 ключ?

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