Почему getToken () Firebase Cloud Messaging работает, только если я опускаю метод usePublicVapidKey, почему?

У меня есть конкретная проблема с реализацией Firebase для Firebase Cloud Messaging (FCM):

Как вы можете видеть в коде ниже, //messaging.usePublicVapidKey("<MY VAPID KEY IN HERE>"); комментируется Ключ VAPID был получен с помощью команды: web-push generate-vapid-keys в терминале сервера. Если я раскомментирую эту строку, я получаю эту ошибку в консоли при вызове notification_permission():

  • код: "обмен сообщениями / токен-подписка-ошибка",

  • сообщение: "В запросе отсутствуют необходимые учетные данные для проверки подлинности. Ожидаемый токен доступа OAuth 2, файл cookie для входа в систему или другие действительные учетные данные для проверки подлинности. См. https://developers.google.com/identity/sign-in/web/devconsole-project.",

  • stack: "FirebaseError: В запросе отсутствуют необходимые учетные данные для проверки подлинности. Ожидаемый токен доступа OAuth 2, cookie для входа в систему или другие действительные учетные данные для проверки подлинности. См. https://developers.google.com/identity/sign-in/web/devconsole-project. at https://www.gstatic.com/firebasejs/4.12.1/firebase-messaging.js:6:8316"

Это мой ток index.html файл:

<script src="https://www.gstatic.com/firebasejs/4.12.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.12.1/firebase-messaging.js"></script>
<script>
var config = {
    apiKey: "<MY FIREBASE API KEY>",
    authDomain: "<MY FIREBASE PROJECT ID>.firebaseapp.com",
    databaseURL: "https://<MY FIREBASE PROJECT ID>.firebaseio.com",
    projectId: "<MY FIREBASE PROJECT ID>",
    storageBucket: "<MY FIREBASE PROJECT ID>.appspot.com",
    messagingSenderId: "<MY FIREBASE SENDER ID?>"
};
firebase.initializeApp(config);

//messaging app
const messaging = firebase.messaging();

//vapid
//messaging.usePublicVapidKey("<MY VAPID KEY IN HERE>");

//register service worker
navigator.serviceWorker.register('firebase-messaging-sw.js').then(function(registration) {
    console.log('Service Worker Registered!', registration);
}).catch(function(err) {
    console.error('Service Worker registration failed', err);
});
</script>

Это функция javascript, которую я вызываю, чтобы получить разрешение пользователя на получение уведомлений и получение токена пользователя:

<script>
function notification_permission() {
    messaging.requestPermission().then(function(permission) {
        console.log('Notification permission granted.', permission);
        messaging.getToken().then(function(current_token) {
            if(current_token) {
                //update user token
                // update_token(current_token);
                console.log('token', current_token);
            } else {
                // you don't have permission to show notifications
                // detect whether they are blocked or not, then show your custom UI
            }
        }).catch(function(err) {
            // retrieving token failed, analyze the error
            console.error('retrieving token failed, analyze the error', err);
        });
    }).catch(function(err) {
        console.error('Unable to get permission to notify.', err)
    });
}
</script>

У меня уже есть это на моем manifest.json файл:

{
    "gcm_sender_id": "103953800507",
    "serviceworker": {
        "src": "firebase-messaging-sw.js",
        "scope": "/"
    }
}

Мои конкретные вопросы с этой конфигурацией:

  1. Это нормально использовать web-push generate-vapid-keys получить ключ VAPID только один раз и использовать тот же ключ VAPID для всех пользовательских запросов?

  2. Почему getToken() сбой метода при использовании ключа VAPID?

  3. Является ли метод VAPID необязательным? Каковы преимущества его использования?

Спасибо за вашу помощь!

0 ответов

1) да.

2) потому что токен связан с учетной записью firebase, а не с пустым ключом. В обход firebase вы не можете получить токен.

3) использование vapid полезно, когда НЕ используется firebase.

Другие вопросы по тегам