不要注销时移除所有推送订阅

此外,似乎当用户登出时,所有推送订阅都会被删除。因此,如果用户在多个设备(手机、浏览器、平板)上登录,并从其中一个设备/会话登出,由于推送订阅被删除,其他设备将无法收到通知。

我提到这一点是因为这与了解在续订期间需要替换哪个订阅,以及在登出时应删除哪个订阅有关。

6 个赞

嗯,我今天刚被 Meta 登出,登录后就收到了你发布的推送通知……除非这仅发生在用户主动登录的代码路径上🤔

6 个赞

当用户返回论坛(或登录)时,浏览器的推送订阅会被重新发送并重新创建。但如果您已登出,这些订阅会被删除,直到该用户从该设备访问论坛之前,不会收到任何推送通知。

这与您所说的并不矛盾,因为您似乎表示在登录后收到了推送通知。

代码参考:

6 个赞

哦,这完全符合我的推测

发现得很棒!我们肯定要修复这个问题!

问题在于,目前我们并未存储某个特定订阅是关联到哪个设备的…

8 个赞

Push API 确实提供了一个 unsubscribe 函数来使推送订阅失效:

在注销时,我们可以在客户端调用此函数,这样服务器端会将该订阅标记为无效,而不会影响其他订阅。

事实上,客户端在“实时通知”偏好设置中已经有一个 unsubscribePushNotification 函数可以执行此操作。或许解决方案是在注销时,如果启用了实时通知,就在客户端调用该函数。从良好实践的角度来看,撤销客户端的订阅密钥比仅在服务器端删除它们更为妥当。

2 个赞

因此,修复可以分为两部分:

  1. 删除服务器端的清理代码
  2. 添加新代码以在客户端取消订阅。
5 个赞

已完成

https://meta.discourse.org/t/ios-android-push-notifications-on-self-hosted-discourse-docker/394149/18?u=falco

1 个赞

此主题已在 4 天后自动关闭,不再允许新回复。