Настройте отчеты о сбоях 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 v18.3.6+ ( Firebase BoM v31.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 объединяет зарегистрированные исключения вместе и отправляет их при следующем запуске приложения.

Получить навигационные крошки

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

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

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

Журналы Breadcrumb также заполняются любыми пользовательскими событиями , которые вы вручную регистрируете в сеансе пользователя, включая данные параметров события. Эти данные могут помочь отобразить ряд действий пользователя, которые привели к сбою, нефатальному событию или событию 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 .