自訂 Firebase Crashlytics 當機報告


Crashlytics 資訊主頁中,您可以點選問題瞭解詳細資訊 事件報表你可以自訂報表,進一步瞭解 您應用程式中的動態,以及回報給以下事件的相關情況 Crashlytics

  • 如果您的應用程式使用Google Analytics」專用 Firebase SDK。這些記錄檔可讓您瞭解導致應用程式中 Crashlytics 收集事件的使用者動作。

  • 請關閉自動當機回報功能,並為使用者啟用選擇加入式回報功能。請注意,根據預設,Crashlytics 會自動為應用程式的所有使用者收集當機報告。

新增自訂鍵

你可以使用自訂鍵,取得導致當機情況的應用程式特定狀態。 您可以將任意鍵/值組合與當機報告建立關聯, 您可使用自訂鍵,在 Firebase 控制台中搜尋及篩選當機報告。

  • 您可以在 Crashlytics 資訊主頁中搜尋問題 符合自訂鍵的條件

  • 在控制台中查看特定問題時,您可以查看每個事件的相關自訂鍵 (「Keys」子分頁),甚至可以依據自訂鍵篩選事件 (頁面頂端的「Filter」選單)。

使用 setCustomKey 例項方法來設定鍵/值組合。請注意, setCustomKey 為超載,以便 value 參數接受任何原始值 或 String 引數例如:

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("my_string_key", "foo") // String value
    key("my_bool_key", true) // boolean value
    key("my_double_key", 1.0) // double value
    key("my_float_key", 1.0f) // float value
    key("my_int_key", 1) // int value
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("my_string_key", "foo" /* string value */);

crashlytics.setCustomKey("my_bool_key", true /* boolean value */);

crashlytics.setCustomKey("my_double_key", 1.0 /* double value */);

crashlytics.setCustomKey("my_float_key", 1.0f /* float value */);

crashlytics.setCustomKey("my_int_key", 1 /* int value */);

您也可以透過呼叫鍵和設定,修改現有鍵的值 改為不同的值例如:

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("current_level", 3)
    key("last_UI_action", "logged_in")
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");

CustomKeysAndValues 的例項傳遞至 setCustomKeys 例項方法:

Kotlin+KTX

以 Kotlin 來說,現有功能比使用 CustomKeysAndValues 建構工具。

crashlytics.setCustomKeys {
  key("str_key", "hello")
  key("bool_key", true)
  key("int_key", 1)
  key("long_key", 1L)
  key("float_key", 1.0f)
  key("double_key", 1.0)
}

Java

CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
.putString("string key", "string value")
.putString("string key 2", "string  value 2")
.putBoolean("boolean key", True)
.putBoolean("boolean key 2", False)
.putFloat("float key", 1.01)
.putFloat("float key 2", 2.02)
.build();

FirebaseCrashlytics.getInstance().setCustomKeys(keysAndValues);

新增自訂記錄訊息

如要進一步瞭解導致當機的事件,您可以將自訂 Crashlytics 記錄檔新增至應用程式。Crashlytics 會將記錄檔與當機資料建立關聯,並在 Firebase 控制台的「記錄檔」分頁標籤下方的 Crashlytics 頁面中顯示這些資料。

使用 log 協助找出問題。例如:

Kotlin+KTX

Firebase.crashlytics.log("message")

Java

FirebaseCrashlytics.getInstance().log("message");

設定使用者 ID

如要診斷問題,通常需要瞭解哪些使用者發生特定異常終止情形。Crashlytics 可讓您匿名辨識 顯示當機報告

如要在報表中新增 User-ID,請為每位使用者指派專屬 ID,格式為 ID 編號、符記或雜湊值:

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

Java

FirebaseCrashlytics.getInstance().setUserId("user123456789");

如果您在設定好使用者 ID 後需要清除,請將值重設為 空白字串清除使用者 ID 不會刪除現有的 Crashlytics 記錄。如何刪除與使用者相關聯的記錄 ID,請與 Firebase 支援團隊聯絡

(僅限 Android NDK) 在 NDK 當機報告中新增中繼資料

您可以視需要在 C++ 程式碼中加入 crashlytics.h 標頭,將中繼資料新增至 NDK 當機報告,例如自訂鍵自訂記錄使用者 ID。如需上述所有選項的說明,請參閱 請參閱本頁上方說明

crashlytics.h 可在 Firebase Android SDK GitHub 存放區中,以僅標頭 C++ 程式庫的形式使用。

如要瞭解如何使用 NDK C++ API,請參閱標頭檔案中的註解。

納入 GWP-ASan 報告,以便偵錯記憶體毀損問題

Crashlytics 可協助您對原生記憶體錯誤造成的當機問題偵錯 收集 GWP-ASan 報告這些記憶體相關錯誤可能與應用程式中的記憶體毀損問題有關,而這類問題是造成應用程式安全漏洞的主要原因。

  • Crashlytics 資訊主頁中按一下問題詳細資料,即可在新的「記憶體堆疊追蹤」分頁中查看這項資料。

  • 您也可以使用新的「GWP-ASan 報告」信號和篩選器,快速查看這項資料的所有問題。

如果您符合以下條件,即可取得 GWP-ASan 記憶體報告: 明確啟用 GWP-ASan ,並使用 Crashlytics SDK for NDK 18.3.6 以上版本 (Firebase BoM) v31.3.0+)。您可以使用 Android 說明文件中的原生程式碼範例

回報不嚴重的例外狀況

除了自動回報應用程式的當機問題外,Crashlytics 還能讓你 記錄不嚴重的例外狀況,並在下次應用程式時傳送 發布內容。

請使用 recordException 方法,記錄應用程式中的不嚴重例外狀況 catch 個區塊。例如:

Kotlin+KTX

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e)
    // handle your exception here
}

Java

try {
    methodThatThrows();
} catch (Exception e) {
    FirebaseCrashlytics.getInstance().recordException(e);
    // handle your exception here
}

所有記錄到的例外狀況在 Firebase 控制台中都會顯示為非重大問題。 問題摘要包含您通常會從當機事件取得的所有狀態資訊,以及依 Android 版本和硬體裝置分類的詳細資料。

Crashlytics 會處理專屬背景執行緒的例外狀況 將對應用程式的效能影響降到最低。降低使用者的網路用量 流量,Crashlytics 會批次處理記錄的例外狀況,並將 下次啟動應用程式的時間。

取得導覽標記記錄

導覽標記記錄可讓您進一步瞭解使用者的互動情形 引發當機、一般錯誤或 ANR 事件。這些記錄檔 有助於重現並偵錯。

麵包屑記錄由 Google Analytics 提供支援,因此如要取得麵包屑記錄,您必須為 Firebase 專案啟用 Google Analytics,並Google Analytics 的 Firebase SDK 新增至應用程式。滿足這些需求後,您查看問題詳細資料時,系統就會在「Logs」分頁中,自動將麵包屑記錄與事件資料一併顯示。

Analytics SDK 會自動記錄 screen_view 事件,讓導覽標記記錄顯示在當機、非致命或 ANR 事件前檢視的畫面清單。screen_view 麵包屑記錄包含 firebase_screen_class 參數。

麵包屑記錄也會填入您在使用者工作階段中手動記錄的任何自訂事件,包括事件的參數資料。這項資料有助於顯示導致當機、非致命錯誤或 ANR 事件的一系列使用者動作。

請注意,您可以控管 Google Analytics 資料的收集和使用方式,包括填入麵包屑記錄的資料。

啟用自選回報功能

根據預設,Crashlytics 會自動為應用程式的所有使用者收集當機報告。為讓使用者進一步控管所傳送的資料,您可以停用自動回報功能,並在程式碼中選擇傳送資料至 Crashlytics,啟用選擇加入回報功能:

  1. AndroidManifest.xml 檔案的 application 區塊中,新增 meta-data 標記關閉自動收集功能:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. 在執行階段呼叫 Crashlytics 資料收集覆寫值,為特定使用者啟用收集功能。覆寫值會在應用程式啟動期間持續存在,因此 Crashlytics 可以自動收集報表。如何停用 自動當機回報功能,請傳遞 false 做為覆寫值。設定時 至 false,新的值必須等到應用程式下次執行後才會生效。

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

管理當機深入分析資料

當機深入分析功能會將您的去識別化堆疊追蹤與其他 Firebase 應用程式的追蹤記錄進行比較,協助您解決問題,並讓您瞭解問題是否屬於更廣泛的趨勢。針對許多問題,Crash Insights 甚至提供資源,協助您偵錯當機情形。

Crash Insights 會使用匯總的當機資料,找出常見的穩定性趨勢。如果不想分享應用程式資料,可以選擇停用「當機深入分析」 前往 Crashlytics 問題清單頂端的「當機深入分析」選單 Firebase 控制台中。