Firebase onMessage не запускается - PullRequest
0 голосов
/ 07 февраля 2020

У меня проблемы с уведомлениями firebase pu sh. Событие onMessage не вызывается

firebase-messaging-sw. js

importScripts('https://www.gstatic.com/firebasejs/7.8.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.8.1/firebase-messaging.js');

firebase.initializeApp({
    apiKey: "some_data",
    authDomain: "some_data",
    databaseURL: "some_data",
    projectId: "some_data",
    storageBucket: "some_data",
    messagingSenderId: "some_data",
    appId: "some_data",
    measurementId: "some_data"
});

var messaging = firebase.messaging();

messaging.onMessage(function(payload) {
     console.log('Message received. ', payload);
 });

index. html

<script src="https://www.gstatic.com/firebasejs/7.8.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.8.1/firebase-messaging.js"></script>

<script>
    firebase.initializeApp({
        apiKey: "some_data",
        authDomain: "some_data",
        databaseURL: "some_data",
        projectId: "some_data",
        storageBucket: "some_data",
        messagingSenderId: "some_data",
        appId: "some_data",
        measurementId: "some_data"
    });

    if ('Notification' in window) {
        navigator.serviceWorker.register("js/firebase-messaging-sw.js")
        .then((registration) => {
            var messaging = firebase.messaging();
            messaging.useServiceWorker(registration);
            console.log(messaging);
            if (Notification.permission === 'granted') {
                subscribe(messaging);
                messaging.onMessage(function(payload) {
                     console.log('Message received. ', payload);
                 });
            }

            $('#subscribe').on('click', function () {
                subscribe(messaging);
            });
        });

    }

    function subscribe(messaging) {
        messaging.requestPermission()
            .then(function () {
                messaging.getToken()
                    .then(function (currentToken) {
                        console.log(currentToken);

                        if (currentToken) {
                            sendTokenToServer(currentToken);
                        }
                    })
                    .catch(function (err) {
                        setTokenSentToServer(false);
                    });
        })
        .catch(function (err) {
            console.warn('not granted', err);
        });
    }

    function sendTokenToServer(currentToken) {
        if (!isTokenSentToServer(currentToken)) {
            console.log('Отправка токена на сервер...');

            var url = '';
            $.post(url, {
                token: currentToken
            });

            setTokenSentToServer(currentToken);
        }
    }

    function isTokenSentToServer(currentToken) {
        return window.localStorage.getItem('sentFirebaseMessagingToken') == currentToken;
    }

    function setTokenSentToServer(currentToken) {
        window.localStorage.setItem(
            'sentFirebaseMessagingToken',
            currentToken ? currentToken : ''
        );
    }
</script>

Я могу получить токен и отправить его на сервер. Но когда я отправляю запрос от почтальона

https://fcm.googleapis.com/fcm/send
{
    "notification": {
        "title": "test",
        "body": "test",
        "click_action": "http://localhost:8001/"
    },
    "to": "token"
}

Я ничего не вижу на веб-странице, сообщений нет (ответ в почтальоне имеет статус 200)

Что такое правильный способ получать уведомления от firebase? Или что я делаю не так?

1 Ответ

0 голосов
/ 09 февраля 2020

Прежде всего, мой запрос почтальона был не совсем верным. Существует два типа запросов Firebase: один только для активных вкладок браузера, а второй может работать в фоновом режиме. Я использовал первое, поэтому я не вижу, чтобы onMessage не запускал.

Запрос почтальона должен быть

https://fcm.googleapis.com/fcm/send
{
    "data": {
        "title": "test",
        "body": "test",
        "click_action": "http://localhost:8001/"
    },
    "to": "token"
}

Вторичный, перед подпиской и отправкой токена на сервер, messaging.usePublicVapidKey() должен называться

И последний, messaging.onMessage также должен быть перед отправкой токена на сервер

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