【发布时间】:2017-12-04 20:31:01
【问题描述】:
正在使用WebPush 和ServiceWorkers 解决围绕推送通知系统的一些用户体验注意事项。此外,这个系统应该优雅地处理共享同一浏览器的多个用户。
更具体地说,我有以下限制:
1) 用户不应看到不适合他们的通知。
2) 用户推送订阅的状态应该对其他用户不透明且不可更改。即我的推送订阅状态不应基于我自己以外的任何人的行为/行为。
满足第一个约束非常简单。我决定将当前登录的用户 ID 存储在 IndexedDB 中,并将预期用户的 ID 包含在推送有效负载中。如果这 2 个 id 匹配,那么只向用户显示推送通知就很简单了。
然而,满足约束 2 已被证明是非常难以捉摸的。到目前为止,我已经尝试过:
1) 用户和推送订阅之间的一对一映射。这是我尝试的第一件事,因为它给我的印象是最自然的映射。然而,这最终落空了,因为创建新的推送订阅将使前一个用户的订阅无效,从而要求原始用户在后续登录时创建另一个订阅,从而失败了第二个约束。
2) 共享推送订阅。这样做的好处是不会使推送订阅无效,因此原始用户的后续登录将按预期进行。但是,后续用户实际上都不需要向浏览器授予权限,因此第二个约束失败了。
3) 即使我能够使用上述 2 个选项之一,仍然没有什么可以阻止其他用户简单地转到浏览器设置并禁止通知,从而取消所有推送订阅。然而,我想这只是我必须忍受的事情,没有优雅的解决方案。
我确信已经有许多聪明的人致力于解决上述问题,所以我对上述约束 2 是如何得到有效满足的。
谢谢。
【问题讨论】: