К сожалению, вы не сможете открыть свой PWA с помощью углового кода. Интерфейс SwPush будет прекрасно работать, если приложение открыто в данный момент.
Если ваше приложение закрыто, будет работать только ваш обслуживающий работник (при условии, что он был успешно зарегистрирован). Таким образом, решение вашей проблемы - редактирование рабочего файла angular.
В angular 7 (в частности, "@ angular / service-worker" v ~ 7.2.0), после того как вы создадите приложение с помощью ng build --prod
, проверьте папку /dist
и найдите файл ngsw-worker.js
. Откройте его в редакторе.
В строке 1885 вы найдете:
this.scope.addEventListener('notificationclick', (event) => this.onClick(event));
Измените его на:
this.scope.addEventListener('notificationclick', (event) => {
event.notification.close();
if (clients.openWindow && event.notification.data.url) {
event.waitUntil(clients.openWindow(event.notification.data.url));
}
});
Это означает, что вы передали в полезную нагрузку уведомления объект данных с нужным URL-адресом. например:
{
title: "Hello",
body: "Here, open this URL",
data: {
url : "/somewhere/over/the/rainbow/42"
}
}
Что нужно иметь в виду:
- Если у вас есть какие-либо конвейеры автоматической сборки (CD), вам придется изменить ваш ngsw-worker.js вручную (но вам удастся развернуть файл рабочего сервиса после завершения
ng build --prod
процесса);
- Каждый раз, когда вы собираете prod, ngsw-worker.js будет перезаписываться.
- Я знаю, что вы разрабатываете на Android, но если у вас возникли проблемы с отображением изменений, вы можете использовать инструменты Chrome Dev для [A] принудительного обновления работника сервиса или [B] , чтобы открыть текущий файл ngsw-worker.js и убедиться, что это нужная версия. Решение работает и для установленных приложений на вашем рабочем столе.
Ссылки по теме:
Как запустить PWA (прогрессивное веб-приложение), открытое нажатием на push-уведомление?
https://github.com/angular/angular/issues/20956