Как начать работу с Crashlytics для Flutter

Выберите платформу: iOS+ Android Android NDK Flutter Unity


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

После настройки плагина Crashlytics Flutter в приложении вы сможете получать подробные отчеты о сбоях в консоли Firebase.

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

Подготовка

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

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

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

    • Если вы используете существующий проект Firebase, в котором не включен сервис Google Analytics, вы можете включить его на странице Settings (Настройки) > Integrations (Интеграции) в консоли Firebase.

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

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

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

    Чтобы использовать историю действий, добавьте в приложение плагин Flutter для Google Analytics. Убедитесь, что в проекте Firebase включена Google Аналитика.

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

    flutterfire configure
    

    Эта команда обновит конфигурацию Firebase в приложении Flutter и добавит в него плагин Crashlytics Gradle (для Android).

  3. После этого пересоберите проект Flutter:

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

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

    • Android. Используйте CLI 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. В консоли Firebase перейдите в раздел DevOps & Engagement (DevOps и взаимодействие) > Crashlytics dashboard (Панель управления) и проверьте, появился ли тестовый отчет о сбое.

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


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

Дальнейшие действия