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

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

예외 보고

포착된 예외 보고

예상되는 예외가 있는 경우 Crashlytics SDK가 이를 심각하지 않은 이벤트로 보고하도록 할 수 있습니다. 이러한 이벤트는 기기에 로깅된 후, 다음 심각한 이벤트 보고서와 함께 또는 최종 사용자가 게임을 다시 시작할 때 전송됩니다.

다음 메서드를 사용하여 C#으로 예외를 로깅할 수 있습니다.

Crashlytics.LogException(Exception ex);

게임의 try/catch 블록에 예상 예외를 로깅할 수 있습니다.

try {
    myMethodThatThrows();
} catch (Exception e) {
   Crashlytics.LogException(e);
   // handle your exception here!
}

포착되지 않은 예외 보고

게임이 비정상 종료되지 않는 포착되지 않은 예외(예: 게임 로직에서 포착되지 않은 C# 예외)의 경우 Unity 프로젝트에서 Crashlytics를 초기화하는 위치에서 Crashlytics.ReportUncaughtExceptionsAsFatal 속성을 true로 설정하여 Crashlytics SDK가 이를 심각한 이벤트로 보고하도록 할 수 있습니다. 이러한 이벤트는 최종 사용자가 게임을 다시 시작할 필요 없이 실시간으로 Crashlytics에 보고됩니다.

포착되지 않은 예외를 심각한 이벤트로 보고하면 비정상 종료가 발생하지 않은 사용자 통계와 신속 알림에 포함됩니다.

네이티브 충돌은 항상 심각한 이벤트로 보고됩니다. 이러한 이벤트는 기기에 로깅된 다음 최종 사용자가 게임을 다시 시작할 때 함께 전송됩니다.

void Start() {
    // Since there is no try-block surrounding this call, if an exception is thrown,
    // it is considered unexpected.
    // Setting `Crashlytics.ReportUncaughtExceptionsAsFatal = true`
    // will ensure that such cases are reported as fatals.
    thirdPartyMethodThatMayThrow();
}

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

IL2CPP를 사용하는 Android 앱의 경우 Crashlytics를 사용하면 GWP-ASan 보고서를 수집하여 네이티브 메모리 오류로 인한 비정상 종료 디버깅 지원을 받을 수 있습니다. 이러한 메모리 관련 오류는 앱 보안 취약점의 주요 원인인 앱 내의 메모리 손상과 관련이 있을 수 있습니다.

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

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

앱에서 Unity용 최신 Crashlytics SDK(v10.7.0 이상)를 사용하고 GWP-ASan을 명시적으로 사용 설정(Android 앱 매니페스트 수정 필요)하면 GWP-ASan 메모리 보고서를 가져올 수 있습니다. 앱에 C++ 코드가 있는 경우 Android 문서의 네이티브 코드 예시를 사용하여 GWP-ASan 설정을 테스트할 수 있습니다.

커스텀 키 추가

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

  • Crashlytics 대시보드에서 커스텀 키와 일치하는 문제를 검색할 수 있습니다.
  • 콘솔에서 특정 문제를 검토할 때 각 이벤트와 연결된 커스텀 키를 검토하고( 하위 탭) 이벤트를 커스텀 키로 필터링할 수도 있습니다(페이지 상단의 필터 메뉴).

여러 번 호출하면 기존 키의 값이 새로 업데이트되고 비정상 종료가 기록될 때 최신 값만 캡처됩니다.

Crashlytics.SetCustomKey(string key, string value);

커스텀 로그 메시지 추가

로깅된 메시지는 비정상 종료 데이터와 연결되어 있으며 특정 비정상 종료를 볼 때 Firebase Crashlytics 대시보드에 표시됩니다.

Crashlytics.Log(string message);

사용자 식별자 설정

개인 정보를 공개하거나 전송하지 않고 ID 번호, 토큰 또는 해시 값을 사용하여 애플리케이션 최종 사용자를 고유하게 식별할 수 있습니다. 값을 빈 문자열로 설정하여 지울 수도 있습니다. 이 값은 특정 비정상 종료를 볼 때 Firebase Crashlytics 대시보드에 표시됩니다.

Crashlytics.SetUserId(string identifier);

보고 선택 옵션 사용 설정

기본적으로 Crashlytics는 모든 앱 사용자의 비정상 종료 보고서를 자동으로 수집하지만 사용자가 비정상 종료 보고 옵션을 선택할 수 있어 자신이 전송하는 데이터를 더욱 효과적으로 관리할 수 있습니다.

자동 수집을 사용 중지하고 선택한 사용자에 한해 Crashlytics를 초기화하려면 런타임에 Crashlytics 데이터 수집 재정의를 호출합니다. 재정의 값은 앱이 실행되는 동안 유지되므로 Crashlytics는 보고서를 자동으로 수집할 수 있습니다. 자동 비정상 종료 보고를 선택 해제하려면 false를 재정의 값으로 전달합니다. false로 설정하면 앱이 다음 번 실행될 때까지 새 값이 적용되지 않습니다.

Crashlytics.IsCrashlyticsCollectionEnabled = true

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

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

비정상 종료 통계에서는 비정상 종료 집계 데이터를 사용하여 공통적인 안정성 트렌드를 파악합니다. 앱의 데이터를 공유하지 않으려는 경우 Firebase Console에 있는 Crashlytics 문제 목록 상단의 비정상 종료 통계 메뉴에서 비정상 종료 통계를 선택 해제할 수 있습니다.