退出后停止推送通知

时间:2019-06-15 04:55:40

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

我在用户swPush的项目中使用了angular。该通知工作正常,但即使在user1注销后仍获得推送通知。我不想将通知推送给已注销的用户。当user2登录到user1和user2都在同一设备上收到通知后,这会使用户感到困惑。我想限制用户仅在他们登录时才得到通知。我该如何做到这一点。有什么方法吗?

我已经尝试使用取消注册服务人员

navigator.serviceWorker.getRegistrations().then(function(registrations) {
            for(let registration of registrations) {
                registration.unregister()
            } 
 })

但是使用此功能后,两个用户都没有收到通知。

感谢和问候

1 个答案:

答案 0 :(得分:0)

您不应该取消注册Service Worker的注册,因为那样会取消所有的注册。取消注册Service Worker可以防止发生任何推送逻辑,因为Web推送是Service Worker之上的一层-您需要注册并激活Service Worker才能使用推送通知,对吗?

如果您只考虑“显示通知”,则有两种选择:

  1. 用户注销后,停止发送推送通知。当然,这意味着Web应用程序逻辑必须以某种方式通知您的服务器,现在注销事件已经发生,并且确切地是谁(该特定用户可能的不同浏览器会话中的哪一个)。当然,您的服务器应该已经具有有关注销事件的信息。
  2. 在浏览器中跟踪已登录用户(您的JS代码),仅显示与该用户相关的推送通知。您需要以某种方式区分推送通知的接收者和浏览器中的活动用户会话,最有可能在SW的MIT License中对其进行处理。

如果您考虑隐私/安全的观点,那么选项2当然是错误的。如果仅隐藏/不显示注销用户的通知,则意味着您仍在从服务器发送通知。通知可以包括私人信息等。

因此,您确实应该争取第一名。这是实现此目标的正确方法。它不会从登出的用户那里泄漏任何信息,使用户的推送订阅保持独立,并节省带宽。