이제 새로운 공식 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 구성 파일 추가
프로젝트 설정을 엽니다. 내 앱 카드에서 구성 파일이 필요한 앱의 번들 ID 또는 패키지 이름을 선택합니다.
각 앱의 플랫폼별 Firebase 구성 파일을 다운로드합니다.
- iOS+ —
GoogleService-Info.plist
- Android —
google-services.json
단일 Unity 프로젝트의 경우 구성 파일을 최대 2개 포함할 수 있습니다.
- iOS+ —
Unity 프로젝트에서 프로젝트 창을 열고 구성 파일을
Assets
폴더로 이동합니다.
2단계: Firebase Crashlytics SDK 추가
Firebase Unity SDK를 다운로드한 다음, 원하는 위치에 SDK의 압축을 풉니다.
Firebase Unity SDK는 플랫폼별로 제공되지 않습니다.
Unity 프로젝트를 열고 Assets(애셋) > Import Package(패키지 가져오기) > Custom Package(커스텀 패키지)로 이동합니다.
압축을 푼 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 제품도 가져올 수 있습니다.
- Unity 2017.x 이상 버전: .NET 4.x 프레임워크를 사용할 수 있습니다. Unity 프로젝트에서 .NET 4.x를 사용하는 경우
Unity 패키지 가져오기 창에서 가져오기를 클릭합니다.
새 C# 스크립트를 만들어 장면의
GameObject
에 추가합니다.첫 번째 장면을 연 다음 이름이
CrashlyticsInitializer
인 빈GameObject
를 만듭니다.새 객체에 대해 검사기에서 구성요소 추가를 클릭합니다.
CrashlyticsInit
스크립트를 선택하여CrashlyticsInitializer
객체에 추가합니다.
스크립트의
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단계: 프로젝트 빌드
Unity의 Build Settings(빌드 설정) 대화상자를 사용해 프로젝트를 내보냅니다.
내보내기가 완료되면 내보낸 프로젝트를 아래 내보내기 구성 예시와 비교하여 프로젝트가 올바르게 내보내졌는지 확인합니다.
iOS+
Xcode 작업공간으로 내보내기 구성 예시
종속 항목과 구조가 올바른지 확인합니다.
YOUR_EXPORT_DIRECTORY / build/ Classes/ Data/ GoogleService-Info.plist <- Info.plist ... Libraries/ ... Plugins/ iOS/ Firebase/ libCrashlyticsiOSWrapper.a FIREBASE CONFIG FILE><- libFirebaseCppApp.a CRASHLYTICS LIBRARY><- ... ... Podfile.lock Pods FIREBASE CORE LIBRARY Podfile/><- FirebaseCrashlytics/ Firebase/ FirebaseAnalytics/ FirebaseCore/ FirebaseInstanceID/ GoogleAppMeasurement/ GoogleUtilities/ ... Unity-iPhone/ Tests/ Unity-iPhone.xcodeproj Unity-iPhone.xcworkspace DEPENDENCIES Unity-iPhone><- UnityData.xcassets COCOAPODS WORKSPACE>Android
Android 스튜디오 프로젝트로 내보내기 구성 예시
종속 항목과 구조가 올바른지 확인합니다.
YOUR_EXPORT_DIRECTORY / build/ build.gradle ... Firebase/ <- gradle/ gradle.properties gradlew.bat libs FIREBASE FOR UNITY/><- DEPENDENCIES com.google.android.gms.play-services* com.google.firebase.firebase-crashlytics-* com.google.firebase.firebase-crashlytics-unity-* com.google.firebase.firebase-* ... src/ >APK로 내보내기 구성 예시
Android 스튜디오에서 APK를 열고 종속 항목과 구조가 올바른지 확인합니다.
lib/ x86/ libunity.so libmono.so libFirebaseCppApp-
VERSION .so <- libmain.so armeabi-v7a/ libunity.so libmono.so FIREBASE CORE LIBRARY libFirebaseCppApp->VERSION .so <- libmain.so assets/ classes.dex res/ resources.arsc AndroidManifest.xml firebase-*.properties FIREBASE CORE LIBRARY><- play-services*.properties FIREBASE PROPERTIES><- GMS PROPERTIES>프로젝트를 비교한 후 파일이 누락된 것 같으면 Unity 편집기를 연 다음 Google Play 서비스 리졸버를 실행합니다(바로 아래의 안내 참조).
(필요한 경우) 내보내기 후 파일이 누락된 경우 리졸버 실행
EDM4U(External Dependency Manager for Unity)는 Apple 및 Android 플랫폼 모두에 적합한 런타임 종속 항목이 Unity 프로젝트에 있는지 확인합니다. 리졸버에 대한 자세한 내용은 Unity Jar Resolver의 README를 참조하세요.
리졸버 실행을 위한 플랫폼별 안내 보기
iOS+
'iOS 리졸버'가 자동으로 실행되고 Cocoapods
를 활용하여 내보낸 Pods
디렉터리에 종속 항목을 넣습니다.
머신에 CocoaPods를 다운로드하려면 다음 안내를 따르세요.
Assets(애셋) > External Dependency Manager(외부 종속 항목 관리자) > iOS Resolver(iOS 리졸버) > Install Cocoapods(Cocoapods 설치)로 이동podfile 생성을 사용 설정하거나 사용 중지하려면 다음 안내를 따르세요(선택사항).
Assets(애셋) > External Dependency Manager(외부 종속 항목 관리자) > iOS Resolver(iOS 리졸버) > Settings(설정)로 이동
Android
'Android 리졸버'가 자동으로 실행되고 gradle
을 활용하여 Android 종속 항목을 Assets/Plugins/Android
에 넣습니다.
리졸버를 수동으로 실행하려면 다음 안내를 따르세요.
Assets(애셋) > External Dependency Manager(외부 종속 항목 관리자) > Android Resolver(Android 리졸버) > Resolve(확인)로 이동자동 확인을 사용 설정하거나 사용 중지하려면 다음 안내를 따르세요. 기본적으로 사용 설정되어 있습니다.
Assets(애셋) >External Dependency Manager(외부 종속 항목 관리자) > Android Resolver(Android 리졸버) > Settings(설정)로 이동
다음 단계
Firebase Console의 Crashlytics 대시보드에 비정상 종료 보고서를 보내는 테스트 비정상 종료를 강제로 실행하여 구현을 테스트합니다.
보고 선택 옵션, 로그, 키를 추가하고 심각하지 않은 오류를 추적하여 비정상 종료 보고서 설정을 맞춤설정하세요.
앱에 Google 애널리틱스를 추가합니다. Google 애널리틱스의 강력한 기능을 Firebase Crashlytics와 결합하여 Firebase Console에서 비정상 종료가 발생하지 않은 사용자 통계를 확인합니다.