| Выберите платформу: | iOS+ Android Flutter Unity |
Чтобы посмотреть подробный отчет о событии, нажмите на проблему на панели управления DevOps & Engagement (DevOps и вовлечение) > Crashlytics в консоли Firebase. Вы можете настраивать эти отчеты, чтобы лучше понимать, что происходит в вашем приложении и при каких обстоятельствах происходят события, о которых сообщается в Crashlytics.
Настройте приложение так, чтобы в нем регистрировались специальные ключи, специальные сообщения в журнале и идентификаторы пользователей.
Сообщайте об исключениях в Crashlytics.
Если в вашем приложении используется Firebase SDK для Google Analytics, вы будете автоматически получать историю действий пользователя. Эти журналы позволяют узнать, какие действия пользователя привели к событию, зарегистрированному Crashlytics в вашем приложении.
Отключите автоматическую отправку отчетов о сбоях и включите отправку отчетов по запросу для пользователей. Обратите внимание, что по умолчанию Crashlytics автоматически собирает отчеты о сбоях для всех пользователей вашего приложения.
Добавить специальные ключи
Специальные ключи помогают определить, в каком состоянии находилось приложение перед сбоем. Вы можете связать произвольные пары "ключ-значение" с отчетами о сбоях, а затем использовать специальные ключи для поиска и фильтрации отчетов о сбоях на панели управления DevOps & Engagement (DevOps и вовлеченность) > Crashlytics в консоли Firebase.
Вы можете искать проблемы, соответствующие пользовательскому ключу.
При просмотре определенной проблемы в консоли вы можете увидеть связанные с ней специальные ключи для каждого события (вложенная вкладка Ключи) и даже отфильтровать события по специальным ключам (меню Фильтр в верхней части страницы).
Чтобы задать пары "ключ-значение", используйте метод экземпляра setCustomKey. Обратите внимание, что метод setCustomKey перегружен для параметра value, чтобы принимать любой примитивный аргумент или аргумент String. Вот несколько примеров:
Kotlin
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
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
Для 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 на панели управления DevOps & Engagement (DevOps и вовлечение) > Crashlytics.
Используйте log, чтобы выявлять проблемы. Пример:
Kotlin
Firebase.crashlytics.log("message")
Java
FirebaseCrashlytics.getInstance().log("message");
Как задать идентификаторы пользователей
Чтобы диагностировать проблему, часто бывает полезно знать, у кого из пользователей произошел сбой. Crashlytics позволяет анонимно идентифицировать пользователей в отчетах о сбоях.
Чтобы добавить идентификаторы пользователей в отчеты, назначьте каждому пользователю уникальный идентификатор в виде номера, токена или значения хеша.
Kotlin
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.
Инструкции по использованию NDK C++ API приведены в комментариях в заголовочном файле.
Включать отчеты GWP-ASan для отладки проблем с повреждением памяти
Crashlytics может помочь вам отладить сбои, вызванные ошибками нативной памяти, собирая отчеты GWP-ASan. Ошибки памяти могут быть связаны с повреждением памяти в приложении, что является основной причиной уязвимостей в системе безопасности.
В консоли Firebase на панели DevOps & Engagement (DevOps и вовлечение) > Crashlytics вы можете:
Эти данные можно посмотреть на новой вкладке "Трассировки стека памяти" в сведениях об ошибке.
Вы можете использовать новый сигнал и фильтр "Отчет GWP-ASan", чтобы быстро находить все проблемы с этими данными.
Чтобы получать отчеты об ошибках памяти от GWP-ASan, включите GWP-ASan в своем приложении и используйте SDK Crashlytics для NDK версии 18.3.6 или более поздней (Firebase BoM версии 31.3.0 или более поздней). Проверить настройки GWP-ASan можно с помощью примера нативного кода в документации Android.
Как сообщать о некритических исключениях
Crashlytics не только автоматически сообщает о сбоях в работе приложения, но и позволяет регистрировать некритические исключения и отправляет их вам при следующем запуске приложения.
Используйте метод recordException, чтобы регистрировать некритические исключения в блоках catch приложения. Пример:
Kotlin
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 }
Кроме того, вы можете прикрепить пользовательские ключи к определенной некритической ошибке. Пример:
Kotlin
try { methodThatThrows() } catch (e: Exception) { Firebase.crashlytics.recordException(e) { key("string key", "string value") key("boolean key", true) key("float key", Float.MAX_VALUE) } // handle your exception here }
Java
try { methodThatThrows(); } catch (Exception e) { CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder() .putString("string key", "string value") .putBoolean("boolean key", true) .putFloat("float key", Float.MAX_VALUE) .build(); FirebaseCrashlytics.getInstance().recordException(e, keysAndValues); // handle your exception here }
Все зарегистрированные исключения отображаются как некритические ошибки на панели управления Firebase в разделе DevOps & Engagement (DevOps и взаимодействие) > Crashlytics. В сводке по проблеме содержится вся информация о состоянии, которую вы обычно получаете при сбоях, а также разбивка по версиям Android и аппаратным устройствам.
Crashlytics обрабатывает исключения в отдельном фоновом потоке, чтобы минимизировать влияние на производительность приложения. Чтобы сократить сетевой трафик пользователей, Crashlytics объединяет зарегистрированные исключения в пакеты и отправляет их при следующем запуске приложения.
Как получить историю действий пользователя
История действий пользователя позволяет лучше понять, что он делал в приложении до того, как произошел сбой, некритическая ошибка или ошибка ANR. Эти журналы могут быть полезны при попытке воспроизвести и отладить проблему.
Истории действий пользователя создаются с помощью Google Аналитики, поэтому вам нужно включить Google Аналитику для проекта Firebase и добавить Firebase SDK для Google Analytics в приложение. После этого истории действий пользователя будут автоматически добавляться к данным о событиях на вкладке Журналы при просмотре сведений о проблеме. Все проблемы можно посмотреть в консоли Firebase на панели управления DevOps и взаимодействие > Crashlytics.
SDK Analytics автоматически регистрирует событие 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 может автоматически собирать отчеты для этого пользователя.
Kotlin
Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
Java
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
Если пользователь позже откажется от сбора данных, вы можете передать значение
false, которое будет применено при следующем запуске приложения и сохранится для всех последующих запусков.
Управление данными Crash Insights
Crash Insights помогает устранять проблемы, сравнивая анонимизированные трассировки стека с трассировками из других приложений Firebase и сообщая, является ли ваша проблема частью более крупной тенденции. Для многих проблем Crash Insights даже предоставляет ресурсы, которые помогут вам отладить сбой.
Crash Insights использует агрегированные данные о сбоях, чтобы выявлять общие тенденции стабильности. Если вы не хотите делиться данными своего приложения, вы можете отключить Crash Insights в меню Crash Insights в верхней части списка проблем на панели управления DevOps & Engagement (DevOps и вовлечение) > Crashlytics в консоли Firebase.
Дальнейшие действия
- Экспортируйте данные в BigQuery или Cloud Logging, чтобы выполнять расширенный анализ и использовать дополнительные функции, например запрашивать данные, создавать собственные сводки и настраивать специальные оповещения.