【问题标题】:Update firebase messaging service worker when there is change in firebase config当 firebase 配置发生变化时更新 firebase 消息传递服务工作者
【发布时间】:2021-08-04 14:25:19
【问题描述】:

我正在使用 firebase 在 react 项目中接收推送通知。

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

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

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

【问题讨论】:

标签: reactjs firebase firebase-cloud-messaging service-worker


【解决方案1】:

所以问题是您需要先销毁/取消注册旧的服务工作者,然后才能注册新的服务工作者(或强制更新为较新的版本)。您可以在本地 chrome 浏览器中手动执行此操作,方法是进入检查模式,选择 service worker 选项卡并单击“重新加载时更新”。然而,这对于任何生产应用来说都不是一个好的解决方案。这篇中型帖子概述了一种更好的程序化方式,您可能会发现它对您有所帮助: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)); } }); } });

删除旧的服务工作者,然后可以使用激活事件来触发对不同客户端的更新。 这个 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多