angular - Angular ServiceWorker 推送通知不起作用
问题描述
我正在处理网络推送消息。我有一个推送消息的小型服务器。这是可行的,但在 Chrome 中,我只收到“此站点已在后台更新”的消息。那是我的 Angular 代码:
ngOnInit(): void {
if (this.swUpdate.isEnabled) {
this.swUpdate.available.subscribe(() => {
if (confirm('Es steht ein Update bereit. Soll dies geladen werden?')) {
window.location.reload();
}
});
}
if (this.swPush.isEnabled) {
this.swPush.requestSubscription({
serverPublicKey: this.VAPID_PUBLIC_KEY
})
.then(sub => this.notificationService.addPushSubscriber(sub).subscribe(x => console.log(x)))
.catch(err => console.error('Could not subscribe to notifications', err));
}
}
如果我将这两个函数添加到 ngsw-worker.js 中,一切都很好。现在我得到了正确的信息。如果没有这些更改,我在 Firefox 中不会收到任何消息。
self.addEventListener('push', function(event) {
if (!(self.Notification && self.Notification.permission === 'granted')) {
return;
}
var data = {};
if (event.data) {
data = event.data.json();
}
var title = data.title;
var message = data.message;
var icon = "img/FM_logo_2013.png";
self.clickTarget = data.clickTarget;
event.waitUntil(self.registration.showNotification(title, {
body: message,
tag: 'push-demo',
icon: icon,
badge: icon
}));
});
self.addEventListener('notificationclick', function(event) {
console.log('[Service Worker] Notification click Received.');
event.notification.close();
if(clients.openWindow){
event.waitUntil(clients.openWindow(self.clickTarget));
}
});
解决方案
推荐阅读
- ios - PhotoData 中的视频无法播放
- python - 匹配并行数据框中的多索引
- android - 滚动外部 recyclerview 以显示内部 recyclerview + 部分标题
- python - 如何找到特定范围内的所有整数集?
- class - 为什么可以修改 Raku 类的只读数组属性?
- c# - 如何使用 ASP.NET Core / Razor 在页面加载时从服务器返回物理文件?
- javascript - 调用 js 文件在 ASP.NET MVC 上不起作用
- typescript - 为什么 Typescript“无法重新声明块范围的变量”?
- r - R Plotly多线时间序列图
- firebase - Firebase - 在不指定 UID 或电子邮件地址的情况下获取用户帐户