把報錯訊息透過服務上傳

開發者總是試圖創造沒有 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 範例應用,體驗完整流程。