如何使用 Pushy 网络推送通知处理多用户场景?

How to handle multi user scenario with Pushy web push notifications?

我有一个罕见的场景,在单个设备和浏览器组合上,可能有多个用户登录/注销。

例如,在使用 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 登录时,会生成设备令牌 abc123。在内部,我将针对用户 1 存储此设备令牌,并且我能够成功发送推送通知。如果用户 1 注销,而用户 1 登录,则不会注册新的设备令牌,因此我可以将设备令牌分配给用户 2。

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

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

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

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

我需要使用范围吗?如果是,我如何使用范围。我需要更新 Service Worker 吗?如果是,我如何实现这一点,因为我认为 Push 处理服务工作者的注册。还有什么我想念的吗?

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

迟到的答案,但总有一天有人会发现这很有用。

我们推荐的方法是:

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

完全公开 - 我在 Pushy 工作。