【问题标题】:410 push subscription has unsubscribed or expired410 推送订阅已退订或过期
【发布时间】:2021-04-22 11:00:05
【问题描述】:

我们的网络推送通知运行良好,但最近我们注意到端点将在不到一天的时间内到期,当我们尝试发送通知时它最初运行良好,但后来它停止发送,当我们检查时发现它给出的状态码是 410

消息是

410 推送订阅已退订或过期

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

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

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

或者我们是否可以在第一时间延长生成的端点的有效期?

【问题讨论】:

    标签: php push-notification push web-push


    【解决方案1】:

    你必须在 service worker 中监听pushsubscriptionchange,否则一段时间后你会失去所有的订阅者:订阅有一个持续时间,然后会被自动替换。

    您可以在此处查看pushsubscriptionchange 定义的真实示例:

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

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

    【讨论】:

    • 我看过你的其他答案,我非常怀疑这种方法的有效性,因为最终用户很可能没有打开笔记本电脑或计算机,在这种情况下,所有订阅都将过期,所以必须以某种方式我们可以在服务器端更新
    • @jivasen pushsubscriptionchange 事件是由用户浏览器触发的......所以设备在那一刻总是打开的。如果您不相信我,请阅读the standard
    • 因为这还没有在 chrome 中实现,所以我们没有办法依赖它。全球 80% 的人都在使用 chrome
    • @jivasen pushsubscriptionchange 在 Chrome 中正常工作:source。我还可以从我们的日志中看到,我们收到了来自 Chrome 的数千个针对该事件的请求。
    • @SteMa 这是历史原因...旧版本的 Chrome 不支持通知的有效负载(内容),因此您只收到推送信号,然后您必须获取通知的内容从应用服务器。当前版本支持通知负载,因此您可以对push 事件使用更简单的处理程序并简单地显示通知。
    猜你喜欢
    • 2019-10-15
    • 2015-03-17
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 2016-07-06
    • 2021-12-05
    相关资源
    最近更新 更多