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


This quickstart describes how to set up Firebase Crashlytics in your app with the Crashlytics Flutter plugin so that you can get comprehensive crash reports in the Firebase console.

Настройка 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 .

    To take advantage of breadcrumb logs , also add the Flutter plugin for Google Analytics to your app. Make sure that Google Analytics is enabled in your Firebase project.

    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+ и плагин Flutter Crashlytics 3.3.4+), чтобы ваш проект мог автоматически генерировать и загружать символы Flutter (файлы dSYM) в Crashlytics .

    • Android: Use the Firebase CLI (v.11.9.0+) to upload Flutter debug symbols. You need to upload the debug symbols before reporting a crash from an obfuscated code build.

      Из корневого каталога вашего проекта 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());

}

For examples of how to handle other types of errors, see Customize crash reports .

Шаг 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 , чтобы увидеть краш вашего теста.

    If you've refreshed the console and you're still not seeing the test crash after five minutes, enable debug logging to see if your app is sending crash reports.


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

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