真的有必要在每次页面加载时更新订阅吗?

Spo*_*nts 4 push-notification web-push push-api

我目前正在开发一个网络应用程序,该应用程序将允许用户订阅推送通知。我们将把订阅存储在根据用户 ID 映射的数据库表中,当需要发送通知时,我们将查找用户的订阅并发送通知。

我一直在遵循本指南: https://developers.google.com/web/fundamentals/codelabs/push-notifications/

一切都很顺利,但有些事情就是感觉不太“正确”。

在每次页面加载时,服务工作线程都会被注册,然后检查它们是否已经订阅,然后即使它们是,它也会调用包含updateSubscriptionOnServer()以下注释的内容:

// TODO: Send subscription to application server
Run Code Online (Sandbox Code Playgroud)

这实际上意味着每个页面加载都将尝试将相同的订阅写回数据库。显然我们会在应用程序中处理这个问题,但这似乎并不理想。

对于 Web Push API,这是预期的方法吗?

非常感谢

col*_*rco 5

是的,在每次页面加载时将订阅发送到服务器可能很有用:

  1. 用户可能已在浏览器设置中将权限从 更改blocked为granted(或默认),因此您想要创建订阅并将其发送到服务器
  2. 订阅端点可能会因不同原因发生变化,因此需要确保当前端点发送到服务器(之前的端点将返回410 Gone)

上述几点和性能之间的折衷可以是仅在给定页面(例如主页)上将订阅发送到服务器。

  • 另一个折衷方案可能是每个会话执行一次(在将订阅发送到服务器时设置会话 cookie,并且除非 cookie 不存在,否则不再发送)。 (2认同)