Обработчик кликов у работника службы сообщений 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.

у меня это сработало.

Другие вопросы по тегам