Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

Firebase Crashlytics 오류 보고서 맞춤설정

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 가이드에서는 Firebase Crashlytics SDK를 사용하여 비정상 종료 보고서를 맞춤설정하는 방법을 설명합니다. 기본적으로 Crashlytics는 앱의 모든 사용자에 대한 비정상 종료 보고서를 자동으로 수집합니다(대신 자동 비정상 종료 보고를 사용 중지하고 사용자에 대해 선택 보고를 사용 설정할 수 있음). Crashlytics는 맞춤 키 , 맞춤 로그 , 사용자 식별자 , 포착된 예외 의 네 가지 기본 로깅 메커니즘을 제공합니다.

표시자90

사용자 지정 키 추가

사용자 지정 키는 충돌로 이어지는 앱의 특정 상태를 파악하는 데 도움이 됩니다. 비정상 종료 보고서와 임의의 키/값 쌍을 연결한 다음 맞춤 키를 사용하여 Firebase 콘솔에서 비정상 종료 보고서를 검색하고 필터링할 수 있습니다.

  • Crashlytics 대시보드 에서 맞춤 키와 일치하는 문제를 검색할 수 있습니다.

  • 콘솔에서 특정 문제를 검토할 때 각 이벤트에 연결된 사용자 지정 키를 볼 수 있고( 하위 탭) 사용자 지정 키로 이벤트를 필터링할 수도 있습니다(페이지 상단의 필터 메뉴).

setCustomKey 인스턴스 메서드를 사용하여 키/값 쌍을 설정합니다. setCustomKeyvalue 매개변수가 프리미티브 또는 String 인수를 허용하도록 오버로드됩니다. 여기 예시들이 있습니다 :

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("my_string_key", "foo") // 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", 1)        // int value
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("my_string_key", "foo" /* string value */);

crashlytics.setCustomKey("my_bool_key", true /* boolean value */);

crashlytics.setCustomKey("my_double_key", 1.0 /* double value */);

crashlytics.setCustomKey("my_float_key", 1.0f /* float value */);

crashlytics.setCustomKey("my_int_key", 1 /* int value */);

키를 호출하고 다른 값으로 설정하여 기존 키의 값을 수정할 수도 있습니다. 예를 들어:

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("current_level", 3)
    key("last_UI_action", "logged_in")
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");

CustomKeysAndValues 의 인스턴스를 setCustomKeys 인스턴스 메서드에 전달하여 대량으로 키/값 쌍을 추가합니다.

Kotlin+KTX

Kotlin의 경우 CustomKeysAndValues ​​빌더를 사용하는 것보다 기존 기능이 더 간단합니다.

crashlytics.setCustomKeys {
  key("str_key", "hello")
  key("bool_key", true)
  key("int_key", 1)
  key("long_key", 1L)
  key("float_key", 1.0f)
  key("double_key", 1.0)
}

Java

CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
.putString("string key", "string value")
.putString("string key 2", "string  value 2")
.putBoolean("boolean key", True)
.putBoolean("boolean key 2", False)
.putFloat("float key", 1.01)
.putFloat("float key 2", 2.02)
.build();

FirebaseCrashlytics.getInstance().setCustomKeys(keysAndValues);

사용자 지정 로그 메시지 추가

비정상 종료로 이어지는 이벤트에 대한 추가 컨텍스트를 제공하기 위해 앱에 맞춤 Crashlytics 로그를 추가할 수 있습니다. Crashlytics는 로그를 비정상 종료 데이터와 연결하고 로그 탭 아래 Firebase 콘솔 의 Crashlytics 페이지에 표시합니다.

log 를 사용하여 문제를 정확히 찾아내십시오. 예를 들어:

Kotlin+KTX

Firebase.crashlytics.log("message")

Java

FirebaseCrashlytics.getInstance().log("message");

사용자 식별자 설정

문제를 진단하려면 주어진 비정상 종료를 경험한 사용자를 아는 것이 종종 도움이 됩니다. Crashlytics에는 비정상 종료 보고서에서 사용자를 익명으로 식별하는 방법이 포함되어 있습니다.

보고서에 사용자 ID를 추가하려면 각 사용자에게 ID 번호, 토큰 또는 해시 값 형식의 고유 식별자를 할당합니다.

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

Java

FirebaseCrashlytics.getInstance().setUserId("user123456789");

사용자 식별자를 설정한 후 지워야 하는 경우 값을 빈 문자열로 재설정합니다. 사용자 식별자를 삭제해도 기존 Crashlytics 레코드는 삭제되지 않습니다. 사용자 ID와 연결된 레코드를 삭제해야 하는 경우 Firebase 지원팀에 문의하세요 .

(Android NDK만 해당) NDK 비정상 종료 보고서에 메타데이터 추가

C++ 코드에 crashlytics.h 헤더를 선택적으로 포함하여 맞춤 키 , 맞춤 로그 , 사용자 식별자 와 같은 NDK 비정상 종료 보고서에 메타데이터를 추가할 수 있습니다. 이러한 모든 옵션은 위의 이 페이지에 설명되어 있습니다.

crashlytics.hFirebase Android SDK GitHub 저장소 에서 헤더 전용 C++ 라이브러리로 제공됩니다.

NDK C++ API 사용에 대한 안내는 헤더 파일의 설명을 읽어보세요.

치명적이지 않은 예외 보고

앱 비정상 종료를 자동으로 보고하는 것 외에도 Crashlytics를 사용하면 치명적이지 않은 예외를 기록하고 다음에 앱이 실행될 때 이를 보낼 수 있습니다.

앱의 catch 블록에 심각하지 않은 예외를 기록하려면 recordException 메서드를 사용하세요. 예를 들어:

Kotlin+KTX

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e)
    // handle your exception here
}

Java

try {
    methodThatThrows();
} catch (Exception e) {
    FirebaseCrashlytics.getInstance().recordException(e);
    // handle your exception here
}

기록된 모든 예외는 Firebase 콘솔에 치명적이지 않은 문제로 표시됩니다. 문제 요약에는 일반적으로 충돌에서 얻는 모든 상태 정보와 함께 Android 버전 및 하드웨어 장치별 분석이 포함됩니다.

Crashlytics는 전용 백그라운드 스레드에서 예외를 처리하여 앱 성능에 미치는 영향을 최소화합니다. 사용자의 네트워크 트래픽을 줄이기 위해 Crashlytics는 기록된 예외를 함께 일괄 처리하고 다음에 앱이 실행될 때 전송합니다.

옵트인 보고 활성화

기본적으로 Crashlytics는 앱의 모든 사용자에 대한 비정상 종료 보고서를 자동으로 수집합니다. 사용자가 전송하는 데이터에 대해 더 많은 제어 권한을 부여하려면 자동 보고를 사용 중지하고 코드에서 선택한 경우에만 Crashlytics로 데이터를 전송하여 수신 동의 보고를 사용 설정할 수 있습니다.

  1. AndroidManifest.xml 파일의 application 블록에서 meta-data 태그를 추가하여 자동 수집을 끕니다.

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. 런타임에 Crashlytics 데이터 수집 재정의를 호출하여 일부 사용자에 대한 수집을 사용 설정하세요. 재정의 값은 Crashlytics에서 자동으로 보고서를 수집할 수 있도록 앱 실행 시 지속됩니다. 자동 비정상 종료 보고를 선택 해제하려면 재정의 값으로 false 를 전달하세요. false 로 설정하면 다음에 앱을 실행할 때까지 새 값이 적용되지 않습니다.

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

Crash Insights 데이터 관리

Crash Insights는 익명화된 스택 추적을 다른 Firebase 앱의 추적과 비교하고 문제가 더 큰 추세의 일부인지 알려줌으로써 문제를 해결하는 데 도움이 됩니다. 많은 문제에 대해 Crash Insights는 충돌을 디버깅하는 데 도움이 되는 리소스도 제공합니다.

Crash Insights는 집계된 충돌 데이터를 사용하여 일반적인 안정성 추세를 식별합니다. 앱 데이터를 공유하지 않으려면 Firebase 콘솔 의 Crashlytics 문제 목록 상단에 있는 Crash Insights 메뉴에서 Crash Insights를 선택 해제할 수 있습니다.