Установленный PWA зависает при открытии из Web Push Notification на Android - PullRequest
0 голосов
/ 29 марта 2019

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

Честно говоря, я не имею ни малейшего представления, что может вызвать такое поведение.Или в моем коде что-то не так, или я как-то наткнулся на ошибку?
В любом случае, я был бы благодарен за любые идеи и помощь в этом вопросе!

...