본문 바로가기
Development/Android

[Android] Firebase - 5. Crashlytics로 앱 크래쉬 추적하기

by du.it.ddu 2020. 12. 16.
반응형

열심히 개발한 앱을 플레이스토어에 배포했다고 가정해보자.
나름 열심히 예외처리도 했을 것이다.

사용자가 어떤 행동을 할 지 모르고, 어떤 예외가 발생하여 앱이 죽을지 모른다.
그리고 앱이 죽었을 때 이유조차 알기 어려운 경우가 있다. 물론, 구글 플레이 콘솔에서 확인할 수 있기도 하다.

하지만 이런 크래쉬를 좀 더 세세하고 보기좋게 확인할 수 있는 서비스가 Firebase의 Crashlytics이다.


1. Crashlytics 활성화

Firebase 콘솔로 이동하여 "출시 및 모니터링"의 "Crashlytics"로 이동한다.
그리고 "Crashlytics 사용 설정" 을 누른다.

그럼 아마 이런 화면으로 바뀔것이다. 문구를 잘 읽어보면, 앱을 빌드하고 비정상 종료하라고 가이드하고 있다.
이제 Crashlytics를 연동하고 비정상 종료를 해 보자.


2. 앱에 Crashlytics 연동하기

우선 앱에서 Crashlytics에 오류를 보고하기 위해 거쳐야 할 절차가 몇가지 있다.
firebase.google.com/docs/crashlytics/get-started?platform=android&authuser=1#add-sdk

 

Firebase Crashlytics 시작하기

Fabric 종료: 기존 Fabric SDK 및 이전 버전의 Firebase Crashlytics SDK는 이제 지원 중단되며 2020년 11월 15일부터 앱의 비정상 종료를 더 이상 보고하지 않습니다. Fabric에서 앱을 마이그레이션했으며 Firebase

firebase.google.com

문서를 참고하는 것도 좋다.

buildscript {
    ...
    repositories {
        ...
    }
    dependencies {
        ...
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

...

우선 프로젝트 레벨의 build.gradle로 이동하여 dependencies에 "com.google.firebase:firebase-crashlytics-gradle:2.4.1" 를 추가해준다.

plugins {
    ...
    id 'com.google.firebase.crashlytics'
}

android {
    ...
}

dependencies {
    ...
    
    implementation platform('com.google.firebase:firebase-bom:26.1.1')
    implementation 'com.google.firebase:firebase-crashlytics'
    ... // other firebase services
}

그리고 앱 레벨의 build.gradle로 이동하여 "com.google.firebase.crashlytics" 플러그인을 추가하고
dependencies에 "implementation 'com.google.firebase:firebase-crashlytics" 를 추가한다.


3. 앱을 강제로 비정상종료 하기

class MainActivity : AppCompatActivity() {
    ...
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ...

        binding.btnGoogle.setOnClickListener {
            throw IllegalStateException("Firebase Crashlytics Test")
//            signInWithGoogle() 
        }
        ...
    }

    ...
}

간단하게 버튼을 클릭하면 Exception을 throw 하도록 하였다.
연동을 위해 강제로 하는 것이니, 편한대로 하면 된다.


Crashlytics에 리포트가 제대로 안 될 수도 있고, 반영되는데 시간이 오래걸릴 수 있다. 크래쉬를 발생시키고 몇 분정도 기다린 후 리포트가 안되었다면 다시 시도해보자.

성공하면 아래와 같은 화면을 볼 수 있다.

종합적인 비정상 종료의 수와 영향을 받은 사용자를 알 수 있다.
그리고 어느 부분에서 비정상 종료가 발생했는지, 각 비정상 종료마다 얼마나 발생되었고 얼마나 많은 사용자에게 발생했는지도 알 수 있다.

하단 목록에서 특정 크래쉬를 선택하면 더 자세하게 볼 수 있다.
어떤 버전에서 발생했고 기기는 무엇이고 OS는 무엇인지.
그리고 Exception 로그까지 확인할 수 있다.


 

4. 커스텀 로그 삽입하기

firebase.google.com/docs/crashlytics/customize-crash-reports?hl=en&platform=android

 

Firebase Crashlytics 오류 보고서 맞춤설정

iOS Android Unity 참고: 이 가이드에는 Crashlytics의 공식 SDK인 Firebase Crashlytics SDK에 대한 안내가 포함되어 있습니다. Fabric SDK에 대한 안내는 기존 가이드를 참조하세요. Fabric SDK는 현재 지원 중단되었

firebase.google.com

문서를 참고하는게 더 좋을 수 있다.

class MainActivity : AppCompatActivity() {
    ...
    private val crashlytics: FirebaseCrashlytics by lazy {
        FirebaseCrashlytics.getInstance()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ...

        crashlytics.run {
            setUserId("SomeUserId")
            setCustomKey("userKey", 123456789)
            setCustomKey("customKey", "customValue")
        }

        crashlytics.log("Firebase Crashlytics Custom log!")

        binding.btnGoogle.setOnClickListener {
            throw IllegalStateException("Firebase Crashlytics Custom logging Test")
        }
        ...
    }
    ...
}

FirebaseCrashlytics 객체를 얻어온 후 setUserId 혹은 setCustomKey를 통해 크래쉬 로그에서 확인하고자 하는 값을 세팅한다. 특정 유저에 대한 로그를 확인하거나 앱에서 사용하는 값의 상태를 추적하고자 할 때 편리하게 사용할 수 있겠다.
또한 특정 부분에 로그를 기록하게 하여 크래쉬 시에 로그를 추적하면서 어떤 단계들을 거쳤는지 확인할 수도 있다.

리포트 된 크래쉬에서 키, 로그, 데이터 부분에서 직접 삽입한 내용을 확인할 수 있다.
이러한 데이터들을 활용하면 크래쉬를 해결하는 데 더 수월할 것이다.


5. 크래쉬 리포트 중단하기

상용버전이 아닌 개발버전, 테스트버전인 경우 굳이 리포트를 할 필요가 없을수도 있다.
그럴때 리포트를 비활성화할 수 있는 방법을 제공한다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ...

    <application
        ...
        <activity android:name=".MainActivity">
            ...
        </activity>

        <meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="false" />
    </application>

</manifest>

AndroidManifest.xml 파일로 이동하여 application 태그 내에 meta-data를 추가 해주면 된다.
name과 value는 위 코드를 참고하면 된다.
활성화를 원한다면 value에 true를, 원하지 않는다면 false를 주면 된다.
meta-data가 없다면 디폴트로 활성화된다.


앱의 안정성은 항상 중요하다.

앱이 이유도 모른 채 죽어서 데이터가 날아간다던가, 심지어 그게 잦고 많은 사용자에게 일어난다면 리뷰 점수는 물론이고 사용자들은 등을 돌릴 것이다.

Firebase Crashlytics를 활용하여 크래쉬를 확인하여 더 안정적인 앱을 만들어보자.

반응형