因此,我跳上了服务人员的队伍并发布通知。看来效果很好,但是当用户在选项卡中处于活动状态(即,选项卡已聚焦)时,我无法弄清楚如何抑制浏览器显示的通知。即使用户正在使用该应用程序,显示通知也会使他们感到困扰->他们只是将其关闭->如果超过某个阈值,可能导致消息无法传递。
This document提到将配置添加到ngsw-config.json
,所以我确实放在了这里:
"push": {
"showNotifications": true,
"backgroundOnly": true
}
无论如何,总是显示消息。
我是否只需订阅消息,将其作为数据发送而不是notification
并手动显示?
constructor(swPush: SwPush) {
if (swPush.isEnabled) {
swPush.messages.subscribe(message => {
//display the message if tab is not active
});
}
}
如果我这样做,该功能是否可以在移动设备的后台运行?
编辑:这种确定代码是否显示消息的方法在Firefox中有效,但是在Chrome浏览器中,我得到'The site has been updated in the background'message。
坦率地说,我不知道如何前进,因为我不知道该如何在SwPush.messages中做什么。 :(
答案 0 :(得分:0)
我知道这已经被问了一段时间了,以防万一它可以帮助别人。
如何手动处理它。 实施焦点和模糊事件。您还可以包括“ beforeunload”事件侦听器,以捕获应用程序从“焦点”变为“关闭”的情况。
如果您使用上述事件捕获isActive状态,然后确保仅在isActive为false时发送通知。
@HostListener('window:focus')
onFocus() {
isActive = true;
}
@HostListener('window:blur')
onBlur() {
isActive = false;
}
// Before window is closed
@HostListener('window:beforeunload')
beforeunloadHandler() {
isActive = false;
}