Flutter Web应用中如何为firebase-messaging-sw.js选择正确的Firebase JS SDK版本?
Flutter Web应用中如何为firebase-messaging-sw.js选择正确的Firebase JS SDK版本?
我完全懂你这种绕来绕去找不到答案的烦躁感——选不对JS SDK版本确实容易踩兼容性坑,尤其是Flutter Web的Firebase配置本来就比原生多一步service worker的设置,稍不注意就出问题。
其实你不用去网上找什么版本矩阵,也不用纠结最新版本会不会不兼容,直接从你自己的Flutter项目里就能找到精准匹配的版本,而且方法很简单:
方法一:从本地FlutterFire依赖文件里找
FlutterFire的web端依赖包(比如firebase_messaging_web)已经内置了对应的Firebase JS SDK版本信息,你直接去本地找就行:
- 打开项目根目录下的
pubspec.lock文件(这个是自动生成的,记录了所有依赖的精确版本),找到firebase_messaging_web的版本号,比如假设是4.8.0 - 去你的Flutter pub缓存目录(一般在系统用户目录下的
.pub-cache/hosted/pub.dev/里),找到firebase_messaging_web对应版本的文件夹 - 进入
lib/src目录,打开firebase_sdk_version.dart文件,里面会明确写着对应的Firebase JS SDK版本,比如const String messaging = "10.12.0";——这个就是你要在firebase-messaging-sw.js里用的版本
方法二:从浏览器控制台直接看当前项目的JS版本
如果你嫌找本地文件麻烦,还有个更直观的方式:
- 启动你的Flutter Web项目,在浏览器里打开应用
- 按F12打开开发者工具,切换到「控制台」标签
- 输入
firebase.SDK_VERSION并回车,控制台会返回当前应用正在使用的Firebase JS SDK版本号 - 把这个版本号直接用到
firebase-messaging-sw.js的importScripts里就行——因为你的应用本身已经在加载这个版本的SDK了,service worker用同一个版本肯定不会有兼容性问题
关于兼容性的小疑问
你担心的向后兼容问题其实不用太焦虑:Firebase JS SDK的同大版本(比如10.x.x之间)兼容性做得很好,但为了100%避免奇怪的bug,还是建议用和你项目完全匹配的版本,尤其是如果你用了FlutterFire的新特性,对应的JS SDK版本才会支持这些特性。
另外,你提到的那个firebase_sdk_version.dart文件,其实它记录的就是当前FlutterFire包绑定的精确JS版本,不是“最新版本”——你本地的这个文件是和你pubspec里的依赖版本对应的,所以直接用里面的版本号完全没问题,不用怕用错。
内容来源于stack exchange
相关产品推荐
相关产品推荐

