스터디/Android+Kotlin

Android Kotlin Firebase Crashlytics | 개발자 상세 사용방법

Dalmangyi 2021. 6. 17.

안드로이드 앱에서는 Firebase를 이용하면 가장 간단하게 앱의 오류를 보고 받을 수 있습니다.

이번 게시물은 Fabric이 아닌 Firebase Crashlytics 입니다.

 

 

설치 방법

설치방법은 공식문서 한국어 버전에서는 Android가 나오지 않기 때문에, 영어버전의 공식문서를 봐야 합니다.

https://firebase.google.com/docs/crashlytics/get-started?platform=android

 

 

Firebase Crashlytics

Firebase의 Crashlytics를 연동하면

실시간은 아니지만 앱 사용도중 문제가 발생하면, 문제 별로 정리해서 받을 수 있습니다.

앱의 버전, 강종의 코드 위치, 발생한 사용자 수, 발생한 이벤트 수 까지 알 수 있습니다.

 

 

 

 

 

 

 

 

Event 상세모습

이렇게 이벤트를 눌러보면,

몇 버전의 앱에서, 앱을 구동하는 Android O.S 버전, 실행한 기기명, 시간,

그리고 '스택 추적' 탭에서 어떤 이유로 에러가 발생했는지,

에러가 어떤 코드에서 발생했는지 정확히 알 수 있습니다.

 

 

 

 

 

 

 

 

 

 

상세 이벤트 구별방법

Firebase에서는 맞춤 키(CustomKey)를 사용하면, 앱의 구체적인 상태를 확인할 수 있습니다.

임의의 키-값을 정해서 Crashlytics에 연결할 수 있고, Event 상세 화면에서 볼 수 있습니다.

//value = sting, boolean, double, float, int
FirebaseCrashlytics.getInstance().setCustomKey("key", value)

5가지 데이터 유형(string, boolean, double, float, int)으로 키를 설정 할 수 있습니다.

 

세팅된 기기에서 에러가 발생하면, '키' 탭에서 미리 세팅된 맞춤 키(CustomKey)를 확인해 볼 수 있습니다.

저는 기기의 Id(DeviceId)와 사이트 Id(SiteId)를 적어두었습니다.

 

*아래 방법은 유저를 식별할 때는 setUserId 함수 이용을 추천합니다.

FirebaseCrashlytics.getInstance().setUserId("")

 

 

 

 

 

 

 

 

 

 

 

상황을 추적하는 방법

에러가 발생하기 전에 로그를 세팅해 두면, 어떤 상황에서 에러가 발생한건지 재현하기 쉬워집니다.

FirebaseCrashlytics.getInstance().log("")

화면마다 로그를 실행하거나, 버튼이 로그를 실행하면, 사용자의 좀 더 정확한 상황을 추적할 수 있습니다.

로그를 직접 실행하지 않아도 화면정보는 기본적으로 로그로 남겨집니다.

SplashActivity에서 MainActivity로 이동하고, 후에 에러를 발생한것을 알 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

심각하지 않은 에러를 기록하는 방법

에러가 의심되는 부분에는 try..catch를 사용하곤 합니다.

catche된 에러 조차 받고 싶을때는 recordException 함수를 사용하면 됩니다.

try{
    throw RuntimeException("Test Exception")
}
catch (e:Exception){
    FirebaseCrashlytics.getInstance().recordException(e)
}

 

 

 

 

 

 

 

 

 

 

오류를 보내지 않는 방법

디버그 환경이나, 특정 환경에서 오류 보고를 멈춰야 할 때가 있습니다.

1. AndroidManifest.xml을 이용한 방법

//build.gradle(:app)
productFlavors {

     //Company
     Company1 {
         dimension "company"

         manifestPlaceholders = [
             ENABLE_CRASH_REPORTING:"true"
         ]
     }
     ...
}

flavors를 사용하고 있다면, 먼저 build.gradle(:app)에 manifestPlaceholders와 ENABLE_CRASH_REPORTING을 설정합니다.

 

//AndroidManifest.xml
<application>
	...
    <!-- Crash Report -->
    <meta-data 
        android:name="firebase_crashlytics_collection_enabled"
        android:value="${ENABLE_CRASH_REPORTING}"/>
    ...
</application>

AndroidManifest.xml의 application 태그 밑에 meta-data 태그를 설정해서 오류를 보내지 않도록 설정해 줍니다.

 

 

 

2. 코드를 이용한 방법

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG)

BuildConfig.DEBUG를 이용하면 디버그가 아닌 환경에서만 Crashlytics를 동작하게 할 수 있습니다.

 

 

 

 

 

 

동작 구조

에러처리를 백그라운드 쓰레드에서 처리 합니다.

그래서 앱 성능에 최소한으로 영향을 줍니다.

 

네트워크 트래픽을 줄이기 위해,

인터넷이 가능한 시점에 에러를 그룹화하여 전송합니다.

이 때문에 에러가 가끔은 늦게 오거나, 여러 에러가 동시에 도착하곤 합니다.

 

에러 데이터는 /data/data/{app-package}/firebase 경로에 sqlite로 관리됩니다.

 

 

 

 

 

 

 

마무리

오류보고툴이 정말 쉽고 편리하게 볼 수 있는건 Firebase만한게 없다고 생각합니다.

심지어 프로젝트마다 서버를 구현하지 않아도 구동이 가능하니 너무 좋습니다.

 

두번쓰세요! 아니 계속 쓰세요!

댓글