Я использую Firebase для отправки сообщений пользователям моего сайта, используя GuzzleHTTP
из моего приложения laravel
.Из того, что я понимаю, есть два способа обработки push: один использует сообщение notification
, а другой заключает объект notification
в data
.notification
использует FirebaseAPI, но, похоже, он не работает в фоновом режиме.Это работает только тогда, когда пользователь открыл PWA за последние несколько минут.Я хочу отправлять пользователям уведомления независимо от того, когда они последний раз открывали свой браузер.Я понимаю, что для этого мне следует использовать push
eventListener, и я поместил код для него, но я всегда, кажется, получаю либо уведомление API firebase (когда сайт был открыт недавно), либо вообще никакого уведомления.
Вот мой обработчик сообщений firebase
messaging.setBackgroundMessageHandler(function(payload) {
// Customize notification here
var recep = JSON.stringify(payload);
recep = JSON.parse(recep);
var notification = recep.notification;
//notification = JSON.stringify(notification);
message = JSON.parse(notification);
const notificationTitle = message.title;
const notificationOptions = {
body: message.body,
icon: message.icon,
badge: '/img/favicon.png',
click_action: messaging.click_action
};
return self.registration.showNotification(notificationTitle,
notificationOptions);
});
А вот мой обработчик сообщений или обработчик push
:
self.addEventListener('push', function(e) {
var body;
if (e.data) {
body = e.data.json().notification.body;
} else {
body = 'Alert from AppMate.Open the app to view details!';
}
var options = {
body: body,
icon: 'img/favicon.png',
badge: 'img/favicon.png',
vibrate: [100, 50, 100],
data: {
dateOfArrival: Date.now(),
primaryKey: 1
},
actions: [
{action: 'ap-mate', title: 'Visit AppMate!'}
]
};
e.waitUntil(
self.registration.showNotification('Appmate Notification', options)
);
});
А вот запрос, отправленный на конечную точку через GuzzleHTTP
:
$message = [
'data' => [
'notification' => [
'title' => $title,
'body' => $body,
'icon' => 'img/favicon.png',
'badge' => 'img/favicon.png'
],
],
'notification' => [
'title' => $title,
'body' => $body,
'icon' => 'img/favicon.png',
'badge' => 'img/favicon.png',
'click_action' => $action
],
'to' => $reg_id
];
$client = new Client([
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'key='.$access_token,
]
]);
$response = $client->post('https://fcm.googleapis.com/fcm/send',
['body' => json_encode($message)]
);
return $response->getBody();