自訂 Firebase Crashlytics 當機報告

在 Crashlytics 資訊主頁中,您可以點選問題並取得詳細事件報表。您可以自訂這些報表,進一步瞭解應用程式中的活動,以及回報給 Crashlytics 的事件情況。

  • 如果應用程式使用 Google Analytics (分析) 專用 Firebase SDK,會自動取得導覽標記記錄。這些記錄檔可讓您瞭解使用者在您的應用程式中觸發 Crashlytics 收集事件的使用者動作。

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

新增自訂鍵

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

  • 您可以在 Crashlytics 資訊主頁中搜尋與自訂鍵相符的問題。

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

使用 setCustomKey 執行個體方法設定鍵/值組合。請注意,value 參數的 setCustomKey 超載,以接受任何原始引數或 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 能讓您在當機報告中以匿名方式識別使用者。

如要將使用者 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,並使用適用於 NDK v18.3.6 以上版本 (Firebase BoM v31.3.0 以上版本) 適用的 Crashlytics SDK,即可取得 GWP-ASan 記憶體報告。如要測試 GWP-ASan 設定,請參閱 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 (分析),並在應用程式中新增 Firebase SDK for Google Analytics。只要符合這些要求,系統就會在「記錄檔」分頁中自動加入導覽標記記錄,並在問題詳細資料中附上事件資料。

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);

管理「當機深入分析」資料

Crash Insights 會比較匿名堆疊追蹤與其他 Firebase 應用程式的追蹤記錄,並讓您瞭解問題是否屬於較大的趨勢中。針對許多問題,當機深入分析甚至提供資源,協助您偵錯當機問題。

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