Как получить данные уведомления от Click, когда PWA закрыт? - PullRequest
0 голосов
/ 02 ноября 2018

У меня в Progressive Web App (PWA) отлично работают уведомления на рабочем столе. С открытым PWA, когда я щелкаю уведомление, я могу получить свойство данных уведомления. Когда PWA закрывается, когда я щелкаю уведомление, PWA открывается, НО мой обработчик onclick никогда не выполняется, и я не вижу способа получить данные из уведомления при запуске веб-приложения.

Как я могу получить свойство данных уведомлений, когда PWA в данный момент не работает?

При получении двух уведомлений от моего PWA я хочу знать, какой из PWA был нажат, когда мой PWA закрыт. Глядя на API уведомлений , я не вижу способа проверить запуск моего веб-приложения.

Вот мой код:

if ('Notification' in window) {
    const options = {
        icon: 'https://i.imgur.com/l8qOen5.png',
        image: 'https://i.imgur.com/l8qOen5.png',
        requireInteraction: true,
    };

    if (Notification.permission === 'granted') {
        const desktopNotification = new Notification('My Title', {
            ...options,
            body: 'My body text',
            data: 'A string I want to receive when PWA is opened',
            tag: 'A unique identifier',
        });

        desktopNotification.onclick = (e) => {
            // Not received when PWA is closed and then opened on click of notification
            const data = e.currentTarget.data || {};
            console.log('desktopNotification clicked!', e, data);
        };
    }
}

Спасибо, любезно

1 Ответ

0 голосов
/ 03 ноября 2018

Прежде всего, вам нужно запустить Service Worker, даже если ваше приложение PWA закрыто. Если вы не знакомы с Service Worker API, посмотрите хороший пример здесь Введение в push-уведомления Технически говоря и отвечая на ваш вопрос, вам необходимо подписаться на notificationclick событие INSIDE Service Worker (есть также несколько других событий, например, notificationclose)

Вот краткий пример того, что нужно иметь внутри serviceworker.js:

self.addEventListener('notificationclick', function(e) {
  var notification = e.notification;
  var primaryKey = notification.data.primaryKey;
  var action = e.action;

  if (action === 'close') {
    notification.close();
  } else {
    clients.openWindow('http://www.example.com');
    notification.close();
  }
});
...