Мы внедрили SDK, чтобы упростить процесс отправки и получения push-уведомлений. Однако недавно мы столкнулись с проблемой, которая приводит к получению сообщения Generic Notification
(т. е. Этот сайт был обновлен в фоновом режиме) всякий раз, когда мы отправляем push-сообщение.
После периода проверок и проб и ошибок мы пришли к грубому выводу, что:
- Всякий раз, когда мы отправляем push-уведомление, в первый раз, сервисный работник не просыпается и не зависает в состоянии
Stopped
. В результате отображаетсяGeneric Notification
. В ближайших последующих Push-сообщениях сервис-воркер переходит в состояниеRunning
и получает Push-сообщения. - Следующий код, отвечающий за обработку события
push
, не вызывается при первой отправке Push-сообщения.
@serviceWorkerEvent('push')
public static async onPushEvent(context: Context, event: PushEvent) {
context.api.pushDelivered({
// Sending Analytics
}).catch(e => log.error('e'));
const notificationOptions: NotificationOptions = {
// Notification Options
};
const notifTitle = notificationData.title || '';
await (await context.serviceWorker.registration).showNotification(notifTitle, notificationOptions);
await context.workerMessenger.broadcast(WORKER_MESSAGE_TYPES.PUSH_RECEIVED, notificationData);
}
P.S. Используя функцию-оболочку, содержащую event.waitUntil()
, мы ждем разрешения обещаний внутри.