阻止在应用程序处于活动状态(不在后台)时显示推送通知

时间:2018-08-01 00:39:03

标签: angular push-notification service-worker progressive-web-apps

因此,我跳上了服务人员的队伍并发布通知。看来效果很好,但是当用户在选项卡中处于活动状态(即,选项卡已聚焦)时,我无法弄清楚如何抑制浏览器显示的通知。即使用户正在使用该应用程序,显示通知也会使他们感到困扰->他们只是将其关闭->如果超过某个阈值,可能导致消息无法传递。

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中做什么。 :(

1 个答案:

答案 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;
  }
相关问题