此外,似乎当用户登出时,所有推送订阅都会被删除。因此,如果用户在多个设备(手机、浏览器、平板)上登录,并从其中一个设备/会话登出,由于推送订阅被删除,其他设备将无法收到通知。
我提到这一点是因为这与了解在续订期间需要替换哪个订阅,以及在登出时应删除哪个订阅有关。
此外,似乎当用户登出时,所有推送订阅都会被删除。因此,如果用户在多个设备(手机、浏览器、平板)上登录,并从其中一个设备/会话登出,由于推送订阅被删除,其他设备将无法收到通知。
我提到这一点是因为这与了解在续订期间需要替换哪个订阅,以及在登出时应删除哪个订阅有关。
嗯,我今天刚被 Meta 登出,登录后就收到了你发布的推送通知……除非这仅发生在用户主动登录的代码路径上🤔
当用户返回论坛(或登录)时,浏览器的推送订阅会被重新发送并重新创建。但如果您已登出,这些订阅会被删除,直到该用户从该设备访问论坛之前,不会收到任何推送通知。
这与您所说的并不矛盾,因为您似乎表示在登录后收到了推送通知。
代码参考:
哦,这完全符合我的推测
发现得很棒!我们肯定要修复这个问题!
问题在于,目前我们并未存储某个特定订阅是关联到哪个设备的…
Push API 确实提供了一个 unsubscribe 函数来使推送订阅失效:
在注销时,我们可以在客户端调用此函数,这样服务器端会将该订阅标记为无效,而不会影响其他订阅。
事实上,客户端在“实时通知”偏好设置中已经有一个 unsubscribePushNotification 函数可以执行此操作。或许解决方案是在注销时,如果启用了实时通知,就在客户端调用该函数。从良好实践的角度来看,撤销客户端的订阅密钥比仅在服务器端删除它们更为妥当。
因此,修复可以分为两部分:
此主题已在 4 天后自动关闭,不再允许新回复。