Push-уведомления Firebase всегда приходят как пустое сообщение - PullRequest
0 голосов
/ 21 мая 2019

Я пытался заставить push-уведомления работать, используя firebase. До сих пор я дошел до того, что успешно отправил пустое сообщение «Щекотка». Проблема в том, что добавление полезной нагрузки сообщения не влияет на то, что получает клиент. То есть работник службы видит это как еще одно пустое сообщение.

Я начал с просмотра руководства по Google - https://developers.google.com/web/ilt/pwa/introduction-to-push-notifications

После прохождения процедуры отправки пустого сообщения говорится, что полезная нагрузка сообщения должна быть зашифрована, и предлагает использовать для этого существующую библиотеку. Цитирую: «Как и во всем, что связано с шифрованием, обычно проще использовать активно поддерживаемую библиотеку, чем писать собственный код».

Я пытался использовать web-push-php, который является одной из библиотек, рекомендуемых руководством по googles. После проблем с этим я обнаружил, что web-php-push на самом деле не поддерживает firebase.

Глядя здесь, я нахожу примеры, которые выглядят действительно простыми и не шифруют полезную нагрузку сообщения. Это просто отправлено в формате JSON. Это не влияет, и принимающая сторона все еще думает, что это пустое сообщение. Смотрите мой код ниже.

Я в полном недоумении с этим, и меня смущает, почему руководство googles говорит, что данные сообщения должны быть зашифрованы, но есть множество примеров на SO, где они просто отправляются в виде простого текста json.

Это то, что я отправляю с моего сервера в конечную точку.

POST https://fcm.googleapis.com/fcm/send Authorization: key=[my server 
key] Content-Type: application/json {"priority":10,"to":"[subscriber 
id]","notification":{"body":"test body","title":"test title"}}

Вот мой слушатель событий в моем сервисе worker.js

self.addEventListener('push', function(e) {
    var body;

    if (e.data) {
        body = e.data.text();
    } else {
        body = "No message "+JSON.stringify(e);
    }
    var options = {
        body: body
    };
    e.waitUntil(
        self.registration.showNotification('Launtel Residential', options)
    );
});

Когда я запускаю почтовый запрос выше push-уведомления, происходит и запускает событие push-сообщения работника сервиса, как и ожидалось, но данные сообщения отсутствуют. e.data возвращает ноль. Объект 'e' всегда содержит только флаг, установленный в true. e.isTrusted == правда

...