На панели управления Crashlytics вы можете нажать на проблему и получить подробный отчет о событии. Вы можете настроить эти отчеты, чтобы лучше понять, что происходит в вашем приложении, и обстоятельства событий, о которых сообщается в Crashlytics .
Настройте свое приложение для регистрации пользовательских ключей , пользовательских сообщений журнала и идентификаторов пользователей .
Сообщайте об исключениях в Crashlytics .
Автоматически получайте навигационные журналы , если ваше приложение использует Firebase SDK для Google Analytics . Эти журналы дают вам представление о действиях пользователей, которые привели к событию, собранному 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 группирует зарегистрированные исключения и отправляет их при следующем запуске приложения.
Получить навигационные журналы
Журналы навигации позволяют лучше понять взаимодействие пользователя с вашим приложением, которое привело к сбою, несмертельному событию или событию ANR. Эти журналы могут быть полезны при попытке воспроизвести и отладить проблему.
Журналы навигации основаны на Google Analytics, поэтому для получения журналов навигации вам необходимо включить Google Analytics для вашего проекта Firebase и добавить Firebase SDK для Google Analytics в свое приложение. Как только эти требования будут выполнены, навигационные журналы автоматически включаются в данные о событии на вкладке «Журналы», когда вы просматриваете подробности проблемы.
Analytics SDK автоматически регистрирует событие screen_view
, которое позволяет в журналах навигации отображать список экранов, просмотренных до сбоя, нефатального события или события ANR. Хлебный журнал screen_view
содержит параметр firebase_screen_class
.
Журналы навигации также заполняются любыми пользовательскими событиями , которые вы вручную регистрируете в сеансе пользователя, включая данные параметров событий. Эти данные могут помочь показать серию действий пользователя, приведших к сбою, нефатальному событию или событию ANR.
Обратите внимание, что вы можете контролировать сбор и использование данных Google Analytics , включая данные, заполняющие журналы навигации.
Включить подписку на получение отчетов
По умолчанию 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 .
,На приборной панели Crashlytics вы можете нажать на проблему и получить подробный отчет о событиях. Вы можете настроить эти отчеты, чтобы помочь вам лучше понять, что происходит в вашем приложении, и обстоятельствах, связанных с событиями, о которых сообщалось о Crashlytics .
Прикажите ваше приложение для регистрации пользовательских ключей , пользовательских сообщений журналов и идентификаторов пользователей .
Сообщайте исключения для Crashlytics .
Автоматически получайте журналы Breadcrumb , если ваше приложение использует Firebase SDK для Google Analytics . Эти журналы дают вам видимость в действиях пользователей, приводящих к событию, Crashlytics в вашем приложении.
Выключите автоматические отчеты о сбоях и включите отчеты для ваших пользователей. Обратите внимание, что по умолчанию Crashlytics автоматически собирает отчеты о сбоях для всех пользователей вашего приложения.
Добавьте пользовательские ключи
Пользовательские ключи помогут вам получить конкретное состояние вашего приложения, приводящего к сбою. Вы можете связать пары произвольных ключей/значения с вашими отчетами о сбоях, а затем использовать пользовательские ключи для поиска и отчетов о сбоях в консоли Firebase .
На приборной панели Crashlytics вы можете найти проблемы, которые соответствуют пользовательскому ключу.
Когда вы просматриваете конкретную проблему в консоли, вы можете просмотреть связанные с ними пользовательские клавиши для каждого события (подтаба Keys ) и даже отфильтровать события по пользовательским ключам (меню фильтра в верхней части страницы).
Используйте метод экземпляра 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
Builder.
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 Pactors вместе зарегистрировали исключения вместе и отправляет их в следующий раз, когда приложение запустится.
Получите бревна для хлебной крошки
Журналы Breadcrumb дают вам лучшее понимание взаимодействий, которые пользователь имел с вашим приложением, ведущим к сбою, не-лечебным или ANR события. Эти журналы могут быть полезны при попытке воспроизвести и отладить проблему.
Журналы Breadcrumb работают от Google Analytics, поэтому для получения журналов Breadcrumb вам необходимо включить Google Analytics для вашего проекта Firebase и добавить Firebase SDK для Google Analytics в ваше приложение. Как только эти требования будут выполнены, журналы Breadcrumb автоматически включаются в данные события на вкладке журналов , когда вы просмотрите детали проблемы.
Analytics SDK автоматически регистрирует событие screen_view
, которое позволяет журналам Breadcrumb отображать список экранов, просмотренных перед сбоем, не-фатальными или ANR событие. Журнал screen_view
Breadcrumb содержит параметр firebase_screen_class
.
Журналы Breadcrumb также заполняются любыми пользовательскими событиями , которые вы вручную войдут в сеанс пользователя, включая данные параметров события. Эти данные могут помочь показать серию действий пользователя, ведущих к сбою, не фатальническому или ANR событию.
Обратите внимание, что вы можете управлять сбором и использованием данных Google Analytics , которые включают данные, которые заполняют журналы Breadcrumb.
Включить отчеты
По умолчанию Crashlytics автоматически собирает отчеты о сбоях для всех пользователей вашего приложения. Чтобы дать пользователям больше контроля над данными, которые они отправляют, вы можете включить отчетность, отключив автоматическую отчетность и отправив данные только в Crashlytics , когда вы решите в своем коде:
В блоке
application
вашего файлаAndroidManifest.xml
добавьтеmeta-data
тег для отключения автоматической коллекции:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
Включите коллекцию для выбора пользователей, вызывая переопределение сбора данных Crashlytics Data. Стоимость переопределения сохраняется в течение запуска вашего приложения, поэтому Crashlytics может автоматически собирать отчеты. Чтобы отказаться от автоматической отчетности по сбою, пройти
false
в качестве значения переопределения. При установке наfalse
новое значение не применяется до следующего запуска приложения.Kotlin+KTX
Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
Java
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
Управлять данными о сбоях
Crash Insights поможет вам решить проблемы, сравнивая ваши анонимные трассировки стека с трассами от других приложений Firebase и сообщив вам, является ли ваша проблема частью более широкой тенденции. Для многих проблем Crash Insights даже предоставляет ресурсы, чтобы помочь вам отладить аварию.
Crash Insights использует агрегированные данные о сбоях для выявления общих тенденций стабильности. Если вы предпочитаете не делиться данными вашего приложения, вы можете отказаться от сбоев в меню Crash Insights в верхней части вашего списка проблем Crashlytics в консоли Firebase .
,На приборной панели Crashlytics вы можете нажать на проблему и получить подробный отчет о событиях. You can customize those reports to help you better understand what's happening in your app and the circumstances around events reported to Crashlytics .
Instrument your app to log custom keys , custom log messages , and user identifiers .
Report exceptions to Crashlytics .
Automatically get breadcrumb logs if your app uses the Firebase SDK for Google Analytics . These logs give you visibility into user actions leading up to a Crashlytics -collected event in your app.
Turn off automatic crash reporting and enable opt-in reporting for your users. Note that, by default, Crashlytics automatically collects crash reports for all your app's users.
Add custom keys
Custom keys help you get the specific state of your app leading up to a crash. You can associate arbitrary key/value pairs with your crash reports, then use the custom keys to search and filter crash reports in the Firebase console.
In the Crashlytics dashboard , you can search for issues that match a custom key.
When you're reviewing a specific issue in the console, you can view the associated custom keys for each event ( Keys subtab) and even filter the events by custom keys ( Filter menu at the top of the page).
Use the setCustomKey
instance method to set key/value pairs. Note that setCustomKey
is overloaded for the value
parameter to accept any primitive or String
argument. Вот несколько примеров:
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 */);
You can also modify the value of an existing key by calling the key and setting it to a different 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");
Add key/value pairs in bulk by passing an instance of CustomKeysAndValues
to the setCustomKeys
instance method:
Kotlin+KTX
For Kotlin, the existing functionality is simpler than using the CustomKeysAndValues
builder.
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);
Add custom log messages
To give yourself more context for the events leading up to a crash, you can add custom Crashlytics logs to your app. Crashlytics associates the logs with your crash data and displays them in the Crashlytics page of the Firebase console , under the Logs tab.
Use log
to help pinpoint issues. Например:
Kotlin+KTX
Firebase.crashlytics.log("message")
Java
FirebaseCrashlytics.getInstance().log("message");
Set user identifiers
To diagnose an issue, it's often helpful to know which of your users experienced a given crash. Crashlytics includes a way to anonymously identify users in your crash reports.
To add user IDs to your reports, assign each user a unique identifier in the form of an ID number, token, or hashed value:
Kotlin+KTX
Firebase.crashlytics.setUserId("user123456789")
Java
FirebaseCrashlytics.getInstance().setUserId("user123456789");
If you ever need to clear a user identifier after you set it, reset the value to a blank string. Clearing a user identifier does not remove existing Crashlytics records. If you need to delete records associated with a user ID, contact Firebase support .
(Android NDK only) Add metadata to NDK crash reports
You can optionally include the crashlytics.h
header in your C++ code to add metadata to NDK crash reports, such as custom keys , custom logs , user identifiers . All these options are described on this page above.
crashlytics.h
is available as a header-only C++ library in the Firebase Android SDK GitHub Repository .
Read the comments in the header file for instructions on using the NDK C++ APIs.
Include GWP-ASan reports to debug memory corruption issues
Crashlytics can help you debug crashes caused by native memory errors by collecting GWP-ASan reports. Эти ошибки, связанные с памятью, могут быть связаны с повреждением памяти в вашем приложении, что является основной причиной уязвимостей безопасности приложений.
You can view this data in a new "Memory stack traces" tab when you click into an issue's details in the Crashlytics dashboard .
You can also use the new "GWP-ASan report" signal and filter to quickly view all issues with this data.
You can get GWP-ASan memory reports if you explicitly enable GWP-ASan in your app and use the Crashlytics SDK for NDK v18.3.6+ ( Firebase BoM v31.3.0+). You can test your GWP-ASan setup using the example native code in the Android documentation .
Report non-fatal exceptions
In addition to automatically reporting your app's crashes, Crashlytics lets you record non-fatal exceptions and sends them to you the next time your app launches.
Use the recordException
method to record non-fatal exceptions in your app's catch
blocks. Например:
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 как нефатальные проблемы. The issue summary contains all the state information you normally get from crashes, along with breakdowns by Android version and hardware device.
Crashlytics processes exceptions on a dedicated background thread to minimize the performance impact to your app. To reduce your users' network traffic, Crashlytics batches logged exceptions together and sends them the next time the app launches.
Get breadcrumb logs
Breadcrumb logs give you a better understanding of the interactions that a user had with your app leading up to a crash, non-fatal, or ANR event. These logs can be helpful when trying to reproduce and debug an issue.
Breadcrumb logs are powered by Google Analytics, so to get breadcrumb logs, you need to enable Google Analytics for your Firebase project and add the Firebase SDK for Google Analytics to your app. Once these requirements are met, breadcrumb logs are automatically included with an event's data within the Logs tab when you view the details of an issue.
The Analytics SDK automatically logs the screen_view
event which enables the breadcrumb logs to show a list of screens viewed before the crash, non-fatal, or ANR event. A screen_view
breadcrumb log contains a firebase_screen_class
parameter.
Breadcrumb logs are also populated with any custom events that you manually log within the user's session, including the event's parameter data. This data can help show a series of user actions leading up to a crash, non-fatal, or ANR event.
Note that you can control the collection and use of Google Analytics data , which includes the data that populates breadcrumb logs.
Enable opt-in reporting
By default, Crashlytics automatically collects crash reports for all your app's users. To give users more control over the data they send, you can enable opt-in reporting by disabling automatic reporting and only sending data to Crashlytics when you choose to in your code:
In the
application
block of yourAndroidManifest.xml
file, add ameta-data
tag to turn off automatic collection:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
Enable collection for select users by calling the Crashlytics data collection override at runtime. The override value persists across launches of your app so Crashlytics can automatically collect reports. To opt out of automatic crash reporting, pass
false
as the override value. When set tofalse
, the new value does not apply until the next run of the app.Kotlin+KTX
Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
Java
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
Manage Crash Insights data
Crash Insights helps you resolve issues by comparing your anonymized stack traces to traces from other Firebase apps and letting you know if your issue is part of a larger trend. For many issues, Crash Insights even provides resources to help you debug the crash.
Crash Insights uses aggregated crash data to identify common stability trends. If you'd prefer not to share your app's data, you can opt-out of Crash Insights from the Crash Insights menu at the top of your Crashlytics issue list in the Firebase console .
,In the Crashlytics dashboard, you can click into an issue and get a detailed event report. You can customize those reports to help you better understand what's happening in your app and the circumstances around events reported to Crashlytics .
Instrument your app to log custom keys , custom log messages , and user identifiers .
Report exceptions to Crashlytics .
Automatically get breadcrumb logs if your app uses the Firebase SDK for Google Analytics . These logs give you visibility into user actions leading up to a Crashlytics -collected event in your app.
Turn off automatic crash reporting and enable opt-in reporting for your users. Note that, by default, Crashlytics automatically collects crash reports for all your app's users.
Add custom keys
Custom keys help you get the specific state of your app leading up to a crash. You can associate arbitrary key/value pairs with your crash reports, then use the custom keys to search and filter crash reports in the Firebase console.
In the Crashlytics dashboard , you can search for issues that match a custom key.
When you're reviewing a specific issue in the console, you can view the associated custom keys for each event ( Keys subtab) and even filter the events by custom keys ( Filter menu at the top of the page).
Use the setCustomKey
instance method to set key/value pairs. Note that setCustomKey
is overloaded for the value
parameter to accept any primitive or String
argument. Вот несколько примеров:
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 */);
You can also modify the value of an existing key by calling the key and setting it to a different 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");
Add key/value pairs in bulk by passing an instance of CustomKeysAndValues
to the setCustomKeys
instance method:
Kotlin+KTX
For Kotlin, the existing functionality is simpler than using the CustomKeysAndValues
builder.
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);
Add custom log messages
To give yourself more context for the events leading up to a crash, you can add custom Crashlytics logs to your app. Crashlytics associates the logs with your crash data and displays them in the Crashlytics page of the Firebase console , under the Logs tab.
Use log
to help pinpoint issues. Например:
Kotlin+KTX
Firebase.crashlytics.log("message")
Java
FirebaseCrashlytics.getInstance().log("message");
Set user identifiers
To diagnose an issue, it's often helpful to know which of your users experienced a given crash. Crashlytics includes a way to anonymously identify users in your crash reports.
To add user IDs to your reports, assign each user a unique identifier in the form of an ID number, token, or hashed value:
Kotlin+KTX
Firebase.crashlytics.setUserId("user123456789")
Java
FirebaseCrashlytics.getInstance().setUserId("user123456789");
If you ever need to clear a user identifier after you set it, reset the value to a blank string. Clearing a user identifier does not remove existing Crashlytics records. If you need to delete records associated with a user ID, contact Firebase support .
(Android NDK only) Add metadata to NDK crash reports
You can optionally include the crashlytics.h
header in your C++ code to add metadata to NDK crash reports, such as custom keys , custom logs , user identifiers . All these options are described on this page above.
crashlytics.h
is available as a header-only C++ library in the Firebase Android SDK GitHub Repository .
Read the comments in the header file for instructions on using the NDK C++ APIs.
Include GWP-ASan reports to debug memory corruption issues
Crashlytics can help you debug crashes caused by native memory errors by collecting GWP-ASan reports. Эти ошибки, связанные с памятью, могут быть связаны с повреждением памяти в вашем приложении, что является основной причиной уязвимостей безопасности приложений.
You can view this data in a new "Memory stack traces" tab when you click into an issue's details in the Crashlytics dashboard .
You can also use the new "GWP-ASan report" signal and filter to quickly view all issues with this data.
You can get GWP-ASan memory reports if you explicitly enable GWP-ASan in your app and use the Crashlytics SDK for NDK v18.3.6+ ( Firebase BoM v31.3.0+). You can test your GWP-ASan setup using the example native code in the Android documentation .
Report non-fatal exceptions
In addition to automatically reporting your app's crashes, Crashlytics lets you record non-fatal exceptions and sends them to you the next time your app launches.
Use the recordException
method to record non-fatal exceptions in your app's catch
blocks. Например:
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 как нефатальные проблемы. The issue summary contains all the state information you normally get from crashes, along with breakdowns by Android version and hardware device.
Crashlytics processes exceptions on a dedicated background thread to minimize the performance impact to your app. To reduce your users' network traffic, Crashlytics batches logged exceptions together and sends them the next time the app launches.
Get breadcrumb logs
Breadcrumb logs give you a better understanding of the interactions that a user had with your app leading up to a crash, non-fatal, or ANR event. These logs can be helpful when trying to reproduce and debug an issue.
Breadcrumb logs are powered by Google Analytics, so to get breadcrumb logs, you need to enable Google Analytics for your Firebase project and add the Firebase SDK for Google Analytics to your app. Once these requirements are met, breadcrumb logs are automatically included with an event's data within the Logs tab when you view the details of an issue.
The Analytics SDK automatically logs the screen_view
event which enables the breadcrumb logs to show a list of screens viewed before the crash, non-fatal, or ANR event. A screen_view
breadcrumb log contains a firebase_screen_class
parameter.
Breadcrumb logs are also populated with any custom events that you manually log within the user's session, including the event's parameter data. This data can help show a series of user actions leading up to a crash, non-fatal, or ANR event.
Note that you can control the collection and use of Google Analytics data , which includes the data that populates breadcrumb logs.
Enable opt-in reporting
By default, Crashlytics automatically collects crash reports for all your app's users. To give users more control over the data they send, you can enable opt-in reporting by disabling automatic reporting and only sending data to Crashlytics when you choose to in your code:
In the
application
block of yourAndroidManifest.xml
file, add ameta-data
tag to turn off automatic collection:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
Enable collection for select users by calling the Crashlytics data collection override at runtime. The override value persists across launches of your app so Crashlytics can automatically collect reports. To opt out of automatic crash reporting, pass
false
as the override value. When set tofalse
, the new value does not apply until the next run of the app.Kotlin+KTX
Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
Java
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
Manage Crash Insights data
Crash Insights helps you resolve issues by comparing your anonymized stack traces to traces from other Firebase apps and letting you know if your issue is part of a larger trend. For many issues, Crash Insights even provides resources to help you debug the crash.
Crash Insights uses aggregated crash data to identify common stability trends. If you'd prefer not to share your app's data, you can opt-out of Crash Insights from the Crash Insights menu at the top of your Crashlytics issue list in the Firebase console .