Я внедряю push-уведомления для сайта, у которого есть серверная часть Perl. Firebase - это служба push-уведомлений, которую я использую. Я потратил немало времени на это и посмотрел несколько руководств и некоторые полезные ресурсы по SO. Я придумал рабочую реализацию только с одной проблемой. Проблема заключается в том, что при отправке push-уведомления оно, кажется, поступает на клиент / браузер как пустое сообщение. То есть никакие данные, содержащие «title» и «body», не могут быть извлечены на стороне клиента / браузера при получении push-уведомления.
Я пытался использовать как firebases, так и старый и новый API, и в любом случае это заканчивалось тем же результатом пустых push-уведомлений, поступающих на клиент / браузер. Я проверил это на Chrome, Firefox и Android, и происходит то же самое.
Вот код perl, который отправляет push-уведомление. Я исключил создание токена на предъявителя, чтобы ограничить объем кода для чтения.
#SEND PUSH NOTIFICATION
my $push_subscriber = <get subscriber details from db>
my $end_point_host = $push_subscriber->{endpoint};
my $end_point = "https://$end_point_host/v1/projects/<my project
id>/messages:send";
my $request = HTTP::Request->new('POST',$end_point);
$request->header('Authorization'=>"Bearer $bearer_token");
$request->header('Content-Type' => 'application/json');
$request->content(JSON::encode_json ({
message => {
token => $push_subscriber->{subscription_id},
notification => {
title => 'test',
body => 'test content'
},
webpush => {
headers => {
Urgency => 'high'
},
notification => {
body => 'test content',
requireInteraction => 'true'
}
}
}}));
#send the request
$ua->request($request));
Вот javascript на стороне клиента / браузера, который вызывается при получении push-уведомления. Это внутри service-worker.js
self.addEventListener('push', function(e) {
var body;
if (e.data) {//THE PROBLEM IS HERE. No 'data' object exists
body = e.data.text();
} else {
body = "Empty Message";
}
var options = {
body: body
};
e.waitUntil(
self.registration.showNotification('My Notification', options)
);
});
Точка, в которой возникает проблема, указана в приведенном выше javascript. Любая помощь / обратная связь будет высоко ценится. Спасибо.