You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Add to App集成firebase_crashlytics报[DEFAULT]应用不存在错误

Flutter Add to App场景Firebase Crashlytics初始化报错解决方案

问题概要

在Flutter Add to App混合开发模式下,通过FlutterFire配置Firebase Crashlytics时,已尝试社区公开的同类问题解决方案,均未生效。

场景说明

  • 父级宿主应用未集成任何Firebase插件,也未调用Firebase.initialize()方法,仅以依赖包形式引入子Flutter模块
  • 子Flutter应用内部独立集成Firebase相关插件并编写初始化逻辑
  • 子应用main.dart原有初始化逻辑如下:
void main() {
  runZonedGuarded(() async {
    // 必须优先初始化Flutter绑定
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    // 后续业务逻辑
  });
}

问题表现

Firebase 1.5.0版本下功能运行正常,为接入Crashlytics升级Firebase相关依赖后,运行时抛出如下未捕获异常:

[VERBOSE-2:ui_dart_state.cc(198)] Unhandled Exception: [core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()
#0      MethodChannelFirebase.app (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:193:5)
#1      Firebase.app (package:firebase_core/src/firebase.dart:53:41)
#2      FirebaseCrashlytics.instance (package:firebase_crashlytics/src/firebase_crashlytics.dart:33:55)
#3      main.<anonymous closure> (package:package/main.dart:58:25)
#4      _rootRunBinary (dart:async/zone.dart:1450:47)
#5      _CustomZone.runBinary (dart:async/zone.dart:1342:19)
#6      runZonedGuarded.<anonymous closure> (dart:async/zone.dart:1832:18)
#7      _Zone._processUncaughtError (dart:async/zone.dart:1109:14)
#8      _CustomZone.handleUncaughtError (dart:async/zone.dart:1312:5)
#9      Future._propagateToListeners (dart:async/future_impl.dart:680:16)
#10     Future._completeError (dart:async/future_impl.dart:574:5)
#11     _completeOnAsync<…>

调用栈显示异常触发于获取FirebaseCrashlytics.instance实例的环节。

已尝试方案

  • 执行flutter configure命令生成firebase_options.dart配置文件,初始化Firebase时传入当前平台对应配置,代码如下:
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);
  • Firebase初始化时传入自定义name参数
    两种方案均未解决报错。

根因说明

[DEFAULT] Firebase应用的注册逻辑位于firebase_core插件的原生MethodChannel侧,Dart层调用Firebase.initializeApp()是异步操作,高版本FlutterFire中FirebaseCrashlytics.instance为静态惰性实例,初始化时会直接读取原生端已注册的[DEFAULT]应用,一旦读取操作早于原生端实例注册完成的时机,就会抛出no-app异常。另外Crashlytics默认仅绑定名称为[DEFAULT]的Firebase实例,传入自定义name参数会直接导致实例匹配失败。

修复步骤

  1. 移除初始化时传入的自定义name参数,保留DefaultFirebaseOptions.currentPlatform配置项,确保初始化目标为[DEFAULT]实例
  2. 调整初始化时序,在Firebase.initializeApp()执行完成后,增加一次实例可用性校验,确认原生端实例注册完成后再获取Crashlytics实例,修正后的初始化代码如下:
void main() {
  runZonedGuarded(() async {
    WidgetsFlutterBinding.ensureInitialized();
    // 初始化DEFAULT实例
    await Firebase.initializeApp(
      options: DefaultFirebaseOptions.currentPlatform,
    );
    // 等待原生端实例注册完成,校验可用性
    final defaultApp = Firebase.app();
    await defaultApp.setAutomaticDataCollectionEnabled(true);
    // 实例可用后再绑定Crashlytics错误捕获
    FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;
    runApp(const MyApp());
  }, (error, stackTrace) {
    FirebaseCrashlytics.instance.recordError(error, stackTrace, fatal: true);
  });
}
  1. 检查Flutter模块Android侧配置:在Flutter模块的android/build.gradle中确认已正确引入Crashlytics插件,不要在宿主原生层初始化Firebase,避免和Flutter模块内的初始化逻辑产生实例冲突。

注意:如果使用缓存FlutterEngine的方式加载Flutter模块,需要确保Firebase初始化逻辑在FlutterEngine首次附着时执行,不要在Engine预热阶段提前调用Crashlytics相关实例。

内容的提问来源于stack exchange,提问作者satyajit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:15:13