推送通知订阅

问题描述 投票:0回答:1

我正在开发一个网络应用程序(前端使用 React,后端使用 NestJS),并且实现了推送通知。 我在前端注册了一个 Service Worker,登录后,我向用户请求通知许可。一旦用户允许,就会创建以下类型的订阅:

{
   endpoint: string;
   keys: {
      p256dh: string;
      auth: string;
   }
}

然后我将此订阅发送到后端并将其与创建订阅的用户的 ID 一起存储在数据库中(允许通知)。当我想向该用户发送通知时,我从数据库中获取他们的所有订阅,并使用它们通过 web-push 库发送推送通知。

我的问题是 - 这个订阅指的是什么?设备、浏览器还是其他什么?我注意到当我以用户 A 的身份订阅并注销时,用户的订阅仍然处于活动状态,如果用户 B 使用相同的浏览器/设备登录,他们将永远不会收到 requestPermission 提示,并且会收到用户 A 的通知。

有没有办法处理这个问题,而无需在注销时取消订阅并在每次用户登录时请求许可?

push-notification notifications subscription web-push
1个回答
0
投票

我将引用 web.dev 文章中的一些有用信息:

“获得许可后,您的网站需要启动订阅用户推送通知的过程。这是通过 JavaScript 使用 Push API 完成的。您需要在订阅过程中提供公共身份验证密钥,您可以使用该密钥稍后您将了解更多信息。启动订阅过程后,浏览器会向称为推送服务的 Web 服务发出网络请求,您稍后还将了解更多信息。

假设订阅成功,浏览器返回一个PushSubscription对象。您需要长期存储这些数据。通常,这是通过将信息发送到您控制的服务器,然后让服务器将其存储在数据库中来完成的。

您的服务器实际上并不直接将推送消息发送到客户端。推送服务可以做到这一点。 推送服务是由用户的浏览器供应商控制的 Web 服务。当您想要向客户端发送推送通知时,您需要向推送服务发出 Web 服务请求。 您发送到推送服务的 Web 服务请求称为 Web 推送协议请求。”

因此,推送通知的订阅指的是浏览器。因此,使用同一浏览器的所有用户都将收到推送通知。接收推送通知不依赖于用户当前的认证状态,用户认证和推送通知订阅是完全独立的,确实不相关。

仅当浏览器自动过期用户的推送通知订阅或用户在某个时刻手动撤销权限时,才会再次显示RequestPermission 提示。一旦授予权限,就没有 JavaScript 方法/API 可以撤销该权限。只有用户可以撤销它。

© www.soinside.com 2019 - 2024. All rights reserved.