Flutter崩溃报告插件spreeloop_crash_reporting的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter崩溃报告插件spreeloop_crash_reporting的使用

<spreeloop_crash_reporting> 是一个用于在应用程序中报告崩溃的Flutter插件。它基于Firebase Crashlytics,提供了多种方法来处理崩溃报告。



特性

  • 检查设备上是否有未发送到Crashlytics的致命或非致命崩溃报告。
  • 在应用程序中(原生)导致崩溃。这仅应用于测试目的,在您希望模拟原生崩溃以查看Firebase控制台结果的情况下。
  • 队列中所有未发送的报告,以便删除。
  • 记录一条消息,该消息包含在下一个致命或非致命报告中。
  • 提交捕获错误的Crashlytics报告。
  • 提交由Flutter框架捕获的非致命错误的Crashlytics报告。
  • 将所有报告排队发送到Crashlytics。
  • 记录与后续致命和非致命报告关联的用户ID(标识符)。
  • 设置与后续致命和非致命报告关联的自定义键和值。

安装

将以下内容添加到您的包的pubspec.yaml文件中:

dependencies:
  spreeloop_crash_reporting: ^0.0.2

使用

在Dart代码中导入包:

import 'package:spreeloop_crash_reporting/spreeloop_crash_reporting.dart';

CrashReporting 类是一个接口,具有一个工厂构造函数,根据给定的 CrashReporterType 返回不同的实例。

对于Firebase实现,可以在代码中执行以下操作:

CrashReporting.init(service: CrashReporterType.firebase);

对于Web实现,可以在代码中执行以下操作:

CrashReporting.init(service: CrashReporterType.web);

对于一些测试,可以在代码中执行以下操作:

CrashReporting.init(service: CrashReporterType.fake);

checkForUnsentReports

检查是否有未发送的报告:

CrashReporting().checkForUnsentReports();

输出:/// bool: true

crash

触发崩溃:

CrashReporting().crash();

deleteUnsentReports

删除未发送的报告:

CrashReporting().deleteUnsentReports();

log

记录日志:

CrashReporting().log();

输出:/// String: Logs a message that's included in the next fatal or non-fatal report.

recordError

记录错误:

CrashReporting().recordError(
  ErrorRecordParam(
    exception: Exception("An error occurred"),
    stack: StackTrace.current,
    reason: "This is an example error",
    printDetails: true,
    fatal: false,
    information: ["info1", "info2"]
  )
);

ErrorRecordParam 参数类型用于在 [ErrorRecordParam] 方法中提供参数。它有以下属性:

属性 类型 描述
exception dynamic 表示与错误一起提供的异常。
stack StackTrace 表示错误的堆栈跟踪。
reason dynamic 表示错误消息。
printDetails bool? 当需要打印错误详细信息时为真。
fatal bool 当错误是致命时为真。
information Iterable 表示用于诊断的附加信息。

sendUnsentReports

发送未发送的报告:

CrashReporting().sendUnsentReports();

setCustomKey

设置自定义键和值:

CrashReporting().setCustomKey('key', {'value': 'example'});

setUserIdentifier

设置用户标识符:

CrashReporting().setUserIdentifier('identifier');

依赖项

确保在 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  firebase_crashlytics: ^3.4.19

更多关于Flutter崩溃报告插件spreeloop_crash_reporting的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter崩溃报告插件spreeloop_crash_reporting的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用spreeloop_crash_reporting插件的示例代码。这个插件可以帮助你捕获应用的崩溃报告,并将其发送到你的服务器或指定的服务。

1. 添加依赖

首先,你需要在你的pubspec.yaml文件中添加spreeloop_crash_reporting依赖:

dependencies:
  flutter:
    sdk: flutter
  spreeloop_crash_reporting: ^最新版本号  # 请替换为实际发布的最新版本号

然后,运行以下命令以获取依赖:

flutter pub get

2. 初始化插件

在你的主应用文件(通常是main.dart)中,你需要初始化spreeloop_crash_reporting插件。

import 'package:flutter/material.dart';
import 'package:spreeloop_crash_reporting/spreeloop_crash_reporting.dart';

void main() {
  // 初始化崩溃报告插件
  SpreeloopCrashReporting.initialize(
    apiKey: "你的API_KEY",  // 替换为你的API密钥
    endpoint: "你的服务器地址",  // 替换为你的服务器地址,用于接收崩溃报告
    enableLogging: true,  // 是否启用日志记录
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '按下按钮触发崩溃',
            ),
            ElevatedButton(
              onPressed: () {
                // 故意制造一个崩溃
                int result = 1 / 0;  // 这将触发一个除以零的运行时异常
              },
              child: Text('触发崩溃'),
            ),
          ],
        ),
      ),
    );
  }
}

3. 处理崩溃报告

插件会自动捕获崩溃报告,并发送到你在初始化时指定的服务器地址。你可以在服务器端处理这些崩溃报告,以便分析和修复问题。

4. 自定义崩溃处理(可选)

如果你需要自定义崩溃处理逻辑,例如捕获未处理的异常,你可以使用Flutter的FlutterEngineWindow提供的错误处理回调。

import 'dart:ui' as ui;

void main() {
  // 初始化崩溃报告插件
  SpreeloopCrashReporting.initialize(
    apiKey: "你的API_KEY",
    endpoint: "你的服务器地址",
    enableLogging: true,
  );

  // 监听未处理的异常
  ui.window.onUnhandledException = (exception, stack) {
    // 你可以在这里添加自定义的崩溃处理逻辑
    print("未处理的异常: $exception");
    print("堆栈跟踪: $stack");

    // 确保调用原始的异常处理函数
    FlutterError.reportError(exception, stack);
  };

  runApp(MyApp());
}

以上代码展示了如何在Flutter应用中集成和使用spreeloop_crash_reporting插件来捕获和处理崩溃报告。请确保替换示例中的你的API_KEY你的服务器地址为你的实际值。

回到顶部