Настройте отчеты о сбоях Firebase Crashlytics


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

  • Автоматически получайте журналы навигации , если ваше приложение использует Firebase SDK для Google Analytics . Эти журналы позволяют отслеживать действия пользователя, приводящие к событию в вашем приложении, собранному 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 и добавить Firebase SDK для 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 .