| 選取平台: | iOS+ Android Android NDK Flutter Unity |
本指南說明如何在 Unity 專案中開始使用 Firebase Crashlytics。
在應用程式中設定 Firebase Crashlytics SDK 後,您可以在 Firebase 控制台中取得完整的當機報告。
如要設定 Crashlytics,您必須在 Firebase 控制台和 IDE 中執行多項工作 (例如新增 Firebase 設定檔和 Crashlytics SDK)。如要完成設定,您必須強制測試當機,將第一份當機報告傳送至 Firebase。
事前準備
如果您尚未將 Firebase 新增至 Unity 專案,請先新增。如果沒有 Unity 專案,可以下載範例應用程式。
建議:如要自動取得當機前使用者動作記錄,瞭解導致當機、非致命錯誤或 ANR 事件的使用者動作,請在 Firebase 專案中啟用 Google Analytics。
如要建立新的 Firebase 專案,請在專案建立工作流程中啟用 Google Analytics。
如果您使用的現有 Firebase 專案未啟用 Google Analytics,可以在 Firebase 控制台的「
設定 」>「整合 頁面」啟用。
步驟 1:在應用程式中加入 Crashlytics SDK
請注意,在 Firebase 專案中註冊 Unity 專案時,您可能已下載 Firebase Unity SDK,並新增下列步驟所述的套件。
下載 Firebase Unity SDK,然後將 SDK 解壓縮至方便使用的位置。Firebase Unity SDK 不限平台。
在已開啟的 Unity 專案中,依序點選「Assets」 >「Import Package」 >「Custom Package」。
在已解壓縮的 SDK 中,選取要匯入的 Crashlytics SDK (
FirebaseCrashlytics.unitypackage)。如要使用當機前使用者動作記錄,請一併將 Google Analytics 專用 Firebase SDK 新增至應用程式 (
FirebaseAnalytics.unitypackage)。請確認 Firebase 專案已啟用 Google Analytics。在「Import Unity Package」視窗,按一下「Import」。
步驟 2:初始化 Crashlytics
建立新的 C# 指令碼,然後新增至場景中的
GameObject。開啟第一個場景,然後建立名為
CrashlyticsInitializer的空白GameObject。在新物件的「Inspector」中,按一下「Add Component」。
選取
CrashlyticsInit指令碼,將其新增至CrashlyticsInitializer物件。
在指令碼的
Start方法中初始化 Crashlytics:using System.Collections; using System.Collections.Generic; using UnityEngine; // Import Firebase and Crashlytics using Firebase; using Firebase.Crashlytics; 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; // When this property is set to true, Crashlytics will report all // uncaught exceptions as fatal events. This is the recommended behavior. Crashlytics.ReportUncaughtExceptionsAsFatal = true; // 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 應用程式才需要執行這個步驟。
如果 Android 應用程式使用 Unity 的 Mono 指令碼後端,則不需要執行這些步驟。
如果是 Apple 平台應用程式,則不需要執行這些步驟,因為 Firebase Unity 編輯器外掛程式會自動設定 Xcode 專案,以便上傳符號。
Unity Crashlytics SDK (8.6.1 以上版本) 會自動納入 NDK 當機回報功能,讓 Crashlytics 自動回報 Android 上的 Unity IL2CPP 當機事件。不過,如要在 Crashlytics 資訊主頁中查看原生程式庫當機的符號化堆疊追蹤,您必須在建構時使用 Firebase CLI 上傳符號資訊。
如要設定符號上傳功能,請按照操作說明安裝 Firebase CLI。
如果已安裝 CLI,請務必更新至最新版本。
步驟 4:建構專案並上傳符號
iOS+ (Apple 平台)
在「Build Settings」對話方塊中,將專案匯出至 Xcode 工作區。
建構應用程式。
如果是 Apple 平台,Firebase Unity 編輯器外掛程式會自動設定 Xcode 專案,為每個版本產生與 Crashlytics 相容的符號檔案,並上傳至 Firebase 伺服器。
Android
在「Build Settings」對話方塊中,執行下列任一操作:
匯出至 Android Studio 專案,以便建構專案。
直接從 Unity 編輯器建構 APK。
建構前,請務必在「Build Settings」對話方塊中勾選「Create symbols.zip」核取方塊。
建構完成後,請執行下列 Firebase CLI 指令,產生與 Crashlytics 相容的符號檔案,並上傳至 Firebase 伺服器:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID:Firebase Android 應用程式 ID (而非套件名稱)
Firebase Android 應用程式 ID 範例:1:567383003300:android:17104a2ced0c9b9bPATH/TO/SYMBOLS:CLI 產生的符號檔案路徑
匯出至 Android Studio 專案:PATH/TO/SYMBOLS 是
unityLibrary/symbols目錄,在您透過 Gradle 或 Android Studio 建構應用程式後,系統會在匯出的專案根目錄中建立該目錄。直接在 Unity 中建構 APK:PATH/TO/SYMBOLS 是建構完成後,在專案根目錄中產生的壓縮符號檔案路徑 (例如:
)。myproject/myapp-1.0-v100.symbols.zip
查看使用 Firebase CLI 指令產生及上傳符號檔案的進階選項
標記 說明 --generator=csym使用舊版 cSYM 符號檔案產生器,而非預設的 Breakpad 產生器
不建議使用。建議使用預設的 Breakpad 符號檔案產生器。
--generator=breakpad使用 Breakpad 符號檔案產生器
請注意,符號檔案生成的預設值為 Breakpad。 只有在建構設定中新增
,且想覆寫該設定改用 Breakpad 時,才需要使用這個旗標。symbolGenerator { csym() }--dry-run產生符號檔案,但不上傳
如要檢查傳送的檔案內容,這個旗標就非常實用。
--debug提供其他偵錯資訊
步驟 5:強制測試當機以完成設定
您需要強制測試當機,才能完成設定 Crashlytics,並在 Firebase 控制台的 Crashlytics 資訊主頁中查看初始資料。
找出既有的
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 reports 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"); } } }
建構應用程式,並在建構完成後上傳符號資訊。
iOS+:Firebase Unity 編輯器外掛程式會自動設定 Xcode 專案,以便上傳符號檔。
Android:如果 Android 應用程式使用 IL2CPP,請執行 Firebase CLI
crashlytics:symbols:upload指令,上傳符號檔。
執行應用程式。應用程式執行後,請觀察裝置記錄,等待
CrashlyticsTester觸發例外狀況。iOS+:在 Xcode 的底部窗格中查看記錄。
Android:在終端機中執行下列指令,即可查看記錄:
adb logcat。
在 Firebase 控制台中,依序前往「DevOps & Engagement」(開發運作與參與度) >「Crashlytics dashboard」(資訊主頁),查看測試當機報告。
如果重新整理控制台後,五分鐘內仍未看到測試當機事件,請啟用偵錯記錄檔,查看應用程式是否傳送當機報告。
大功告成!Crashlytics 現在會監控應用程式是否當機。 前往Crashlytics 資訊主頁,查看及調查所有報表和統計資料。
後續步驟
(建議) 如果 Android 應用程式使用 IL2CPP,請收集 GWP-ASan 報告,協助偵錯原生記憶體錯誤造成的當機問題。這類記憶體相關錯誤可能與應用程式內的記憶體毀損有關,而記憶體毀損是造成應用程式安全漏洞的主要原因。如要使用這項偵錯功能,請確認應用程式採用最新版 Crashlytics SDK for Unity (10.7.0 以上版本),並明確啟用 GWP-ASan (需要修改 Android 應用程式資訊清單)。
自訂當機報告設定:新增選擇加入報告、記錄、金鑰和非致命錯誤追蹤。
將資料匯出至 BigQuery 或 Cloud Logging,即可使用進階分析和功能,例如查詢資料、建立自訂資訊主頁,以及設定自訂快訊。