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

Firebase Crashlytics 시작하기

이 빠른 시작에서는 Firebase Console에서 포괄적인 비정상 종료 보고서를 얻을 수 있도록 Firebase Crashlytics SDK를 사용하여 앱에서 Firebase Crashlytics를 설정하는 방법을 설명합니다.

Crashlytics를 설정하려면 Firebase 콘솔과 IDE 모두에서 작업(예: Firebase 구성 파일 및 Crashlytics SDK 추가)이 필요합니다. 설정을 완료하려면 테스트 비정상 종료를 강제 실행하여 첫 번째 비정상 종료 보고서를 Firebase로 보내야 합니다.

시작하기 전에

  1. 아직 추가하지 않았다면 Unity 프로젝트에 Firebase 를 추가하세요. Unity 프로젝트가 없는 경우 샘플 앱 을 다운로드할 수 있습니다.

  2. 권장사항 : 비정상 종료 사용자, 탐색경로 로그, 속도 알림과 같은 기능을 사용하려면 Firebase 프로젝트에서 Google 애널리틱스를 사용 설정해야 합니다.

    • 기존 Firebase 프로젝트에 Google 애널리틱스가 활성화되지 않은 경우 Firebase 콘솔의 > 프로젝트 설정통합 에서 Google 애널리틱스를 활성화할 수 있습니다.

    • 새 Firebase 프로젝트를 만드는 경우 프로젝트 생성 워크플로 중에 Google 애널리틱스를 활성화하세요.

1단계 : 앱에 Crashlytics SDK 추가

Unity 프로젝트를 Firebase 프로젝트에 등록할 때 이미 Firebase Unity SDK를 다운로드하고 Crashlytics 패키지를 추가했을 수 있습니다.

  1. Firebase Unity SDK 를 다운로드한 다음 편리한 위치에 SDK의 압축을 풉니다.

    Firebase Unity SDK는 플랫폼별로 다르지 않습니다.

  2. 열려 있는 Unity 프로젝트에서 Assets > Import Package > Custom Package 로 이동합니다.

  3. 압축을 푼 SDK에서 Crashlytics SDK( FirebaseCrashlytics.unitypackage )를 가져오도록 선택합니다.

    지원되는 다른 Firebase 제품 도 가져올 수 있습니다.

  4. Unity 패키지 가져오기 창에서 가져오기 를 클릭합니다.

표시자101

2단계 : Crashlytics 초기화

  1. 새 C# 스크립트를 만든 다음 장면의 GameObject 에 추가합니다.

    1. 첫 번째 장면을 연 다음 CrashlyticsInitializer 라는 빈 GameObject 를 만듭니다.

    2. 새 개체에 대한 인스펙터 에서 구성 요소 추가 를 클릭합니다.

    3. CrashlyticsInit 스크립트를 선택하여 CrashlyticsInitializer 개체에 추가합니다.

  2. 스크립트의 Start 메서드에서 Crashlytics를 초기화합니다.

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    // Import Firebase
    using Firebase;
    
    public class CrashlyticsInit : MonoBehaviour {
        // Use this for initialization
        void Start () {
            // Initialize Firebase
            Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
                var dependencyStatus = task.Result;
                if (dependencyStatus == Firebase.DependencyStatus.Available)
                {
                    // Create and hold a reference to your FirebaseApp,
                    // where app is a Firebase.FirebaseApp property of your application class.
                    // Crashlytics will use the DefaultInstance, as well;
                    // this ensures that Crashlytics is initialized.
                    Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance;
    
                    // Set a flag here for indicating that your project is ready to use Firebase.
                }
                else
                {
                    UnityEngine.Debug.LogError(System.String.Format(
                      "Could not resolve all Firebase dependencies: {0}",dependencyStatus));
                    // Firebase Unity SDK is not safe to use here.
                }
            });
        }
    
      // Update is called once per frame
      void Update()
        // ...
    }

3단계 : (Android만 해당) 기호 업로드 설정하기

이 섹션의 단계는 IL2CPP를 사용하는 Android 앱에만 필요합니다.

  • Unity의 Mono 스크립팅 백엔드를 사용하는 Android 앱의 경우 이러한 단계가 필요하지 않습니다.

  • Apple 플랫폼 앱의 경우 Firebase Unity Editor 플러그인이 기호를 업로드하도록 Xcode 프로젝트를 자동으로 구성하므로 이러한 단계가 필요하지 않습니다.

Crashlytics의 Unity SDK 8.6.1+에는 NDK 충돌 보고가 자동으로 포함되어 있어 Crashlytics가 Android에서 Unity IL2CPP 충돌을 자동으로 보고할 수 있습니다. 그러나 Crashlytics 대시보드에서 네이티브 라이브러리 비정상 종료에 대한 기호화된 스택 추적을 보려면 빌드 시 Firebase CLI를 사용하여 기호 정보를 업로드해야 합니다.

기호 업로드를 설정하려면 다음 단계를 완료하십시오.

  1. 안내에 따라 Firebase CLI를 설치합니다 .

    CLI를 이미 설치한 경우 최신 버전으로 업데이트해야 합니다 .

  2. (Android API 레벨 30 이상을 사용하는 앱에만 해당) 앱의 AndroidManifest.xml 템플릿을 업데이트하여 포인터 태깅을 비활성화합니다.

    1. Android Player Settings > Publishing Settings > Build > Custom Main Manifest 상자를 선택합니다.

    2. Assets/Plugins/Android/AndroidManifest.xml 에 있는 매니페스트 템플릿을 엽니다.

    3. 애플리케이션 태그에 다음 특성을 추가합니다. <application android:allowNativeHeapPointerTagging="false" ... />

4단계 : 프로젝트 빌드 및 기호 업로드

iOS+ (애플 플랫폼)

  1. 빌드 설정 대화 상자에서 프로젝트를 Xcode 작업 공간으로 내보냅니다.

  2. 앱을 빌드하세요.

    Apple 플랫폼의 경우 Firebase Unity Editor 플러그인은 각 빌드에 대해 Crashlytics 호환 기호 파일을 생성하고 Firebase 서버에 업로드하도록 Xcode 프로젝트를 자동으로 구성합니다.

기계적 인조 인간

  1. 빌드 설정 대화 상자에서 다음 중 하나를 수행합니다.

    • Android Studio 프로젝트로 내보내 프로젝트를 빌드합니다. 또는

    • Unity 에디터에서 직접 APK를 빌드하세요.
      빌드하기 전에 Build Settings 대화 상자에서 Create symbols.zip 확인란이 선택되어 있는지 확인하십시오.

  2. 빌드가 완료되면 Crashlytics 호환 기호 파일을 생성하고 다음 Firebase CLI 명령어를 실행하여 Firebase 서버에 업로드합니다.

    firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
    • FIREBASE_APP_ID : Firebase Android 앱 ID(패키지 이름 아님)
      Firebase Android 앱 ID 예: 1:567383003300:android:17104a2ced0c9b9b

    • PATH/TO/SYMBOLS : CLI에서 생성한 심볼 파일의 경로

      • Android Studio 프로젝트로 내보내기 — PATH/TO/SYMBOLSunityLibrary/symbols 디렉토리이며 Gradle 또는 Android Studio를 통해 앱을 빌드한 후 내보낸 프로젝트 루트에 생성됩니다.

      • Unity 내에서 직접 APK 빌드 — PATH/TO/SYMBOLS 는 빌드가 완료될 때 프로젝트 루트 디렉터리에 생성된 압축 심볼 파일의 경로입니다(예: myproject/myapp-1.0-v100.symbols.zip ).

    기호 파일 생성 및 업로드에 Firebase CLI 명령을 사용하기 위한 고급 옵션 보기

    깃발 설명
    --generator=csym

    기본 Breakpad 생성기 대신 레거시 cSYM 기호 파일 생성기를 사용합니다.

    사용을 권장하지 않습니다. 기본 Breakpad 기호 파일 생성기를 사용하는 것이 좋습니다.

    --generator=breakpad

    Breakpad 기호 파일 생성기를 사용합니다.

    기호 파일 생성의 기본값은 Breakpad입니다. 빌드 구성에 symbolGenerator { csym() } 를 추가했고 대신 Breakpad를 사용하도록 재정의하려는 경우에만 이 플래그를 사용하세요.

    --dry-run

    기호 파일을 생성하지만 업로드하지는 않습니다.

    이 플래그는 전송된 파일의 내용을 검사하려는 경우에 유용합니다.

    --debug 추가 디버깅 정보 제공

5단계 : 테스트 충돌을 강제로 설정을 완료합니다.

Crashlytics 설정을 완료하고 Firebase 콘솔의 Crashlytics 대시보드에서 초기 데이터를 보려면 강제로 테스트 비정상 종료를 실행해야 합니다.

  1. 기존 GameObject 를 찾은 후 다음 스크립트를 추가합니다. 이 스크립트는 앱을 실행한 후 몇 초 후에 테스트 충돌을 일으킵니다.

    using System;
    using UnityEngine;
    
    public class CrashlyticsTester : MonoBehaviour {
    
        int updatesBeforeException;
    
        // Use this for initialization
        void Start () {
          updatesBeforeException = 0;
        }
    
        // Update is called once per frame
        void Update()
        {
            // Call the exception-throwing method here so that it's run
            // every frame update
            throwExceptionEvery60Updates();
        }
    
        // A method that tests your Crashlytics implementation by throwing an
        // exception every 60 frame updates. You should see non-fatal errors in the
        // Firebase console a few minutes after running your app with this method.
        void throwExceptionEvery60Updates()
        {
            if (updatesBeforeException > 0)
            {
                updatesBeforeException--;
            }
            else
            {
                // Set the counter to 60 updates
                updatesBeforeException = 60;
    
                // Throw an exception to test your Crashlytics implementation
                throw new System.Exception("test exception please ignore");
            }
        }
    }
    
  2. 빌드가 완료된 후 앱을 빌드하고 기호 정보를 업로드합니다.

    • iOS+ : Firebase Unity Editor 플러그인은 기호 파일을 업로드하도록 Xcode 프로젝트를 자동으로 구성합니다.

    • Android : IL2CPP를 사용하는 Android 앱의 경우 Firebase CLI crashlytics:symbols:upload 명령을 실행하여 기호 파일을 업로드합니다.

  3. 앱을 실행합니다. 앱이 실행되면 기기 로그를 확인하고 CrashlyticsTester 에서 예외가 트리거될 때까지 기다립니다.

    • iOS+ : Xcode 하단 창에서 로그를 봅니다.

    • Android : 터미널에서 adb logcat 명령을 실행하여 로그를 봅니다.

  4. 기기 로그에 예외가 표시되면 오류 보고서를 Firebase로 보낼 수 있도록 앱을 다시 시작하세요.

  5. Firebase 콘솔의 Crashlytics 대시보드 로 이동하여 테스트 비정상 종료를 확인하세요.

    콘솔을 새로 고쳤는데도 5분 후에도 테스트 충돌이 표시되지 않으면 디버그 로깅을 활성화 하여 앱이 충돌 보고서를 보내고 있는지 확인하십시오.


그리고 그게 다야! 이제 Crashlytics에서 앱의 비정상 종료를 모니터링하고 있습니다. 모든 보고서와 통계를 보고 조사하려면 Crashlytics 대시보드 를 방문하세요.

다음 단계

  • Crashlytics 대시보드에서 직접 Google Play 트랙별로 Android 앱의 충돌 보고서를 필터링할 수 있도록 Google Play와 통합 합니다. 이를 통해 대시보드를 특정 빌드에 더 집중할 수 있습니다.