Firebase Crashlytics 시작하기


이 빠른 시작에서는 앱에서 Firebase Crashlytics를 설정하는 방법을 설명합니다. Crashlytics Flutter 플러그인과 함께 사용하면 포괄적인 비정상 종료를 경험할 수 있습니다. 보고서를Firebase 콘솔에서 확인할 수 있습니다.

Crashlytics를 설정하려면 명령줄 도구와 IDE를 모두 사용해야 합니다. 설정을 완료하려면 테스트 예외를 강제로 발생시켜 첫 번째 비정상 종료 보고서를 Firebase로 전송해야 합니다.

시작하기 전에

  1. Flutter 프로젝트에 아직 Firebase를 구성하지 않은 경우 Firebase를 구성하고 초기화합니다.

  2. 권장: 자동으로 탐색경로 로그 비정상 종료, 심각하지 않은 문제, ANR 이벤트로 이어지는 사용자 작업을 이해하고 Firebase 프로젝트에서 Google Analytics를 사용 설정해야 합니다.

    • 기존 Firebase 프로젝트에 Google Analytics가 없는 경우 Google Analytics를 사용 설정하면 Integrations > 프로젝트 설정 Firebase 콘솔에서 확인할 수 있습니다.

    • 새 Firebase 프로젝트를 만드는 경우 Google Analytics를 사용 설정합니다. 프로젝트 생성 워크플로에서 작성할 수 있습니다

    탐색경로 로그는 모든 Android 및 Apple 플랫폼에서 사용할 수 있습니다. Crashlytics에서 지원됩니다 (watchOS 제외).

1단계: Flutter 프로젝트에 Crashlytics 추가

  1. Flutter 프로젝트의 루트에서 다음 명령어를 실행하여 Crashlytics용 Flutter 플러그인을 설치합니다.

    GCP의 탐색경로 로그, 또한 Google Analytics용 Flutter 플러그인을 앱에 추가합니다. 그런 다음 Google 애널리틱스가 사용 설정됨 확인할 수 있습니다

    flutter pub add firebase_crashlytics && flutter pub add firebase_analytics
    
  2. Flutter 프로젝트의 루트 디렉터리에서 다음 명령어를 실행합니다.

    flutterfire configure
    

    이 명령어를 실행하면 Flutter 앱의 Firebase 구성이 이 최신 버전이며 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 CLI (v.11.9.0 이상)를 사용하여 업로드합니다. Flutter 디버그 기호 디버그 기호를 업로드하기 전에 난독화된 코드 빌드에서 비정상 종료 보고

      Flutter 프로젝트의 루트 디렉터리에서 다음 명령어를 실행합니다.

      firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/symbols
      • FIREBASE_APP_ID: 패키지 이름이 아닌 Firebase Android 앱 ID
        Firebase Android 앱 ID 예시: 1:567383003300:android:17104a2ced0c9b9b

      • PATH/TO/symbols: 애플리케이션을 빌드할 때 --split-debug-info 플래그에 전달하는 디렉터리와 동일한 디렉터리입니다.

2단계: 비정상 종료 핸들러 구성

FlutterError.onErrorFirebaseCrashlytics.instance.recordFlutterFatalError로 재정의하여 Flutter 프레임워크 내에서 발생하는 모든 오류를 자동으로 포착할 수 있습니다.

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. 테스트 예외를 강제로 발생시키는 데 사용할 수 있는 코드를 앱에 추가합니다.

    최상위 ZoneFirebaseCrashlytics.instance.recordError(error, stack, fatal: true)를 호출하는 오류 핸들러를 추가한 경우 다음 코드를 사용하여 누르면 테스트 예외를 발생시키는 버튼을 앱에 추가할 수 있습니다.

    TextButton(
        onPressed: () => throw Exception(),
        child: const Text("Throw Test Exception"),
    ),
    
  2. 앱을 빌드하고 실행합니다.

  3. 앱의 첫 번째 보고서를 전송하려면 테스트 예외를 강제로 발생시킵니다.

    1. 테스트 기기 또는 에뮬레이터에서 앱을 엽니다.

    2. 앱에서 위 코드를 사용하여 추가한 테스트 예외 버튼을 누릅니다.

  4. 다음으로 이동: Crashlytics 대시보드 Firebase 콘솔로 이동하여 테스트 비정상 종료를 확인합니다.

    Console을 새로고침하고 5분 후에도 테스트 비정상 종료가 표시되지 않으면 디버그 로깅을 사용 설정하여 앱에서 비정상 종료 보고서를 전송하는지 확인합니다.


모든 작업이 완료되었습니다. 이제 Crashlytics에서 앱의 비정상 종료 및 Android, 심각하지 않은 오류, ANR Crashlytics 대시보드 모든 보고서와 통계를 확인하고 조사할 수 있습니다.

다음 단계