FCM: не удается щелкнуть уведомление

#firebase #push-notification #firebase-cloud-messaging #service-worker #web-push

#firebase #push-уведомление #firebase-облако-обмен сообщениями #service-worker #веб-push

Вопрос:

Я использую недавно выпущенную поддержку сообщений FCM для push-уведомлений в Chrome. Когда мое приложение работает в фоновом режиме, я получаю уведомление, но при нажатии на уведомление ничего не происходит. Как мне указать URL, который должен открываться, когда пользователь нажимает на уведомление? (Я понимаю, как это делается с использованием концепции pure service worker с использованием события notificationclick, я хочу знать, как это сделать с помощью обмена сообщениями FCM.)

 messaging.setBackgroundMessageHandler(function(payload) {
  var data = payload || {};
  var shinyData = decoder.run(data);

  console.log('[firebase-messaging-sw.js] Received background message ', shinyData);

  return self.registration.showNotification(shinyData.title, {
    body: shinyData.body,
    icon: shinyData.icon
  })
});
  

Чего я здесь не понимаю?

Ответ №1:

click_action не является одним из возможных параметров функции showNotification.

Для обработки щелчка по уведомлению определите обработчик событий notificationclick.

Например:

 self.addEventListener('notificationclick', function(event) {
  event.notification.close();
  event.waitUntil(self.clients.openWindow(YOUR_URL_HERE));
});
  

Комментарии:

1. Я обновил свой вопрос, чтобы сделать его более понятным. Я понимаю, как это сделать, используя событие notificationClick, но я не знаю, как это сделать, используя библиотеку обмена сообщениями firebase. Извините за путаницу.

2. Я борюсь с этим ответом… что означает «self» в этом контексте? Это уведомление, регистрация работника службы или какой-либо другой объект целиком?

3. Чтобы ответить на мой предыдущий комментарий, self.addEventListener следует использовать скрипт, который вы предоставляете при регистрации service worker. Причина, по которой у меня это не работало, заключалась в том, что мой скрипт кэшировался. Мне нужно было отменить регистрацию моего service worker, убедиться, что скрипт больше не кэшировался, а затем повторно зарегистрировать service worker.

Ответ №2:

Ответ Марко правильный.

Библиотека обмена сообщениями Firebase представляет собой оболочку поверх Web Push API.

notification: { click_action: 'https://...' } Полезная нагрузка покажет уведомление и обработает щелчок за вас. Чтобы добиться того же с полезной нагрузкой данных, вы должны реализовать notificationclick прослушиватель событий (как предложил Марко).

 self.addEventListener('notificationclick', function(event) {
  event.notification.close();

  ... Do your stuff here.
});
  

Вы также можете сделать то же самое с notificationclose событием:

 self.addEventListener('notificationclose', function(event) {
  ... Do your stuff here.
});