自訂 Firebase Crashlytics 當機報告


Crashlytics 資訊主頁中,您可以點選問題瞭解詳細資訊 事件報表您可以自訂這些報表,進一步瞭解應用程式發生的情況,以及向 Crashlytics 回報的事件相關情況。

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

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

新增自訂鍵

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

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

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

使用 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,請將值重設為空白字串。清除使用者 ID 並不會將現有資料移除 Crashlytics 記錄。如要刪除與使用者 ID 相關聯的記錄,請與 Firebase 支援團隊聯絡

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

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

crashlytics.h 可做為 Firebase Android SDK GitHub 存放區

請參閱標頭檔案中的註解,瞭解如何使用 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 技術提供,因此如要取得導覽標記記錄, 需要 啟用 Google Analytics加入 Google Analytics 專用的 Firebase SDK 導入您的應用程式一旦符合這些需求,導覽標記記錄就會自動 查看詳細資料時,也會在「記錄檔」分頁中納入事件資料 並不瞭解該問題的來龍去脈

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 控制台中。