flutter

플러터앱 Firebase Crashlytics 사용하기

Aug 23, 2021

Firebase Crashlytics ??

앱이 비정상적으로 종료되었을 경우 문제를 추적할 수 있게 해주는 툴이다.

앱버전, 디바이스 OS 버전, 디바이스명, 비정상종료 일시 등을 보여 주며, 오류가 발생했을 때 키, 로그, 데이터를 Clashlytics로 전달할 수 있다.

SDK 추가하기

파이어베이스 콘솔에서 Android, iOS앱에 각각 Crashlytics SDK를 추가해줘야 한다.

콘솔에서 ‘출시 및 모니터링’ 메뉴의 Crashlytics를 선택한다.

‘SDK추가’ 버튼을 선택해서 Crashlytics를 활성화 한다.

앱을 비정상적으로 종료시키면 모니터링 화면이 등장한다.

image

플러터 의존성 추가 & 다운로드

pubspec.yaml

dependencies:
  firebase_crashlytics: ^2.2.0

terminal

flutter pub get

Android 설정

android/build.gradle

dependencies {
  // ... other dependencies
  classpath 'com.google.gms:google-services:4.3.5'
  classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.1'
}

android/app/build.gradle

// ... other imports

android {
  // ... 안드로이드 설정
}

dependencies {
  // ... 의존성들
}

// 반드시 파일 최하단에 작성해야 한다.
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'

iOS 설정

xcode Runner 선택

image

Build Phases탭

’+’ 버튼

New Run Script Phase

image

${PODS_ROOT}/FirebaseCrashlytics/run 입력

image

앱 다시 빌드

terminal

flutter run

플러터 프로젝트

import 'package:firebase_crashlytics/firebase_crashlytics.dart';
void main() async {
	// ...

	await Firebase.initializeApp();

	// runZonedGuarded : 앱 실행중 강제 종료시 Firebase Crashlytics 보고
  runZonedGuarded(() {
    runApp(new MyApp());
  }, FirebaseCrashlytics.instance.recordError);
}

Crashlytics로 데이터를 전송하기 위해서는 반드시 애플리케이션을 재실행해야 합니다.

Crashlytics는 애플리케이션을 실행할 때 자동으로 모든 충돌 리포트를 전송합니다.

강제로 Crash 발생 시키기

crash 메서드를 사용해서 앱을 강제종료한다.

FirebaseCrashlytics.instance.crash();

Crash 타입

Fatal crash(치명적 오류)

await FirebaseCrashlytics.instance.recordError(
  error,
  stackTrace,
  reason: 'a fatal error',
  // Pass in 'fatal' argument
  fatal: true
);

Non-Fatal crash(심각하지 않음)

await FirebaseCrashlytics.instance.recordError(
  error,
  stackTrace,
  reason: 'a non-fatal error'
);

커스텀 키

setCustomKey 메서드를 이용해서 키/값 리포트를 전송할 수 있다.

최대 64개까지 설정가능하다. 그 이상은 무시된다. 1024길이가 초과하는 키 또는 값은 잘린다.

//string, boolean, int, long, float, double 가능하다.
FirebaseCrashlytics
.instance
.setCustomKey('Exception', 'LoginConfig.dart > getGoogleAccount()');

image

커스텀 로그 메시지 추가

log 메소드를 사용해서 로그를 전송할 수 있다.

FirebaseCrashlytics.instance.log("Hello Clashlytics!");

image

user identifiers 설정

고유한 유저 ID를 리포트에 추가할 수 있다. ID 숫자, 토큰, 해시값이어야 한다.

FirebaseCrashlytics.instance.setUserIdentifier("[unique-id]");

image