Служба сервиса уведомляет о том, что событие щелчка не фокусирует или не открывает мой веб-сайт во вкладке - PullRequest
0 голосов
/ 03 декабря 2018

Я использую push-уведомление FCM на своем веб-сайте и хочу, чтобы пользователь мог зайти на мой сайт, когда он или она нажмет на push-уведомление.Обратите внимание, что пользователь может находиться в другом приложении или на другой вкладке браузера, и я хочу, чтобы, когда пользователь получал уведомление fcm, пользователь мог зайти на мой сайт, щелкнув уведомление в браузере Firefox.По этой причине я использовал событие messagesclick, которая доступна в сервисном сервисе.Код, который я использовал, выглядит так:

self.addEventListener('notificationclick', event => {
  console.log('On notification click: ', event.notification.tag);
  event.notification.close();

  // This looks to see if the current is already open and
  // focuses if it is
  event.waitUntil(
    clients
      .matchAll({
        type: 'window'
      })
      .then(clientList => {
        for (let i = 0; i < clientList.length; i++) {
          const client = clientList[i];
          if (client.url === '/' && 'focus' in client) return client.focus();
        }
        if (clients.openWindow) return clients.openWindow('/');
      })
  );
});

Он не открывается и не фокусируется на вкладке моего сайта.Для отладки кода я напечатал переменную clientList, и это массив нулевой длины.

Ошибка, которую я получаю в браузере, это

On notification click: 
InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable firebase-messaging-sw.js:92

Вышеприведенная ошибка относится к этой строкекода:

event.waitUntil(

ОС: Mac Firefox: 63.0.3 Реагирует: 16.2.0

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Переместите обработчик notificationclick ДО строки кода с помощью messaging = firebase.messaging();.FCM JS SDK устанавливает собственный глобальный обработчик notificationclick, а его вызов e.waitUntil() удаётся (как-то) сломать объект события Firefox.Если вы сначала установите глобальный обработчик, то сначала он будет вызван, и он действительно будет работать.Тем не менее, это, вероятно, нарушит работу обработчика FCM.

Это, IMO, ошибка в самом Firefox в отношении сервисных работников, а не FCM, но FCM, безусловно, усугубляет проблему.

Относительно:

https://github.com/firebase/quickstart-js/issues/282 (та же ошибка FCM)

https://bugzilla.mozilla.org/show_bug.cgi?id=1468935 (та же ошибка FCM + Firefox, плохое исправление)

https://bugzilla.mozilla.org/show_bug.cgi?id=1313096 (команда разработчиков Firefox не имеет возможности проверить обратный вызов в своем наборе тестов Service Worker, что делает эту часть Firefox готовой к ошибкам) ​​

https://bugzilla.mozilla.org/show_bug.cgi?id=1489800(та же ошибка браузера, другой продукт)

0 голосов
/ 21 декабря 2018

Если целью является открытие определенного URL-адреса при нажатии на уведомление, возможно, существует более простой способ.Вы можете отправить поле "click_action" в полезной нагрузке уведомления FCM.

Ваша полезная нагрузка будет выглядеть примерно так:

  "notification" : {
    "body" : "Sample body",
    "title" : "Sample title",
    "click_action": "http://google.com"
  }

А при нажатии на уведомление,в этом примере откроется google.com.

...