📱 안드로이드 Android ~ Kotlin

[Android/kotlin] 구글 Firebase Crashlytics 사용하기

핑크빛연어 2022. 6. 9. 10:12

 

Firebase 출시 및 모니터링 기능 중 Firebase Crashlytics 를 사용하면 비정상 종료, 심각하지 않은 오류, '애플리케이션 응답 없음'(ANR) 오류에 관한 포괄적인 비정상 종료 보고서를 받아 볼 수 있습니다.

앱 Crash 를 좀 더 손쉽게 확인할 수 있는 오류보고 솔루션입니다.

 

 

🚨 Google Crashlytics 에 대한 사용설정

Firebase Crashlytics 를 사용하기 위해 먼저 Google Crashlytics 에 대한 사용설정을 구성해 줍니다.

프로젝트 개요 > 프로젝트 설정 > Google Crashlytics 사용설정 클릭 후

Google 애널리틱스 계정 선택 후 Google Crashlytics 사용 설정 버튼 클릭

 

 

🚨 Firebase Crashlytics 시작하기

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

 

Firebase Crashlytics 시작하기  |  Firebase Documentation

Check out what’s new from Firebase at Google I/O 2022. Learn more 의견 보내기 Firebase Crashlytics 시작하기 iOS+ Android Flutter Unity 이 빠른 시작에서는 Firebase Crashlytics SDK를 사용해 앱에 Firebase Crashlytics를 설정하여 F

firebase.google.com

해당 페이지를 참고하여 시작할 수 있습니다.

 

 

1. build.gradle(:app)

◾ 앱에 Firebase Crashlytics SDK 추가 - dependencies 안에 Firebase Crashlytics 에 대한 의존성을 추가해줍니다.

   implementation 'com.google.firebase:firebase-crashlytics-ktx'  //Firebase Crashlytics SDK 추가
   implementation 'com.google.firebase:firebase-analytics-ktx'  //Firebase Crashlytics SDK 추가

Crashlytics Gradle 플러그인을 적용해줍니다. 

   apply plugin: 'com.google.firebase.crashlytics'

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id 'com.google.gms.google-services'
    id 'com.google.firebase.crashlytics'
}

...

dependencies {
	...
    implementation platform('com.google.firebase:firebase-bom:30.0.1')
    implementation 'com.google.firebase:firebase-crashlytics-ktx'  //Firebase Crashlytics SDK 추가
    implementation 'com.google.firebase:firebase-analytics-ktx'  //Firebase Crashlytics SDK 추가
	...
}

 

 

2. build.gradle

◾ Firebase Crashlytics 플러그인 추가 - Crashlytics Gradle 플러그인을 buildscript 종속 항목으로 추가하여 합니다.

   classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'  //Firebase Crashlytics 플러그인 추가

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:7.0.4"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20"
        classpath 'com.google.gms:google-services:4.3.10'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'  //Firebase Crashlytics 플러그인 추가
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

 

 

3. CrashMainActivity.kt

◾ Firebase Console 의 Crashlytics 대시보드에 데이터를 표시하기 위해 테스트 비정상 종료를 강제로 적용합니다.
   throw RuntimeException("Test Crash")  // Force a crash

 

 

Firebase Crashlytics SDK를 사용하여 비정상 종료 보고서를 맞춤설정하는 방법들이 있습니다.

https://firebase.google.com/docs/crashlytics/customize-crash-reports?authuser=1&platform=android 

 

Firebase Crashlytics 비정상 종료 보고서 맞춤설정  |  Firebase Documentation

Check out what’s new from Firebase at Google I/O 2022. Learn more 의견 보내기 Firebase Crashlytics 비정상 종료 보고서 맞춤설정 iOS+ Android Flutter Unity 이 가이드에서는 Firebase Crashlytics SDK를 사용하여 비정상 종료

firebase.google.com

 

◾ 커스텀 키

   - 커스텀 키 추가하여 비정상 종료로 이어지는 앱의 구체적인 상태를 확인할 수 있습니다. 
   - 임의의 키-값 쌍을 비정상 종료 보고서에 연결하고 커스텀 키를 사용하여 Firebase Console 에서 비정상 종료 보고서를 검색하고 필터링할 수 있습니다. setCustomKey 인스턴스 메서드를 사용하여 키-값 쌍을 설정합니다.

   // 커스텀 키 추가
  Firebase.crashlytics.setCustomKeys {
      key("my_string_key", "hello")  // String value
      key("my_bool_key", true)        // boolean value
      key("my_double_key", 1.0)      // double value
      key("my_float_key", 1.0f)        // float value
      key("my_int_key", 2)              // int value
   }

 

◾ 커스텀 로그 메시지

   - 비정상 종료로 이어지는 이벤트에 대한 정보를 자세히 파악하기 위해 커스텀 Crashlytics 로그를 추가할 수 있습니다.

   // 커스텀 로그 메시지 추가
  Firebase.crashlytics.log("message!!")

 

◾ 사용자 식별자 설정

   - 보고서에 사용자 ID를 추가하여 어떤 사용자에게 발생했는지 파악하여 진단하는데 도움이 될 수 있습니다.

   // 사용자 식별자 설정
  Firebase.crashlytics.setUserId("user123456789")

 

package com.eun.myappkotlin02.crash

import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import com.eun.myappkotlin02.databinding.ActivityMainBinding
import com.google.firebase.crashlytics.ktx.crashlytics
import com.google.firebase.crashlytics.ktx.setCustomKeys
import com.google.firebase.ktx.Firebase

class CrashMainActivity: AppCompatActivity() {

    lateinit var binding: ActivityMainBinding

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

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)  //setContentView(R.layout.activity_main)

        initView()
    }


    private fun initView() {

        // https://firebase.google.com/docs/crashlytics/get-started?platform=android#add-sdk
        binding.btnGoCrash.setOnClickListener {
            customizeCrashlytics()
        }
    }


    /* Firebase Crashlytics 비정상 종료 보고서 맞춤설정 메소드 */
    private fun customizeCrashlytics() {
        // https://firebase.google.com/docs/crashlytics/customize-crash-reports?authuser=1&platform=android
        val crashlytics = Firebase.crashlytics

        // 커스텀 로그 메시지 추가
        crashlytics.log("message!!")

        // 커스텀 키 추가
        crashlytics.setCustomKeys {
            key("my_string_key", "hello")  // String value
            key("my_bool_key", true)        // boolean value
            key("my_double_key", 1.0)      // double value
            key("my_float_key", 1.0f)        // float value
            key("my_int_key", 2)              // int value
        }

        // 사용자 식별자 설정
        crashlytics.setUserId("user123456789")

        throw RuntimeException("Test Crash")  // Force a crash - 테스트 비정상 종료를 강제로 적용
    }
}

 

GO TEST CRASH 버튼 클릭 시 강제 비정상 종료를 실행하였습니다.

 

 

감사합니다 :)

 

728x90
반응형