| Выберите платформу: | iOS+ Android Flutter Unity |
Нажмите на проблему, чтобы получить подробный отчет о событии на панели управления DevOps & Engagement > Crashlytics в консоли Firebase. Вы можете настроить эти отчеты, чтобы лучше понимать, что происходит в вашем приложении, и обстоятельства, связанные с событиями, которые передаются в Crashlytics.
Добавьте в приложение код, который будет регистрировать специальные ключи, специальные сообщения журнала и идентификаторы пользователей.
Сообщайте о исключениях в Crashlytics.
Автоматически получать журналы хлебных крошек, если в приложении используется Firebase SDK для Google Analytics. Эти журналы позволяют отслеживать действия пользователей, которые привели к событию, собранному Crashlytics в вашем приложении.
Отключите автоматическую отправку отчетов о сбоях и включите отправку отчетов по запросу для пользователей. Обратите внимание, что по умолчанию Crashlytics автоматически собирает отчеты о сбоях для всех пользователей вашего приложения.
Как добавить специальные ключи
Специальные ключи помогают получить информацию о состоянии приложения непосредственно перед сбоем. Вы можете связать с отчетами о сбоях произвольные пары "ключ-значение", а затем использовать специальные ключи для поиска и фильтрации отчетов на панели DevOps & Engagement > 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 связывает журналы с данными о сбоях и показывает их на вкладке Журналы, когда вы просматриваете сведения о проблеме (все проблемы можно найти на панели управления Crashlytics в разделе DevOps и вовлечение консоли Firebase).
Используйте 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. Эти ошибки могут быть связаны с повреждением памяти в приложении, которое является основной причиной уязвимостей в системе безопасности.
На панели DevOps & Engagement (DevOps и вовлеченность) > Crashlytics консоли Firebase вы можете выполнять с этими данными следующие действия:
Эти данные можно посмотреть на новой вкладке "Трассировки стека памяти", нажав на проблему.
Вы можете использовать новый сигнал "Отчет 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 }
Все зарегистрированные исключения отображаются как некритические проблемы на панели DevOps & Engagement > Crashlytics в консоли Firebase. В сводке проблемы содержится вся информация о состоянии, которую вы обычно получаете при сбоях, а также разбивка по версии Android и модели устройства.
Crashlytics обрабатывает исключения в отдельном фоновом потоке, чтобы не снижать производительность приложения. Чтобы уменьшить сетевой трафик пользователей, Crashlytics объединяет зарегистрированные исключения в пакеты и отправляет их при следующем запуске приложения.
Как получить журналы навигации
Журналы навигации позволяют лучше понять, как пользователь взаимодействовал с приложением до сбоя, некритической ошибки или события ANR. Эти журналы могут быть полезны при попытке воспроизвести и отладить проблему.
Журналы цепочки навигации создаются на основе данных Google Аналитики, поэтому, чтобы их получать, вам нужно включить Google Аналитику для проекта Firebase и добавить в приложение Firebase SDK для Google Analytics. После этого журналы цепочки навигации будут автоматически включаться в данные о событиях на вкладке Журналы при просмотре сведений о проблеме (все проблемы можно найти на панели DevOps и вовлеченность > Crashlytics в консоли Firebase).
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 может автоматически собирать отчеты для этого пользователя.
Kotlin
Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
Java
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
Если пользователь позже откажется от сбора данных, вы можете передать значение
falseв качестве переопределения. Оно будет применено при следующем запуске приложения и сохранится при всех последующих запусках.
Как управлять данными о сбоях
С помощью Crash Insights вы можете устранять проблемы, сравнивая анонимизированные трассировки стека с трассировками из других приложений Firebase и узнавая, является ли ваша проблема частью более масштабной тенденции. Для многих проблем Crash Insights даже предоставляет ресурсы, которые помогут вам отладить сбой.
Инструмент "Аналитика сбоев" использует агрегированные данные о сбоях, чтобы выявлять общие тенденции стабильности. Если вы не хотите делиться данными приложения, вы можете отключить функцию "Анализ сбоев" в меню Анализ сбоев вверху списка проблем на панели DevOps и вовлеченность > Crashlytics в консоли Firebase.
Дальнейшие действия
- Экспортируйте данные в BigQuery или Cloud Logging, чтобы использовать расширенные функции анализа, например отправлять запросы к данным, создавать собственные сводки и настраивать специальные оповещения.