在 Crashlytics 資訊主頁中,您可以點選問題並取得詳細的事件報表。你可以自訂報表,進一步瞭解 您應用程式中的動態,以及回報給以下事件的相關情況 Crashlytics。
如果應用程式使用 Google Analytics 的 Firebase SDK,系統會自動取得麵包屑記錄。這些記錄檔可讓您 會導致應用程式內出現 Crashlytics 收集事件的使用者動作。
關閉自動當機回報功能 為使用者啟用選用報告。請注意 根據預設,Crashlytics 會自動收集平台原生當機報告 應用程式使用者
回報未偵測到的例外狀況
您可以自動攔截所有「嚴重」Flutter 擲回的錯誤
方法是將 FlutterError.onError
覆寫為
FirebaseCrashlytics.instance.recordFlutterFatalError
。或者,如要同時擷取「非致命」例外狀況,請使用 FirebaseCrashlytics.instance.recordFlutterError
覆寫 FlutterError.onError
:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
bool weWantFatalErrorRecording = true;
FlutterError.onError = (errorDetails) {
if(weWantFatalErrorRecording){
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
} else {
FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
}
};
runApp(MyApp());
}
非同步錯誤
Flutter 架構不會擷取非同步錯誤:
ElevatedButton(
onPressed: () async {
throw Error();
}
...
)
如要擷取這類錯誤,您可以使用 PlatformDispatcher.instance.onError
處理常式:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FlutterError.onError = (errorDetails) {
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
};
// Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
PlatformDispatcher.instance.onError = (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
return true;
};
runApp(MyApp());
}
Flutter 以外的錯誤
如要擷取在 Flutter 情境外發生的錯誤,請在目前 Isolate
上安裝錯誤事件監聽器:
Isolate.current.addErrorListener(RawReceivePort((pair) async {
final List<dynamic> errorAndStacktrace = pair;
await FirebaseCrashlytics.instance.recordError(
errorAndStacktrace.first,
errorAndStacktrace.last,
fatal: true,
);
}).sendPort);
回報已偵測到的例外狀況
除了自動回報應用程式的當機問題外,Crashlytics 還能讓你 記錄不嚴重的例外狀況,並在下次嚴重嚴重時傳送給您 或應用程式重新啟動時,系統才會回報這類事件。
請使用 recordError
方法,在應用程式的 catch 區塊中記錄非致命例外狀況。例如:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error'
);
// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
建議您一併記錄所有可能發生的錯誤資訊
方法是使用 information
屬性:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error',
information: ['further diagnostic information about the error', 'version 2.0'],
);
這些例外狀況會在 Firebase 控制台中顯示為非致命問題。 問題摘要包含您平時從當機事件中取得的所有狀態資訊 以及按版本和硬體裝置分類的詳細資料
Crashlytics 會處理專屬背景執行緒的例外狀況 將對應用程式的效能影響降到最低。降低使用者的網路用量 流量,Crashlytics 會對從裝置傳出的報告數量設有限制, 並視需要顯示。
新增自訂鍵
您可以使用自訂鍵,取得導致當機情況的應用程式特定狀態。您可以將任意鍵/值組合與當機報告建立關聯,然後使用自訂鍵在 Firebase 主控台中搜尋及篩選當機報告。
您可以在 Crashlytics 資訊主頁中搜尋符合自訂鍵的問題。
在控制台中查看特定問題時,可以查看 個別事件的相關自訂鍵 (「鍵」子分頁),甚至篩選 事件 (按頁面頂端的「篩選器」選單)。
使用 setCustomKey
例項方法來設定鍵/值組合。以下是一些
範例:
// Set a key to a string.
FirebaseCrashlytics.instance.setCustomKey('str_key', 'hello');
// Set a key to a boolean.
FirebaseCrashlytics.instance.setCustomKey("bool_key", true);
// Set a key to an int.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1);
// Set a key to a long.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1L);
// Set a key to a float.
FirebaseCrashlytics.instance.setCustomKey("float_key", 1.0f);
// Set a key to a double.
FirebaseCrashlytics.instance.setCustomKey("double_key", 1.0);
新增自訂記錄訊息
如要進一步查看引發當機事件的事件背景資訊,您可以新增 將 Crashlytics 自訂記錄傳送至您的應用程式。Crashlytics 可將記錄建立關聯 與您的當機資料一起顯示在 Firebase 控制台, 在Crashlytics 記錄檔分頁中。
使用 log
找出問題所在。例如:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
設定使用者 ID
如要診斷問題,通常需要瞭解哪些使用者發生特定異常終止情形。Crashlytics 可讓您匿名辨識 顯示當機報告
如要在報表中加入 User-ID,請為每位使用者指派專屬 ID 形式的 ID 編號、符記或雜湊值:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
如果您在設定好使用者 ID 後需要清除,請將值重設為 空白字串清除使用者 ID 並不會將現有資料移除 Crashlytics 記錄。如何刪除與使用者相關聯的記錄 ID,請與 Firebase 支援團隊聯絡。
取得導覽標記記錄
導覽標記記錄可讓您進一步瞭解使用者的互動情形 引發當機、一般錯誤或 ANR 事件。這些記錄檔 有助於重現並偵錯。
導覽標記記錄是由 Google Analytics 技術提供,因此如要取得導覽標記記錄, 需要 啟用 Google Analytics 。 加入 Google Analytics 專用的 Firebase SDK 導入您的應用程式一旦符合這些需求,導覽標記記錄就會自動 查看詳細資料時,也會在「記錄檔」分頁中納入事件資料 並不瞭解該問題的來龍去脈
Analytics SDK 會自動記錄 screen_view
事件,讓導覽標記記錄顯示在當機、非致命或 ANR 事件前檢視的畫面清單。screen_view
麵包屑記錄包含 firebase_screen_class
參數。
系統也會填入導覽標記記錄 您在使用者的帳戶中手動記錄的自訂事件 ,包括事件的參數資料。這項資料有助於顯示一系列 觸發引發當機、一般錯誤或 ANR 事件的使用者動作。
請注意,您可以 控管 Google Analytics 資料的收集與使用方式, 包括填入導覽標記記錄的資料。
啟用自選回報功能
根據預設,Crashlytics 會自動為應用程式的所有使用者收集當機報告。如要讓使用者進一步控管他們傳送的資料,您可以啟用 供使用者選擇使用報告,即可停用自動報告功能,並僅將資料傳送給 Crashlytics (選擇在程式碼中執行時):
原生關閉自動收集功能:
Apple 平台
在
Info.plist
檔案中新增金鑰:- 鍵:
FirebaseCrashlyticsCollectionEnabled
- 值:
false
Android
在
AndroidManifest.xml
檔案的application
區塊中,新增meta-data
標記關閉自動收集功能:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
- 鍵:
呼叫 Crashlytics 資料,為特定使用者啟用收集功能 會在執行階段覆寫集合覆寫
覆寫值會在應用程式啟動後保留,因此 Crashlytics 自動收集報表如要停用自動當機回報功能,請按照下列步驟操作: 傳遞
false
做為覆寫值。設為false
時,新值會 才會套用至下次執行應用程式為止。FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
管理當機深入分析資料
當機深入分析會比較匿名堆疊,協助你解決問題 追蹤其他 Firebase 應用程式的追蹤記錄,讓你瞭解問題是否 一部分的趨勢許多問題甚至能透過 Crash Insights 提供的資源 來協助偵測當機問題
Crash Insights 會使用匯總的當機資料,找出常見的穩定性趨勢。 如果不想分享應用程式資料,可以選擇停用「當機深入分析」 前往 Crashlytics 問題清單頂端的「當機深入分析」選單 Firebase 控制台中。