如何使用 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
发送推送通知。现在我无法向 abc123
和 def456
发送推送通知。
我什至尝试手动更新 Pushy 本地存储值,但这不起作用。
我有点困惑如何处理这种情况,以便只有当前登录的用户才能收到推送通知。
我需要使用范围吗?如果是,我如何使用范围。我需要更新 Service Worker 吗?如果是,我如何实现这一点,因为我认为 Push 处理服务工作者的注册。还有什么我想念的吗?
我是否应该在用户注销时取消注册 Service Worker,以便在用户登录时再次注册 Service Worker 并生成新的 Pushy 设备令牌?
迟到的答案,但总有一天有人会发现这很有用。
我们推荐的方法是:
当用户注销时,请始终从后端数据库中清除其关联的 Pushy 设备令牌。每当任何用户登录时,将他们最新的设备令牌发送到您的后端进行存储。此外,在存储这个设备令牌之前,检查是否有任何其他用户分配了这个 Pushy 设备令牌。如果是这样,请先从其他用户那里清除它。然后,仅为当前登录的用户关联此 Pushy 设备令牌。
完全公开 - 我在 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 登录时,会生成设备令牌 abc123
。在内部,我将针对用户 1 存储此设备令牌,并且我能够成功发送推送通知。如果用户 1 注销,而用户 1 登录,则不会注册新的设备令牌,因此我可以将设备令牌分配给用户 2。
如果我尝试清除 Pushy 的所有本地存储,则会生成一个新的设备令牌 def456
,我能够成功向 def456
发送推送通知,但也能够发送推送通知 abc123
.
如果我取消注册 service worker,然后尝试使用上面的代码注册 Pushy,则会生成一个新的设备令牌 ghi789
,并且我能够成功地向 ghi789
发送推送通知。现在我无法向 abc123
和 def456
发送推送通知。
我什至尝试手动更新 Pushy 本地存储值,但这不起作用。
我有点困惑如何处理这种情况,以便只有当前登录的用户才能收到推送通知。
我需要使用范围吗?如果是,我如何使用范围。我需要更新 Service Worker 吗?如果是,我如何实现这一点,因为我认为 Push 处理服务工作者的注册。还有什么我想念的吗?
我是否应该在用户注销时取消注册 Service Worker,以便在用户登录时再次注册 Service Worker 并生成新的 Pushy 设备令牌?
迟到的答案,但总有一天有人会发现这很有用。
我们推荐的方法是:
当用户注销时,请始终从后端数据库中清除其关联的 Pushy 设备令牌。每当任何用户登录时,将他们最新的设备令牌发送到您的后端进行存储。此外,在存储这个设备令牌之前,检查是否有任何其他用户分配了这个 Pushy 设备令牌。如果是这样,请先从其他用户那里清除它。然后,仅为当前登录的用户关联此 Pushy 设备令牌。
完全公开 - 我在 Pushy 工作。