欢迎参加我们将于 2022 年 10 月 18 日举办的 Firebase 峰会(线上线下同时进行),了解 Firebase 如何帮助您加快应用开发速度、满怀信心地发布应用并在之后需要时轻松地扩大应用规模。立即报名

Firebase Crashlytics 使用入门

此快速入门介绍了如何使用 Crashlytics Flutter 插件在应用中设置 Firebase Crashlytics,以便您可以在 Firebase 控制台中获得全面的崩溃报告。

设置 Crashlytics 需要用到命令行工具和 IDE。 为了完成设置,您需要强制抛出一个测试异常,以便向 Firebase 发送您的第一个崩溃报告。

准备工作

  1. 如果您尚未在 Flutter 项目中配置并初始化 Firebase,请先配置并进行初始化。

  2. 建议做法:如需使用“未遇到崩溃问题的用户”、“面包屑导航日志”和“疾速崩溃提醒”等功能,您需要在 Firebase 项目中启用 Google Analytics(分析)。

    Crashlytics 支持的所有 Android 和 Apple 平台(watchOS 除外)都可以利用 Google Analytics(分析)中的这些功能。

    确保您的 Firebase 项目中启用了 Google Analytics(分析):前往 >“项目设置”>“集成”标签页,然后按照 Google Analytics(分析)对应的屏幕上的说明进行操作。

第 1 步:将 Crashlytics 添加到您的 Flutter 项目

  1. 从 Flutter 项目的根目录运行以下命令,安装 Crashlytics Flutter 插件:

    flutter pub add firebase_crashlytics
    
  2. 从 Flutter 项目的根目录运行以下命令:

    flutterfire configure
    

    运行此命令可确保您的 Flutter 应用的 Firebase 配置是最新的,对于 Android,还会向您的应用添加所需的 Crashlytics Gradle 插件。

  3. 完成后,重新构建您的 Flutter 项目:

    flutter run
    

第 2 步:配置崩溃处理程序

您可以使用 FirebaseCrashlytics.instance.recordFlutterFatalError 替换 FlutterError.onError,以自动捕获 Flutter 框架中抛出的所有错误:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Firebase.initializeApp();

  // Pass all uncaught errors from the framework to Crashlytics.
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;

  runApp(MyApp());
}

如果您使用区域 (zone),则对区域的错误处理程序进行插桩 (instrument) 后,系统将捕获 Flutter 框架(例如,在按钮的 onPressed 处理程序中)未捕获的错误:

void main() async {
  runZonedGuarded<Future<void>>(() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();

    FlutterError.onError =
       FirebaseCrashlytics.instance.recordFlutterFatalError;

    runApp(MyApp());
  }, (error, stack) =>
    FirebaseCrashlytics.instance.recordError(error, stack, fatal: true));
}

如需查看有关如何处理其他类型错误的示例,请参阅自定义崩溃报告

第 3 步:强制造成一次测试崩溃以完成设置

如需完成 Crashlytics 设置并在 Firebase 控制台的 Crashlytics 信息中心内查看初始数据,您需要强制抛出一个测试异常。

  1. 向您的应用添加可用于强制抛出测试异常的代码。

    如果您添加了一个对顶级 Zone 调用 FirebaseCrashlytics.instance.recordError(error, stack, fatal: true) 的错误处理程序,可以使用以下代码向应用添加一个按下即会抛出测试异常的按钮:

    TextButton(
        onPressed: () => throw Exception(),
        child: const Text("Throw Test Exception"),
    ),
    
  2. 构建并运行您的应用。

  3. 强制抛出测试异常,以便发送您的应用的第一个报告:

    1. 在测试设备或模拟器上打开应用。

    2. 在您的应用中,按下您使用上述代码添加的测试异常按钮。

  4. 前往 Firebase 控制台的 Crashlytics 信息中心,查看您的测试崩溃报告。

    如果您已刷新控制台,但在五分钟后仍未看到测试崩溃报告,请启用调试日志记录,查看您的应用是否正在发送崩溃报告。


大功告成!Crashlytics 现在会监控您的应用是否发生崩溃,以及 Android 中的非严重错误和 ANR。您可以访问 Crashlytics 信息中心,查看和调查所有报告和统计信息。

后续步骤

  • 您可以添加自选式报告、日志、键以及跟踪其他非严重错误来自定义崩溃报告设置

  • 与 Google Play 集成,以便您可以直接在 Crashlytics 信息中心内按 Google Play 轨道过滤 Android 应用的崩溃报告。这样可让 Crashlytics 信息中心更有侧重地显示特定 build。

  • 在 Android Studio 的“App Quality Insights(应用质量分析)”窗口中查看堆栈轨迹、崩溃统计信息以及代码(从 Electric Eel 2022.1.1 开始提供)。