Начните работу с Firebase Crashlytics

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

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

Прежде чем вы начнете

  1. Если вы еще этого не сделали, настройте и инициализируйте Firebase в своем проекте Flutter.

  2. Рекомендуется : чтобы автоматически получать журналы навигации и понимать действия пользователей, приведшие к сбою, нефатальному событию или событию ANR, вам необходимо включить Google Analytics в своем проекте Firebase.

    • Если в вашем существующем проекте Firebase не включен Google Analytics, вы можете включить Google Analytics на вкладке «Интеграции» вашего аккаунта. > Настройки проекта в консоли Firebase.

    • Если вы создаете новый проект Firebase, включите Google Analytics во время рабочего процесса создания проекта.

    Обратите внимание, что навигационные журналы доступны для всех платформ Android и Apple, поддерживаемых Crashlytics (кроме watchOS).

Шаг 1. Добавьте Crashlytics в свой проект Flutter.

  1. Из корня вашего проекта Flutter выполните следующую команду, чтобы установить плагин Flutter для Crashlytics.

    Чтобы воспользоваться преимуществами навигационных журналов , добавьте в свое приложение плагин Flutter для Google Analytics. Убедитесь, что Google Analytics включен в вашем проекте Firebase.

    flutter pub add firebase_crashlytics && flutter pub add firebase_analytics
    
  2. В корневом каталоге вашего проекта Flutter выполните следующую команду:

    flutterfire configure
    

    Выполнение этой команды гарантирует актуальность конфигурации Firebase вашего приложения Flutter, а для Android в ваше приложение добавляется необходимый плагин Crashlytics Gradle.

  3. После завершения перестройте проект Flutter:

    flutter run
    
  4. (Необязательно) Если ваш проект Flutter использует флаг --split-debug-info (и, при необходимости, также флаг --obfuscate ), потребуются дополнительные шаги, чтобы показать читаемые трассировки стека для ваших приложений.

    • Платформы Apple: убедитесь, что в вашем проекте используется рекомендуемая конфигурация версии (Flutter 3.12.0+ и плагин Crashlytics Flutter 3.3.4+), чтобы ваш проект мог автоматически генерировать и загружать символы Flutter (файлы dSYM) в Crashlytics.

    • Android: используйте интерфейс командной строки Firebase (версия 11.9.0+) для загрузки символов отладки Flutter. Вам необходимо загрузить символы отладки, прежде чем сообщать о сбое из-за запутанной сборки кода.

      В корневом каталоге вашего проекта Flutter выполните следующую команду:

      firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/symbols
      • FIREBASE_APP_ID : идентификатор вашего приложения Firebase для Android (а не имя вашего пакета).
        Пример идентификатора приложения Firebase для Android: 1:567383003300:android:17104a2ced0c9b9b

      • PATH/TO /symbols : тот же каталог, который вы передаете флагу --split-debug-info при сборке приложения.

Шаг 2. Настройте обработчики сбоев

Вы можете автоматически перехватывать все ошибки, возникающие в рамках Flutter, переопределяя FlutterError.onError с помощью FirebaseCrashlytics.instance.recordFlutterFatalError :

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Firebase.initializeApp();

  // Pass all uncaught "fatal" errors from the framework to Crashlytics
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;

  runApp(MyApp());
}

Чтобы перехватить асинхронные ошибки, которые не обрабатываются платформой Flutter, используйте PlatformDispatcher.instance.onError :

Future<void> main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    FlutterError.onError = (errorDetails) {
      FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
    };
    // Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
    PlatformDispatcher.instance.onError = (error, stack) {
      FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
      return true;
    };
    runApp(MyApp());

}

Примеры обработки других типов ошибок см. в разделе Настройка отчетов о сбоях .

Шаг 3. Принудительно завершите тестирование, чтобы завершить настройку.

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

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

    Если вы добавили обработчик ошибок, который вызывает FirebaseCrashlytics.instance.recordError(error, stack, fatal: true) в Zone верхнего уровня, вы можете использовать следующий код, чтобы добавить в приложение кнопку, которая при нажатии выдает тестовое исключение:

    TextButton(
        onPressed: () => throw Exception(),
        child: const Text("Throw Test Exception"),
    ),
    
  2. Создайте и запустите свое приложение.

  3. Принудительно выдайте тестовое исключение, чтобы отправить первый отчет вашего приложения:

    1. Откройте приложение на тестовом устройстве или в эмуляторе.

    2. В своем приложении нажмите кнопку тестового исключения, которую вы добавили с помощью приведенного выше кода.

  4. Перейдите на панель управления Crashlytics консоли Firebase, чтобы увидеть сбой вашего теста.

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


Вот и все! Crashlytics теперь отслеживает ваше приложение на предмет сбоев, а на Android — нефатальных ошибок и ошибок ANR. Посетите панель управления Crashlytics, чтобы просмотреть и изучить все ваши отчеты и статистику.

Следующие шаги