После долгой борьбы я нашел что-то и поделюсь этим для других:
Копание в ngsw-worker.js, который создается при запуске build --prod, есть эта функция:
onPush(msg) {
// Push notifications without data have no effect.
if (!msg.data) {
return;
}
// Handle the push and keep the SW alive until it's handled.
msg.waitUntil(this.handlePush(msg.data.json()));
}
...
handlePush(data) {
return __awaiter$5(this, void 0, void 0, function* () {
yield this.broadcast({
type: 'PUSH',
data,
});
if (!data.notification || !data.notification.title) {
return;
}
const desc = data.notification;
let options = {};
NOTIFICATION_OPTION_NAMES.filter(name => desc.hasOwnProperty(name))
.forEach(name => options[name] = desc[name]);
yield this.scope.registration.showNotification(desc['title'], options);
});
}
Поскольку это выглядит как угловая подписка и показывает уведомление для вас, нет необходимости подписываться и показывать его в своем собственном коде.
У меня была проблема с отправляющей библиотекой (https://github.com/laravel-notification-channels/webpush), которая отправляла полезную нагрузку следующим образом:
payload = {"title":"test","actions":[{"title":"View App","action":"view_app"}],"body":"test","icon":"\/icon.png","data":{"id":"21a3804e-6d71-4a56-b513-535709c37c0f"}}
но angular ожидает что-то вроде:
payload = {
"notification":{"title":"test","actions":[{"title":"View App","action":"view_app"}],"body":"test","icon":"\/icon.png","data":{"id":"21a3804e-6d71-4a56-b513-535709c37c0f"}}
}
, что привело к сбою этой строки в ngsw-worker.js:
if (!data.notification || !data.notification.title) {
return;
}
Таким образом, уведомление не отображалось, но браузер сообщил об обновлении в фоновом режиме.
Надеюсь, это кому-нибудь поможет.