微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当 firebase 配置发生变化时更新 firebase 消息服务工作者

如何解决当 firebase 配置发生变化时更新 firebase 消息服务工作者

我在 React 项目中使用 firebase 接收推送通知

有什么办法可以维护多个版本的 firebase-messaging-sw.js 或者只是从 React (javascript) 代码更新浏览器服务工作线程?

似乎一切正常。我真正需要的是,当我在 firebase-messaging-sw.js 中进行更改时,必须在前端用户的浏览器中更新 Service Worker。

对此的任何帮助将不胜感激。谢谢。

解决方法

所以问题是,您需要先销毁/取消注册旧的 Service Worker,然后才能注册新的 Service Worker(或强制更新新版本)。您可以通过进入检查模式,选择 Service Worker 选项卡并单击“重新加载时更新”,在本地 Chrome 浏览器中手动执行此操作。然而,对于任何生产应用,这都不是一个好的解决方案。这篇中等文章概述了一种更好的程序化方式,您可能会发现它对您有所帮助:https://medium.com/@nekrtemplar/self-destroying-serviceworker-73d62921d717 基本上,您可以创建一个自清洁服务工作者程序,其中包含

navigator.serviceWorker.getRegistrations().then( function(registrations) { for(let registration of registrations) { registration.unregister() .then(function() { return self.clients.matchAll(); }) .then(function(clients) { clients.forEach(client => { if (client.url && "navigate" in client){ client.navigate(client.url)); } }); } });

删除旧的服务工作者,然后可以使用 activate 事件来触发对不同客户端的更新。 这个 github repo 有关于这个想法的更多细节:https://github.com/NekR/self-destroying-sw

更新:我刚刚发现了这篇博文,它可能会给你一个更优雅的解决方案。 https://betterprogramming.pub/let-users-know-when-you-have-updated-your-service-worker-in-create-react-app-b0c2701995b3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。