410 推送订阅已取消订阅或已过期

jiv*_*sen 3 web-push

我们的网络推送通知工作正常,但最近我们注意到端点将在不到一天的时间内过期,当我们最初尝试发送通知时,一切进展顺利,但后来它停止发送,当我们检查时,我们发现它是给出状态码 410

消息是

410 推送订阅已取消订阅或已过期

我们搜索了谷歌,发现了几个链接,上面说我们需要在每次链接过期时通过发送旧的和新的令牌来重新订阅,并将其保存在数据库中,但问题是我们有大量的订阅者,对每个订阅者都这样做是站不住脚的。最重要的是,人们不会一次又一次地打开网站,如果只有当客户再次打开网站时才能实现重新订阅,那么许多端点将会消失,因为除了少数非常受欢迎的网站之外,人们很少一次又一次地返回网站。

那么有什么方法可以通过服务器端的 php 交换旧端点来更新新端点,而不依赖于客户端呢?

他们已经订阅了我们的端点,但已过期。

或者我们是否可以首先延长生成的端点的到期时间?

col*_*rco 6

您必须在 Service Worker 中监听pushsubscriptionchange,否则一段时间后您将失去所有订阅者:订阅有一个持续时间,然后会自动替换。

您可以在这里查看定义的真实示例pushsubscriptionchange

https://pushpad.xyz/service-worker.js

然后在服务器上,您需要用新端点替换旧端点。

  • @jivasen `pushsubscriptionchange` 在 Chrome 中正常工作:[来源](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/pushsubscriptionchange_event#browser_compatibility)。我还可以从我们的日志中看到,我们收到了来自 Chrome 的数千个针对该事件的请求。 (2认同)
  • @SteMa这是由于历史原因......旧版本的Chrome不支持通知的有效负载(内容),因此您只收到推送信号,然后必须从应用程序服务器获取通知内容。当前版本支持通知有效负载,因此您可以对“push”事件使用更简单的处理程序并简单地显示通知。 (2认同)