Настройте отчеты о сбоях для Android

Выберите платформу: iOS+ Android Flutter Unity


На панели управления Crashlytics вы можете щелкнуть по проблеме и получить подробный отчет о событии. Вы можете настроить эти отчеты, чтобы лучше понимать, что происходит в вашем приложении и каковы обстоятельства событий, о которых сообщается в Crashlytics .

Добавить пользовательские клавиши

Пользовательские ключи помогают получить информацию о конкретном состоянии приложения перед сбоем. Вы можете связать произвольные пары ключ-значение с отчетами о сбоях, а затем использовать пользовательские ключи для поиска и фильтрации отчетов о сбоях в консоли Firebase .

  • На панели Crashlytics вы можете искать проблемы, соответствующие пользовательскому ключу.

  • При просмотре конкретной проблемы в консоли вы можете увидеть связанные с каждым событием пользовательские ключи (вкладка «Ключи» ) и даже отфильтровать события по пользовательским ключам (меню «Фильтр» в верхней части страницы).

Используйте метод экземпляра 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 в консоли 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 .

Для получения инструкций по использованию API NDK C++ ознакомьтесь с комментариями в заголовочном файле.

Включите отчеты GWP-ASan для отладки проблем, связанных с повреждением памяти.

Crashlytics может помочь вам отлаживать сбои, вызванные ошибками нативной памяти, путем сбора отчетов GWP-ASan. Эти ошибки, связанные с памятью, могут быть связаны с повреждением памяти в вашем приложении, что является основной причиной уязвимостей безопасности приложений.

  • Эти данные можно просмотреть на новой вкладке «Трассировка стека памяти», перейдя к подробной информации о проблеме на панели мониторинга Crashlytics .

  • Также вы можете использовать новый сигнал и фильтр "Отчет GWP-ASan", чтобы быстро просмотреть все проблемы, связанные с этими данными.

Вы можете получать отчеты о памяти GWP-ASan, если явно включите GWP-ASan в своем приложении и используете Crashlytics SDK для 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 как некритические проблемы. Сводка по проблемам содержит всю информацию о состоянии, которую вы обычно получаете при сбоях, а также разбивку по версии Android и аппаратному устройству.

Crashlytics обрабатывает исключения в выделенном фоновом потоке, чтобы минимизировать влияние на производительность вашего приложения. Для уменьшения сетевого трафика пользователей Crashlytics объединяет зарегистрированные исключения в пакеты и отправляет их при следующем запуске приложения.

Получите хлебные крошки

Журналы "хлебных крошек" позволяют лучше понять взаимодействие пользователя с вашим приложением, предшествовавшее сбою, некритической ошибке или событию ANR. Эти журналы могут быть полезны при попытке воспроизвести и отладить проблему.

Отслеживание событий с помощью Google Analytics осуществляется на основе навигационной цепочки, поэтому для получения таких данных необходимо включить Google Analytics для вашего проекта Firebase и добавить SDK Firebase для Google Analytics в ваше приложение. После выполнения этих требований данные автоматически будут добавляться к данным события на вкладке «Журналы» при просмотре подробностей проблемы.

Analytics SDK автоматически регистрирует событие screen_view , что позволяет отображать в навигационной цепочке список экранов, просмотренных до сбоя, некритического события или события ANR. В навигационной цепочке screen_view содержится параметр firebase_screen_class .

В журналы "хлебных крошек" также добавляются любые пользовательские события , которые вы регистрируете вручную в рамках сеанса пользователя, включая данные параметров события. Эти данные могут помочь отобразить последовательность действий пользователя, приведших к сбою, некритическому событию или событию ANR.

Обратите внимание, что вы можете контролировать сбор и использование данных Google Analytics , включая данные, используемые для заполнения навигационной цепочки.

Включить возможность добровольной подачи отчетов

По умолчанию Crashlytics автоматически собирает отчеты о сбоях для всех пользователей вашего приложения. Чтобы предоставить пользователям больше контроля над отправляемыми данными, вы можете включить отправку отчетов по желанию, отключив автоматическую отправку и отправляя данные в Crashlytics только тогда, когда вы сами этого захотите в своем коде.

  1. В блоке application файла ` AndroidManifest.xml добавьте метатег meta-data , чтобы отключить автоматический сбор данных:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. Включите сбор данных для отдельных пользователей, вызвав переопределение метода сбора данных 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 в верхней части списка проблем Crashlytics в консоли Firebase .