PWA Web Push Notification проблема с действием при нажатии
-> возникает на телефонах Android, если вы устанавливаете PWA через функцию A2HS вChrome
Что здесь происходит: Если приходит уведомление и пользователь нажимает кнопку действия, запускается событие, указанное ниже, и пытается либо открыть новый клиент с заданным маршрутом, либоподключите существующий клиент и перейдите к данному маршруту
Проблема: Проблема здесь возникает только с установленным PWA, если вы обычно запускаете PWA и затем отправляете его в фоновом режиме наТелефон на Андроиде.Теперь это происходит, когда приходит push-уведомление, и пользователь нажимает на кнопку действия, открывается PWA, и вы видите замороженный экран PWA.Если вы обновляете вручную, проводя сверху вниз, он корректно перезагружается и даже перемещается по заданному маршруту.
Это происходит только на телефонах Android.При тестировании на клиенте Windows с использованием последней версии Chrome с установленным PWA таких проблем не было.
Вот соответствующая часть моего кода, которую я использую в своем сервисном работнике:
// Service Worker Event when a Native Web Push Notification is clicked
self.addEventListener('notificationclick', function(event) {
if (!event.action) return;
var eventData = event.notification.data;
// Some paths for my Vue app, this event gets an extra payload of what type it is
// and then opens the PWA with the matching route
const views = {
auftragsdaten: '/auftraege/eigene',
materialanforderungen: '/warenwirtschaft/materialanforderungen',
systemnachrichten: '/nachrichten',
};
var viewNav = '/';
switch (event.action) {
case 'detail-action':
event.notification.close();
// if there is an extra payload with the route to use, set it accordingly
if (eventData.hasOwnProperty('extra') && Array.isArray(eventData.extra)) {
let lastIndex = eventData.extra.length - 1;
viewNav = views[eventData.extra[lastIndex]];
}
// check for open PWA/Browser clients
event.waitUntil(
clients.matchAll({ type: 'window', includeUncontrolled: true }).then(async function(clientList) {
if (clientList.length > 0) {
let client = clientList[0];
// check for any existing and focussed client
for (let i = 0; i < clientList.length; i++) {
if (clientList[i].focused) {
client = clientList[i];
}
}
// focus found client and then navigate to the given route
let clientFocus = await client.focus();
let clientNavigate = await clientFocus.navigate(viewNav);
return clientNavigate;
}
// if no existing client is found, open a new window OR if the PWA is installed the PWA
return clients.openWindow(viewNav);
})
);
break;
default:
console.log(`Unknown action clicked: '${event.action}'`);
break;
}
});
Честно говоря, я не имею ни малейшего представления, что может вызвать такое поведение.Или в моем коде что-то не так, или я как-то наткнулся на ошибку?
В любом случае, я был бы благодарен за любые идеи и помощь в этом вопросе!