javascript - 如何使用 Pushy Web 推送通知处理多用户场景?

标签 javascript push-notification service-worker web-push pushy

我遇到了一种罕见的情况,即在单个设备和浏览器组合上可能有多个用户登录/退出。

例如,在使用 Chrome 的家用笔记本电脑上,用户 1 可以登录并关闭浏览器(身份验证有超时,因此用户将在 n 分钟不活动后注销)或注销。然后用户 2 就可以登录。

我计划使用 Pushy 网络推送通知向用户发送推送通知,但我遇到了拦截器。

以下代码用于注册Pushy:

Pushy.register({ appId: 'app-id' }).then(function (deviceToken) {
    // Print device token to console
    console.log('Pushy device token: ' + deviceToken);

    // Send the token to your backend server via an HTTP GET request
    //fetch('https://your.api.hostname/register/device?token=' + deviceToken);

    // Succeeded, optionally do something to alert the user
}).catch(function (err) {
    // Handle registration errors
    console.error(err);
});

现在,当用户 1 登录时,会生成设备 token abc123。在内部,我将针对用户 1 存储此设备 token ,并且我能够成功发送推送通知。如果用户 1 注销,而用户 1 登录,则不会注册新的设备 token ,因此我可以将设备 token 分配给用户 2。

如果我尝试清除 Pushy 的所有本地存储,则会生成一个新的设备 token def456,并且我能够成功向 def456 发送推送通知,但也能够向 abc123 发送推送通知。

如果我取消注册 Service Worker,然后尝试使用上面的代码注册 Pushy,则会生成一个新的设备 token ghi789,并且我能够成功向 ghi789< 发送推送通知。现在我无法向 abc123def456 发送推送通知。

我什至尝试手动更新 Pushy 本地存储值,但这不起作用。

我有点困惑如何处理这种情况,以便只有当前登录的用户才会收到推送通知。

我需要使用作用域吗?如果是,我该如何使用范围。我需要更新 Service Worker 吗?如果是,我如何实现这一点,因为我认为 Push 处理服务 worker 的注册。我还缺少什么吗?

我是否应该在用户注销时取消注册 Service Worker,以便在用户登录时再次注册 Service Worker 并生成新的 Pushy 设备 token ?

最佳答案

答案很晚,但有一天可能会有人发现这很有用。

我们推荐的方法是:

当用户注销时,请始终从后端数据库中清除其关联的 Pushy 设备 token 。每当任何用户登录时,都会将其最新的设备 token 发送到您的后端进行存储。此外,在存储此设备 token 之前,请检查是否有任何其他用户分配有此 Pushy 设备 token 。如果是这样,请先从其他用户中清除它。然后,仅为当前登录的用户关联此 Pushy 设备 token 。

全面披露 - 我在 Pushy 工作。

关于javascript - 如何使用 Pushy Web 推送通知处理多用户场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53808910/

相关文章:

javascript - 如何使用 Youtube Iframe 播放器 API 更改全屏视频质量

javascript - 使用组合 API 共享 Prop

javascript - 如何通过JavaScript获取类的内容

java - 应用程序关闭时 FCM 推送通知不起作用 Android

安卓 : GCM Push Notification to particular device

typescript - 用 worker 构建一个 TypeScript 项目

javascript - 是否可以修改服务 worker 缓存响应 header ?

javascript - 如何注册 Service Worker?

javascript - ajax加载脚本不工作

android - 在后台和前台使用 Expo 更改推送通知中的角标(Badge)计数