把报错信息通过服务上传

开发者总是试图创造没有 bug 的应用,但是 bug 还是会时不时地出现。这些 bug 会给用户带来糟糕的体验,所以获知 bug 发生的位置以及出现的频率就显得极为关键了。这样,你就可以根据 bug 的影响程度优先修复它们。

如何确定用户遇到 bug 的频率呢?解决方案是:当异常发生时,生成一份日志,日志中包含发生的异常及相关的堆栈信息。随后,可以将日志发送到异常监控报警平台,比如 Bugsnag、Fabric、Firebase CrashlyticsRollbar 或 Sentry。

异常监控报警平台会将上报的崩溃日志异常信息聚合并分组归类,这样就可以知道应用程序出现异常的频率并定位异常发生位置。

这个章节中,你可以通过以下步骤学习如何把异常信息上报给异常监控报警平台 Sentry

  1. 从 Sentry 平台获取 DSN

  2. 导入 Sentry package

  3. 初始化 Sentry SDK

  4. 捕获并上报异常

1. 从 Sentry 平台获取 DSN

在向 Sentry 上报异常信息前,需要在 Sentry.io 上获取应用的唯一身份标识 DSN。

根据以下步骤,获取 DSN:

  1. 创建 Sentry 账户

  2. 登录账户

  3. 新建一个 Flutter 工程

  4. 复制包含 DSN 的代码片段

2. 导入 Sentry 包

导入 sentry_flutter package 到应用中,这个 package 能更方便的将错误报告发送给 Sentry 的错误追踪系统。

运行 flutter pub addsentry_flutter 添加为依赖:

$ flutter pub add sentry_flutter

3. 创建 SentryClient

初始化 SDK 来自动捕获不同的未处理的错误。

import 'package:flutter/widgets.dart';
import 'package:sentry_flutter/sentry_flutter.dart';

Future<void> main() async {
  await SentryFlutter.init(
    (options) => options.dsn = 'https://example@sentry.io/example',
    appRunner: () => runApp(const MyApp()),
  );
}

另外,你也可以使用 dart-define 标记将 DSN 传递给 Flutter。

--dart-define SENTRY_DSN=https://example@sentry.io/example

这番操作都发生了什么

使用 Sentry 捕获 Dart 和原生中未处理的错误,以上这些操作就足够了。这包括 iOS 上的 Swift、Objective-C、C 和 C++,以及 Android 上的 Java、Kotlin、C 和 C++。

4. 捕获并上报异常

除了自动初始化 Sentry SDK 来捕获和上报错误之外,你还可以通过 API 来报告错误:

await Sentry.captureException(exception, stackTrace: stackTrace);

更多相关信息,请参阅 pub.dev 上的 Sentry API 文档。

了解更多

更多关于使用 Sentry SDK 的文档可以在 其官网 查看。

完整样例

查看 Sentry flutter example 示例应用,体验完整流程。