#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.
});