В этом руководстве описывается, как настроить отчеты о сбоях с помощью 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 только тогда, когда вы решите это в своем коде:
В блоке
application
вашего файлаAndroidManifest.xml
добавьте тег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
Crash Insights помогает решать проблемы, сравнивая ваши анонимные трассировки стека с трассировками из других приложений Firebase и сообщая, является ли ваша проблема частью более широкой тенденции. Для многих проблем Crash Insights даже предоставляет ресурсы, которые помогут вам отладить сбой.
Crash Insights использует агрегированные данные о сбоях для определения общих тенденций стабильности. Если вы предпочитаете не делиться данными своего приложения, вы можете отказаться от Crash Insights в меню Crash Insights в верхней части списка проблем Crashlytics в консоли Firebase .