从通过服务工作者创建的数据库中删除过期的推送订阅端点

Posted

技术标签:

【中文标题】从通过服务工作者创建的数据库中删除过期的推送订阅端点【英文标题】:Deleting expired push subscription endpoints from db which is created via service worker 【发布时间】:2017-08-14 11:06:25 【问题描述】:

我使用 service worker 实现了推送通知。我将端点存储在我的数据库中。当前订阅更改/到期时,如何从 db 中删除旧订阅条目。 “pushsubscriptionchange”事件我正在服务工作者中监听。但是,当我在 chrome 设置中将通知订阅更改为“始终在此站点上阻止”时,它不会被触发。有什么帮助吗?

【问题讨论】:

【参考方案1】:

我认为通过站点设置撤销通知权限不会触发服务人员的pushsubscriptionchange 事件。

相反,我认为您可以从您的客户页面检测到对 registration.pushManager.subscribe() 方法的拒绝。对于subscribe(),按照the specification 的第9 步,

如果未授予,则使用名称为的 DOMException 拒绝承诺 “NotAllowedError”并终止这些步骤。

所以我认为这就是你最终能够在你描述的场景中检测到的。

至于在那种情况下要清理哪些订阅端点,我想说你应该清理所有这些端点?用户已选择不接收通知,因此我认为未来不会使用任何现有端点。

【讨论】:

以上是关于从通过服务工作者创建的数据库中删除过期的推送订阅端点的主要内容,如果未能解决你的问题,请参考以下文章

apn 证书已过期,推送通知不再起作用

EWS 通过SubscribeToPullNotifications订阅Exchange新邮件提醒

谷歌浏览器推送通知

InApp订阅已过期,如何检查服务器端

如何从 React Native Expo 推送通知中取消订阅(删除监听器)

仅在调试服务工作程序时才会显示推送通知