@arab789

Как избавится от двойного пуша?

На сайте используются уведомления с firebase. Когда pwa-приложение на телефоне в foreground, все нормально, приходят пуши, но если в background то прилетает их сразу два. Как выяснилось это связано с обработкой событий в сервис-воркере:
// firebase-messaging-sw.js
importScripts('https://www.gstatic.com/firebasejs/3.6.8/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/3.6.8/firebase-messaging.js');

firebase.initializeApp({
    messagingSenderId: 'ххххххххххххх'
});

const messaging = firebase.messaging();

messaging.setBackgroundMessageHandler(function(payload) {
    // return self.registration.hideNotification();
});

self.addEventListener('push', event => {
    let payload = event.data.json();
let options = payload.notification;
options.data = {};
options.data.url = options.click_action;
let title = options.title;
event.waitUntil(Promise.all([self.registration.showNotification(title, options)]));
});

При background срабатывает и push и setBackgroundMessageHandler. Как их разветвить я не понял..
Если отключить библиотеки firebase, то push событие работает в background и foreground, но если телефон долго не трогать, то пуш не приходит и прийдет есть телефон разблокировать.
Решил вернуть firebase и убрать обработчик push, как следствие перестали приходить пуши в foreground. Написал в теле страницы:
messaging.onMessage(function(payload) {
...............
});

чтобы принимать пуш и показывать. Все хорошо, принимает, показывает, но на телефоне перестал обрабатываться notificationclick. Если пуш приходит background , то все ок и клик обработать можно.
Как правильно принять пуш на десктопе и телефоне в background и foreground?
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы