gpt4 book ai didi

javascript - 如何正确取消注册由 firebase 消息传递安装的服务 worker

转载 作者:行者123 更新时间:2023-12-03 11:21:47 24 4
gpt4 key购买 nike

我正在尝试实现一个切换以使用 Firebase 消息在 Web 应用程序中打开/关闭通知。我的通知工作正常,但是当用户尝试关闭通知时出现问题。如果我只是通过以下方式取消注册服务人员:

navigator.serviceWorker.getRegistrations().then((r) => {
return Promise.all(r.map(reg => reg.unregister()));
});

那么工作人员确实没有注册,但如果用户尝试重新打开通知,Firebase 将抛出此错误:
messaging/no-sw-in-reg

该错误是有道理的,但似乎没有任何内置方法可以为不再需要它的用户取消注册 Firebase。当/如果用户再次要求通知时,您是否应该删除 firebase 应用程序并重新初始化它?

我意识到我可以删除 firebase token 并忘记我数据库中的用户,但我不想留下一个永远不会再被调用的无用服务 worker 。

让用户在您的网络应用程序中完全禁用 Firebase 通知的正确方法是什么?

最佳答案

我有完全相同的问题。所以我使用你的代码来摆脱服务 worker ,然后我重新启动消息传递对象,这样你就可以取消订阅并再次安装服务 worker 而无需重新加载页面。

我发现发生了这个问题(至少在我的代码中),因为消息传递对象缓存了设备 token ,所以它不会触发应该在获取设备 token 时触发的事件。
因此,当您不想重新加载页面时,重新启动消息传递对象是一个可行的选择。清理消息传递对象缓存将是一个更好的解决方案。

示例代码:

navigator.serviceWorker.getRegistrations().then((r) => {
return Promise.all(r.map(reg => reg.unregister()));
});
this.messaging = firebase.messaging();

愿源与你同在。

关于javascript - 如何正确取消注册由 firebase 消息传递安装的服务 worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42976719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com