了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

Настройте отчеты о сбоях Firebase Crashlytics

В этом руководстве описывается, как настроить отчеты о сбоях с помощью 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 связывает журналы с вашими данными о сбоях и отображает их на странице Crashlytics консоли Firebase на вкладке «Журналы» .

Используйте log для выявления проблем. Например:

Kotlin+KTX

Firebase.crashlytics.log("message")

Java

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

Установить идентификаторы пользователей

Чтобы диагностировать проблему, часто полезно знать, кто из ваших пользователей столкнулся с данным сбоем. Crashlytics включает способ анонимной идентификации пользователей в ваших отчетах о сбоях.

Чтобы добавить идентификаторы пользователей в отчеты, назначьте каждому пользователю уникальный идентификатор в виде идентификационного номера, токена или хешированного значения:

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

Java

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

Если вам когда-нибудь понадобится очистить идентификатор пользователя после его установки, сбросьте значение до пустой строки. Очистка идентификатора пользователя не удаляет существующие записи Crashlytics. Если вам нужно удалить записи, связанные с идентификатором пользователя, обратитесь в службу поддержки Firebase .

(Только для Android NDK) Добавление метаданных в отчеты о сбоях NDK.

Вы можете дополнительно включить заголовок crashlytics.h в свой код C++, чтобы добавить метаданные в отчеты о сбоях NDK, такие как пользовательские ключи , пользовательские журналы , идентификаторы пользователей . Все эти опции описаны на этой странице выше.

crashlytics.h доступен в виде библиотеки C++ только для заголовков в репозитории Firebase Android SDK на GitHub .

Прочтите комментарии в заголовочном файле, чтобы получить инструкции по использованию API NDK C++.

Включите отчеты GWP-ASan для устранения проблем с повреждением памяти.

Crashlytics может помочь вам отладить сбои, вызванные ошибками собственной памяти, путем сбора отчетов GWP-ASan. Эти ошибки, связанные с памятью, могут быть связаны с повреждением памяти в вашем приложении, что является основной причиной уязвимостей безопасности приложения.

  • Вы можете просмотреть эти данные на новой вкладке «Трассы стека памяти», щелкнув сведения о проблеме на панели инструментов Crashlytics .

  • Вы также можете использовать новый сигнал и фильтр «Отчет GWP-ASan», чтобы быстро просмотреть все проблемы с этими данными.

Вы можете получать отчеты о памяти GWP-ASan, если явно включите GWP-ASan в своем приложении и используете Crashlytics SDK для NDK v18.3.6+ (Firebase BoM v31.3.0+). Вы можете протестировать настройку 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 объединяет зарегистрированные исключения вместе и отправляет их при следующем запуске приложения.

Включить отчетность по подписке

По умолчанию Crashlytics автоматически собирает отчеты о сбоях для всех пользователей вашего приложения. Чтобы предоставить пользователям больший контроль над отправляемыми ими данными, вы можете включить отчеты по подписке, отключив автоматические отчеты и отправляя данные в Crashlytics только тогда, когда вы решите это в своем коде:

  1. В блоке application вашего файла AndroidManifest.xml добавьте тег 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

Crash Insights помогает решать проблемы, сравнивая ваши анонимные трассировки стека с трассировками из других приложений Firebase и сообщая, является ли ваша проблема частью более широкой тенденции. Для многих проблем Crash Insights даже предоставляет ресурсы, которые помогут вам отладить сбой.

Crash Insights использует агрегированные данные о сбоях для определения общих тенденций стабильности. Если вы предпочитаете не делиться данными своего приложения, вы можете отказаться от Crash Insights в меню Crash Insights в верхней части списка проблем Crashlytics в консоли Firebase .