В этом кратком руководстве описывается, как настроить Firebase Crashlytics в вашем приложении с помощью плагина Crashlytics Flutter, чтобы вы могли получать подробные отчеты о сбоях в консоли Firebase .
Настройка Crashlytics включает использование как командной строки, так и вашей IDE. Для завершения настройки вам потребуется принудительно сгенерировать тестовое исключение для отправки первого отчёта о сбое в Firebase.
Прежде чем начать
- Если вы еще этого не сделали, настройте и инициализируйте Firebase в своем проекте Flutter. 
- Рекомендуется : для автоматического получения журналов хлебных крошек для понимания действий пользователя, приводящих к сбою, нефатальному событию или событию ANR, вам необходимо включить Google Analytics в вашем проекте Firebase. - Если в вашем существующем проекте Firebase не включен Google Analytics , вы можете включить Google Analytics на вкладке «Интеграции» вашего проекта. - > Настройки проекта в консоли Firebase . 
- Если вы создаете новый проект Firebase, включите Google Analytics во время процесса создания проекта. 
 - Обратите внимание, что журналы навигации доступны для всех платформ Android и Apple, поддерживаемых Crashlytics (кроме watchOS). 
Шаг 1 : Добавьте Crashlytics в свой проект Flutter
- Из корня вашего проекта Flutter выполните следующую команду, чтобы установить плагин Flutter для Crashlytics . - Чтобы воспользоваться журналами навигации , добавьте в приложение плагин Flutter для Google Analytics . Убедитесь, что Google Analytics включен в вашем проекте Firebase. - flutter pub add firebase_crashlytics && flutter pub add firebase_analytics
- Из корневого каталога вашего проекта Flutter выполните следующую команду: - flutterfire configure- Выполнение этой команды гарантирует, что конфигурация Firebase вашего приложения Flutter актуальна, а для Android добавляет в ваше приложение требуемый плагин Crashlytics Gradle. 
- После завершения пересоберите свой проект Flutter: - flutter run
- (Необязательно) Если в вашем проекте Flutter используется флаг - --split-debug-info(и, при необходимости, также флаг- --obfuscate), для отображения читаемых трассировок стека для ваших приложений требуются дополнительные шаги.- Платформы Apple: убедитесь, что ваш проект использует рекомендуемую конфигурацию версии (Flutter 3.12.0+ и плагин Flutter Crashlytics 3.3.4+), чтобы ваш проект мог автоматически генерировать и загружать символы Flutter (файлы dSYM) в Crashlytics . 
- Android: Используйте Firebase CLI (версии 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- Вот два способа найти идентификатор приложения Firebase: - В файле - google-services.jsonваш идентификатор приложения — это значение- mobilesdk_app_id; или
- В консоли Firebase перейдите в настройки проекта . Прокрутите вниз до карточки «Ваши приложения» , затем нажмите на нужное приложение Firebase, чтобы узнать его идентификатор. 
 
- 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 , необходимо принудительно вызвать тестовое исключение.
- Добавьте в свое приложение код, который можно использовать для принудительного вызова тестового исключения. - Если вы добавили обработчик ошибок, который вызывает - FirebaseCrashlytics.instance.recordError(error, stack, fatal: true)в- Zoneверхнего уровня, вы можете использовать следующий код, чтобы добавить в свое приложение кнопку, при нажатии которой будет выдаваться тестовое исключение:- TextButton( onPressed: () => throw Exception(), child: const Text("Throw Test Exception"), ),
- Создайте и запустите свое приложение. 
- Принудительно вызовите тестовое исключение, чтобы отправить первый отчет вашего приложения: - Откройте приложение на тестовом устройстве или эмуляторе. 
- В вашем приложении нажмите кнопку тестового исключения, которую вы добавили с помощью кода выше. 
 
- Перейдите на панель управления Crashlytics консоли Firebase , чтобы увидеть краш вашего теста. - Если вы обновили консоль и по прошествии пяти минут сбой теста так и не появился, включите ведение журнала отладки, чтобы проверить, отправляет ли ваше приложение отчеты о сбоях. 
 Вот и всё! Crashlytics теперь отслеживает сбои вашего приложения, а также нефатальные ошибки и ошибки ANR на Android. Посетите панель управления Crashlytics , чтобы просмотреть и проанализировать все ваши отчёты и статистику.
Следующие шаги
- Настройте параметры отчетов о сбоях , добавив отчеты по желанию, журналы, ключи и отслеживание дополнительных нефатальных ошибок. 
- Интеграция с Google Play позволит вам фильтровать отчёты о сбоях вашего Android-приложения по треку Google Play прямо на панели управления Crashlytics . Это позволит вам лучше сфокусировать панель управления на конкретных сборках. 
- Просматривайте трассировки стека и статистику сбоев вместе с кодом с помощью окна App Quality Insights в Android Studio (доступно начиная с Electric Eel 2022.1.1).