Я пытался заставить 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 == правда