本指南介紹如何使用 Firebase Crashlytics 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");
設定用戶標識符
要診斷問題,了解哪些用戶遇到了給定的崩潰通常很有幫助。 Crashlytics 包含一種在崩潰報告中匿名識別使用者的方法。
若要將使用者 ID 新增至報表中,請為每個使用者指派 ID 號碼、令牌或雜湊值形式的唯一識別碼:
Kotlin+KTX
Firebase.crashlytics.setUserId("user123456789")
Java
FirebaseCrashlytics.getInstance().setUserId("user123456789");
如果您在設定使用者識別碼後需要清除它,請將該值重設為空白字串。清除使用者識別碼不會刪除現有的 Crashlytics 記錄。如果您需要刪除與使用者 ID 關聯的記錄,請聯絡 Firebase 支援。
(僅限 Android NDK)將元資料新增至 NDK 崩潰報告
您可以選擇在 C++ 程式碼中包含crashlytics.h
標頭,以將元資料新增至 NDK 崩潰報告,例如自訂鍵、自訂日誌、使用者識別碼。所有這些選項均在本頁上方進行了描述。
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 記憶體報告。您可以使用Android 文件中的範例本機程式碼來測試 GWP-ASan 設定。
報告非致命異常
除了自動報告應用程式的崩潰之外,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 將記錄的異常批量處理在一起,並在下次應用程式啟動時發送它們。
啟用選擇加入報告
預設情況下,Crashlytics 會自動收集應用程式的所有使用者崩潰的報告。為了讓使用者更好地控制他們發送的數據,您可以透過停用自動報告來啟用選擇加入報告,並且僅當您在程式碼中選擇時才將數據傳送到 Crashlytics:
在
AndroidManifest.xml
檔案的application
程式區塊中,新增meta-data
標記以關閉自動收集:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
透過在執行時呼叫 Crashlytics 資料收集覆蓋來為選定使用者啟用收集。覆蓋值在應用程式啟動時持續存在,因此 Crashlytics 可以自動收集報告。若要退出自動崩潰報告,請傳遞
false
作為覆蓋值。當設定為false
時,新值直到下次執行應用程式時才會套用。Kotlin+KTX
Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
Java
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
管理崩潰洞察數據
Crash Insights 透過將匿名堆疊追蹤與其他 Firebase 應用程式的追蹤進行比較來幫助您解決問題,並讓您知道您的問題是否屬於更大趨勢的一部分。對於許多問題,Crash Insights 甚至提供資源來幫助您調試崩潰。
崩潰洞察使用聚合的崩潰資料來識別常見的穩定性趨勢。如果您不想共享應用程式的數據,可以從Firebase 控制台Crashlytics 問題清單頂部的Crash Insights選單中選擇退出 Crash Insights。