Обработчик кликов у работника службы сообщений Firebase не работает
Я использую FCM для обработки push-уведомлений, но приходит уведомление data
ключ вместо notification
,
Вот код, который я использую для обработки нового сообщения и отображения в качестве уведомления. Я вижу уведомление со всеми параметрами и данными, как я указал. Тем не менее, когда я нажимаю уведомление, оно не запускает событие "messagesclick". Это также не печатает event.notification
,
importScripts('https://www.gstatic.com/firebasejs/5.3.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/5.3.1/firebase-messaging.js');
firebase.initializeApp({
messagingSenderId: "SOME_ID",
});
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(payload => {
console.log(payload);
const options = {
body: payload.data.body,
icon: payload.data.icon,
click_action: payload.data.click_action,
link: payload.data.link,
data: {
time: new Date(Date.now()).toString(),
click_action: payload.data.click_action,
},
};
self.registration.showNotification(payload.data.title, options);
});
self.addEventListener("notificationclick", function(event) {
console.log(event.notification);
const clickedNotification = event.notification;
clickedNotification.close();
const urlToOpen = clickedNotification.data && clickedNotification.data.click_action;
const promiseChain = clients.matchAll({
type: 'window',
includeUncontrolled: true,
})
.then((windowClients) => {
let matchingClient = null;
for (let i = 0; i < windowClients.length; i++) {
const windowClient = windowClients[i];
if (windowClient.url === urlToOpen) {
matchingClient = windowClient;
break;
}
}
if (matchingClient) {
return matchingClient.focus();
} else {
return clients.openWindow(urlToOpen);
}
});
event.waitUntil(promiseChain);
});
2 ответа
Переместите прослушиватель событий NotificationClick сверху перед кодом Firebase, это должно работать.
1, вы можете проверить с помощью файла firebase-messaging-sw.js в приложении, есть ли последние изменения в этом файле после сборки.
2 нам нужны только самые последние изменения в firebase-messaging-sw.js, поэтому необходимо проверить и последний обновленный файл firebase-messaging-sw.js и отменить регистрацию всех старых firebase-messaging-sw.js.
у меня это сработало.