@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?
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Admon Новосибирск
от 50 000 до 70 000 руб.
Энергомера Ставрополь
от 28 000 до 30 000 руб.
18 дек. 2018, в 20:42
5000 руб./за проект
18 дек. 2018, в 20:34
5000 руб./за проект
18 дек. 2018, в 20:01
10000 руб./за проект