Firebase Crashlytics SDK로 업그레이드

이제 새로운 공식 Firebase Crashlytics SDK를 사용하여 앱에서 Crashlytics를 설정할 수 있습니다. 이 SDK는 다른 Firebase 제품과의 일관성이 향상되었고 보다 직관적으로 사용할 수 있는 개선된 API를 제공합니다.

이 가이드에서는 기존 Fabric SDK에서 새 SDK로 업그레이드하는 방법을 설명합니다. 필요한 경우 새 API에 적용된 변경사항, 변경 사유, 코드 업데이트 방법도 설명합니다.

시작하기 전에

Fabric은 장면에 GameObject를 추가하여 게임에서 Crashlytics뿐 아니라 SDK 자체의 추가 디렉터리도 초기화합니다.

Fabric Crashlytics와 Firebase Crashlytics 플러그인 사이에 충돌이 생기지 않도록 Unity 프로젝트에서 다음 Fabric 폴더와 파일을 삭제합니다.

  • Assets(애셋)에서 다음 파일을 삭제합니다.

    Assets/
       Editor Default Resources/
           FabricSettings.asset     <- DELETE
       Fabric/                      ><- DELETE
       Plugins/
           Android/
               answers/             ><- DELETE
               beta/                ><- DELETE
               crashlytics/         ><- DELETE
               crashlytics-wrapper/ ><- DELETE
               fabric/              ><- DELETE
               fabric-init/         ><- DELETE
           iOS/
               Fabric/              ><- DELETE
    >
  • Hierarchy Window(계층 구조 창)에서 다음 GameObject를 삭제합니다.

    SampleScene
        Main Camera
        Directional Light
        Canvas
        EventSystem
        FabricInit                  <- DELETE CrashlyticsInit><- DELETE
    >
  • Assets(애셋) > Plugins(플러그인) > Android > AndroidManifest.xml에서 모든 Fabric 항목을 삭제합니다.

    예를 들어 삭제 대상으로 알려진 키는 android:name="io.fabric.unity.android.FabricApplication"입니다.

    다른 Fabric 항목이 있으면 검색하여 삭제합니다.

1단계: Firebase 구성 파일 추가

  1. 프로젝트 설정을 엽니다. 내 앱 카드에서 구성 파일이 필요한 앱의 번들 ID 또는 패키지 이름을 선택합니다.

  2. 각 앱의 플랫폼별 Firebase 구성 파일을 다운로드합니다.

    • iOS+GoogleService-Info.plist
    • Androidgoogle-services.json

    단일 Unity 프로젝트의 경우 구성 파일을 최대 2개 포함할 수 있습니다.

  3. Unity 프로젝트에서 프로젝트 창을 열고 구성 파일을 Assets 폴더로 이동합니다.

2단계: Firebase Crashlytics SDK 추가

  1. Firebase Unity SDK를 다운로드한 다음, 원하는 위치에 SDK의 압축을 풉니다.

    Firebase Unity SDK는 플랫폼별로 제공되지 않습니다.

  2. Unity 프로젝트를 열고 Assets(애셋) > Import Package(패키지 가져오기) > Custom Package(커스텀 패키지)로 이동합니다.

  3. 압축을 푼 SDK에서 Crashlytics SDK(FirebaseCrashlytics.unitypackage)를 선택하여 가져옵니다. FirebaseCrashlytics.unitypackage 버전 6.15.0 이상이어야 합니다. 그렇지 않을 경우 애셋 패키지 버전을 업데이트하세요. 비정상 종료 보고서가 Firebase Console에 표시되려면 이 버전 요구사항을 충족해야 합니다.

    • Unity 2017.x 이상 버전: .NET 4.x 프레임워크를 사용할 수 있습니다. Unity 프로젝트에서 .NET 4.x를 사용하는 경우 dotnet4/FirebaseCrashlytics.unitypackage를 가져옵니다.

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

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

  5. 새 C# 스크립트를 만들어 장면의 GameObject에 추가합니다.

    1. 첫 번째 장면을 연 다음 이름이 CrashlyticsInitializer인 빈 GameObject를 만듭니다.

    2. 새 객체에 대해 검사기에서 구성요소 추가를 클릭합니다.

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

  6. 스크립트의 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()
      // ...
    }

SDK를 추가하고 초기화하면 Crashlytics는 자동으로 비정상 종료 보고서를 수신 대기하고 수집하기 시작합니다.

3단계: 코드 업데이트

다음 SDK 변경사항을 검토하고 코드를 적절하게 업데이트합니다.

이제 Crashlytics가 Firebase 설치 ID를 기반으로 ID를 순환시킵니다.

Crashlytics는 Crashlytics 설치 UUID를 사용하여 앱의 인스턴스를 식별하고 사용자의 데이터를 사용자 기기와 연결합니다. 이전에는 기기의 광고 ID가 변경되면 Crashlytics가 사용자의 설치 UUID를 순환했습니다. 이제는 사용자의 Firebase 설치 ID(FID)를 기반으로 설치 UUID를 순환합니다. 자세한 내용은 Firebase 설치 ID 관리를 참조하세요.

변경 사유

FID를 사용하여 다른 Firebase SDK와의 일관성을 높입니다.

Fabric.Crashlytics가 Firebase.Crashlytics로 변경됨

네임스페이스를 Fabric에서 Firebase로 변경했습니다.

Fabric

using Fabric.Crashlytics;

Firebase

using Firebase.Crashlytics;

RecordCustomException이 LogException으로 변경됨

확인 및 처리된 심각하지 않은 맞춤 예외를 로깅합니다.

Fabric

Crashlytics.RecordCustomException(string name, string reason, StackTrace stackTrace);
Crashlytics.RecordCustomException(string name, string reason, string stackTraceString);

Firebase

Crashlytics.LogException(Exception ex);

변경 사유

이 함수는 Exception의 인스턴스를 로깅하는 데 가장 자주 사용됩니다. 이제 'name', 'reason', 'stackTrace'를 수동으로 추출하여 불필요한 코드를 만들 필요 없이 Exception의 인스턴스를 제공하여 Firebase Crashlytics에서 필요한 정보를 추출할 수 있습니다.

해결 방법

예외에서 정보를 직접 추출하지 않고 다른 방식으로 이러한 매개변수를 사용하는 경우에는 매개변수 설명의 커스텀 메타데이터가 있는 고유한 Exception 서브클래스를 만들어 이전 동작을 수행할 수 있습니다.

SetKeyValue가 SetCustomKey로 변경됨

비정상 종료 보고서와 함께 전송할 모든 키/값 쌍을 설정합니다. 같은 키를 재설정하면 값이 업데이트됩니다.

Fabric

Crashlytics.SetKeyValue(string key, string value);

Firebase

Crashlytics.SetCustomKey(string key, string value);

변경 사유

이 메서드의 이름은 동작을 보다 명확하게 나타내고 다른 Firebase API와의 일관성을 향상하기 위해 변경되었습니다.

SetUserIdentifier가 SetUserId로 변경됨

비정상 종료가 발생한 사용자를 파악할 수 있도록 사용자 식별자를 설정합니다.

Fabric

Crashlytics.SetUserIdentifier(string identifier);

Firebase

Crashlytics.SetUserId(string identifier);

변경 사유

이 메서드 이름은 다른 Firebase API와의 일관성 향상을 위해 변경되었습니다. 또한 이름이 짧아져서 키 입력이 더 편리해졌습니다.

SetUserEmail 및 SetUserName 삭제

전에는 명시적인 메서드를 사용하여 비정상 종료와 관련된 이름이나 이메일을 설정할 수 있었지만 더 이상 이러한 메서드를 명시적으로 정의하지 않습니다.

Fabric

Crashlytics.SetUserEmail(string email);
Crashlytics.SetUserName(string name);

변경 사유

Google은 고객 데이터를 보호하기 위해 노력하고 있으며 그러한 노력의 일환으로 개발자 도구에도 동일한 기능을 하는 API를 설계하고 있습니다. 이러한 사용자별 API는 비정상 종료의 영향을 받은 사용자를 파악하기 위해 생성된 개인 식별이 불가능한 메서드의 사용을 장려하기 위해 삭제되었습니다.

해결 방법

비정상 종료가 발생한 사용자를 지정하려면 SetUserId 메서드를 사용하는 것이 좋습니다. 하지만 이 메서드가 유지 가능한 솔루션이 아니라면 SetCustomKey를 사용하여 동일한 기능을 수행할 수 있습니다.

Crash 및 ThrowNonFatal 삭제

이전에는 Crashlytics에서 테스트 목적으로 예외가 발생하는 두 유틸리티 메서드를 제공했지만, 이 두 메서드는 Firebase Crashlytics에는 포함되지 않습니다.

Fabric

Crashlytics.Crash();
Crashlytics.ThrowNonFatal();

변경 사유

Unity용 Crashlytics는 다양한 환경에서 실행되며 여러 종류의 비정상 종료가 발생할 수 있습니다. 하지만 이러한 메서드는 비정상 종료가 C#에서 발생했는지 아니면 기본 플랫폼별 네이티브 SDK에서 발생했는지를 명확하게 나타내지 않았습니다.

해결 방법

  • Firebase Console의 Crashlytics 대시보드에 비정상 종료 보고서를 보내는 테스트 비정상 종료를 강제로 실행하여 구현을 테스트합니다.

4단계: 프로젝트 빌드

  1. Unity의 Build Settings(빌드 설정) 대화상자를 사용해 프로젝트를 내보냅니다.

  2. 내보내기가 완료되면 내보낸 프로젝트를 아래 내보내기 구성 예시와 비교하여 프로젝트가 올바르게 내보내졌는지 확인합니다.

    iOS+

    Android

  3. 프로젝트를 비교한 후 파일이 누락된 것 같으면 Unity 편집기를 연 다음 Google Play 서비스 리졸버를 실행합니다(바로 아래의 안내 참조).

(필요한 경우) 내보내기 후 파일이 누락된 경우 리졸버 실행

EDM4U(External Dependency Manager for Unity)는 Apple 및 Android 플랫폼 모두에 적합한 런타임 종속 항목이 Unity 프로젝트에 있는지 확인합니다. 리졸버에 대한 자세한 내용은 Unity Jar Resolver의 README를 참조하세요.

다음 단계