В этом руководстве описывается, как настроить отчеты о сбоях с помощью 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 .