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


Crashlytics 대시보드에서 문제를 클릭하여 세부정보를 확인할 수 있습니다. 이벤트 보고서 이러한 보고서를 맞춤설정하면 보고되는 이벤트와 관련된 상황, 그리고 앱에서 발생하는 상황 Crashlytics

  • 앱에서 Google Analytics용 Firebase SDK 이러한 로그를 사용하면 앱에서 Crashlytics 수집 이벤트로 이어지는 사용자 작업

  • 자동 비정상 종료 보고를 사용 중지하고 사용자에 대해 보고 선택 옵션을 사용 설정합니다. 참고로 기본적으로 Crashlytics에서 모든 캠페인의 비정상 종료 보고서를 자동으로 수집합니다. 확인할 수 있습니다.

커스텀 키 추가

커스텀 키를 사용하면 비정상 종료로 이어지는 앱의 구체적인 상태를 확인할 수 있습니다. 임의의 키-값 쌍을 비정상 종료 보고서에 연결한 다음 커스텀 키를 사용하여 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는 로그를 연결합니다. 데이터를 가져와 Crashlytics 페이지에 표시합니다. Firebase 콘솔로그 탭 아래

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 사용에 대한 안내는 헤더 파일의 설명을 참조하세요.

GWP-ASan 보고서를 포함하여 메모리 손상 문제 디버그

Crashlytics는 기본 메모리 오류로 인해 발생하는 비정상 종료를 GWP-ASan 보고서 수집 이러한 메모리 관련 오류는 앱 보안 취약점의 주요 원인인 앱 내의 메모리 손상과 관련이 있을 수 있습니다.

  • 이 데이터는 새로운 '메모리 스택 트레이스'에서 확인할 수 있습니다. 탭을 클릭하면 문제의 세부정보를 Crashlytics 대시보드.

  • 새로운 'GWP-ASan 보고서' 신호와 필터를 사용하여 이 데이터와 관련된 모든 문제를 빠르게 확인할 수도 있습니다.

다음과 같은 경우 GWP-ASan 메모리 보고서를 가져올 수 있습니다. GWP-ASan을 명시적으로 사용 설정 를 실행하고 NDK v18.3.6 이상용 Crashlytics SDK (Firebase BoM)를 사용하세요. v31.3.0 이상). 다음을 사용하여 GWP-ASan 설정을 테스트할 수 있습니다. Android 문서의 네이티브 코드 예

심각하지 않은 예외 보고

앱의 비정상 종료를 자동으로 보고하는 것 외에도 Crashlytics를 사용하면 심각하지 않은 예외를 기록하고 다음 번에 앱이 있습니다.

recordException 메서드를 사용하여 심각하지 않은 예외를 앱의 catch 블록에 기록합니다. 예를 들면 다음과 같습니다.

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는 로깅된 예외를 함께 일괄 처리하고 몇 가지 있습니다.

탐색경로 로그 가져오기

탐색경로 로그를 사용하면 사용자와의 상호작용을 더 잘 이해할 수 있습니다. 앱에서 비정상 종료, 심각하지 않은 문제, ANR 이벤트로 이어지는 경우가 있습니다. 이러한 로그는 도움이 될 수 있습니다

탐색경로 로그는 Google 애널리틱스를 기반으로 하므로 탐색경로 로그를 얻으려면 ~해야 해 Google 애널리틱스 사용 설정 설정되고 Google Analytics용 Firebase SDK 추가 해야 합니다. 이러한 요구사항이 충족되면 탐색경로 로그가 자동으로 세부정보를 볼 때 로그 탭 내의 이벤트 데이터에 포함됨 문제를 일으킬 수 있습니다

Analytics SDK screen_view 이벤트를 자동으로 로깅 그러면 탐색경로 로그에 광고가 표시되기 전에 조회된 화면 목록이 ANR 이벤트 등이 있습니다 screen_view 탐색경로 로그에는 firebase_screen_class 매개변수

탐색경로 로그에는 맞춤 이벤트를 기록하며, 사용자는 이 이벤트를 세션(이벤트의 매개변수 데이터 포함) 이 데이터를 통해 비정상 종료, 심각하지 않은 문제, ANR 이벤트로 이어지는 사용자 작업의 비율

참고: Google Analytics 데이터 수집 및 사용 제어 여기에는 탐색경로 로그를 채우는 데이터도 포함됩니다.

보고 선택 옵션 사용 설정

기본적으로 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);

비정상 종료 통계 데이터 관리

비정상 종료 통계는 익명화된 스택 트레이스를 다른 Firebase 앱의 트레이스와 비교하여 문제가 더 큰 트렌드에 속하는지 여부를 파악함으로써 문제를 해결하는 데 도움을 줍니다. 비정상 종료 통계가 디버깅에 도움이 되는 경우도 많습니다.

비정상 종료 통계에서는 비정상 종료 집계 데이터를 사용하여 공통적인 안정성 트렌드를 파악합니다. 앱 데이터를 공유하지 않으려면 비정상 종료 통계를 선택 해제하면 됩니다. Crashlytics 문제 목록 상단의 비정상 종료 통계 메뉴에서 (Firebase 콘솔에서 확인)