firebase_analytics引发Flutter Web遇广告拦截时崩溃白屏
故障根因
- 当前使用的7.1.1版本
firebase_analytics插件,在Web端的注册流程没有做全局API的存在性校验,会直接调用全局JS作用域下的firebase.analytics方法完成实例初始化 - 当广告拦截器屏蔽了
firebase-analytics.js资源时,全局作用域下不存在该方法,调用时会直接抛出TypeError - 该错误属于启动阶段的未捕获异常,会直接中断Dart应用的main函数执行链路,无法完成视图渲染,最终呈现全白页面
可落地解决方案
- 零Dart代码修改的即时兜底方案:在Web项目的
index.html入口文件最靠前的脚本位置,注入全局空桩实现,避免API缺失时触发调用崩溃示例代码:
// 全局兜底,避免广告拦截导致资源缺失时调用崩溃 window.firebase = window.firebase || {}; if (typeof window.firebase.analytics !== 'function') { window.firebase.analytics = () => ({ logEvent: () => {}, setUserId: () => {}, setUserProperty: () => {}, // 覆盖插件实际调用到的所有方法为空实现即可 }); } - 长期适配方案:升级现有Firebase全家桶版本到官方已内置Web端资源加载容错的版本,新版本在对应SDK的JS资源加载失败时,会自动跳过对应功能的初始化,不会触发全局未捕获异常阻断应用启动
- 注意:不要尝试修改自动生成的
generated_plugin_registrant.dart文件,每次重新构建应用时该文件内容会被自动覆盖,临时修改没有长期效果
内容的提问来源于stack exchange,提问作者creativecreatorormaybenot
相关产品推荐
相关产品推荐

