本快速入門導覽課程說明如何使用 Firebase Crashlytics SDK 在應用程式中設定 Firebase Crashlytics,以便在 Firebase 控制台中取得完整的當機報告。
設定 Crashlytics 時,您需要在 Firebase 控制台和 IDE 中執行作業 (例如新增 Firebase 設定檔和 Crashlytics SDK)。如要完成設定,您需要強制測試當機,將第一份當機報告傳送至 Firebase。
事前準備
如果您尚未將 Firebase 新增至 Unity 專案,請先新增。如果沒有 Unity 專案,可以下載範例應用程式。
建議:如要自動取得導覽標記記錄,瞭解使用者在發生當機、一般錯誤或 ANR 事件前執行的動作,請在 Firebase 專案中啟用 Google Analytics。
如果現有的 Firebase 專案未啟用 Google Analytics,您可以前往 Firebase 控制台的「
,然後在「 」>「專案設定」整合」分頁標籤中啟用 Google Analytics。 如果您要建立新的 Firebase 專案,請在專案建立工作流程中啟用 Google Analytics。
步驟 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
)。如要使用路徑記錄,請在應用程式中加入 Firebase SDK for Google Analytics (
FirebaseAnalytics.unitypackage
)。請確認 Firebase 專案已啟用 Google Analytics。在「Import Unity Package」視窗,按一下「Import」。
步驟 2:初始化 Crashlytics
建立新的 C# 指令碼,然後新增至場景中的
GameObject
。開啟第一個場景,然後建立名為
CrashlyticsInitializer
的空白GameObject
。在新物件的「檢查器」中,按一下「新增元件」。
選取
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 專案,以便上傳符號。
Crashlytics 的 Unity 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」(建立 symbols.zip) 的核取方塊。
建構完成後,請產生與 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/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:針對使用 IL2CPP 的 Android 應用程式,請執行 Firebase CLI
crashlytics:symbols:upload
指令,上傳符號檔。
執行應用程式。應用程式執行後,請查看裝置記錄,並等待
CrashlyticsTester
觸發例外狀況。iOS+:在 Xcode 的底部窗格中查看記錄。
Android:在終端機中執行以下指令,即可查看記錄:
adb logcat
。
前往 Firebase 控制台的Crashlytics 資訊主頁,查看測試當機情形。
如果重新整理控制台後,您在五分鐘內仍未看到測試當機,請啟用偵錯記錄,確認應用程式是否傳送當機報告。
這樣就完成了!「Crashlytics」現在會監控應用程式是否當機。 前往 Crashlytics 資訊主頁,即可查看及調查所有報表和統計資料。
後續步驟
- (建議) 如果是使用 IL2CPP 的 Android 應用程式,請收集 GWP-ASan 報告,協助偵錯原生記憶體錯誤導致的當機問題。這類記憶體相關錯誤可能與應用程式內的記憶體毀損問題有關,而這類問題是造成應用程式安全漏洞的主要原因。如要使用這項偵錯功能,請確認應用程式使用最新版 Crashlytics Unity 適用的 SDK (10.7.0 以上版本),並明確啟用 GWP-ASan (需要修改 Android 應用程式資訊清單)。
- 自訂當機報告設定,新增選擇加入回報、記錄、鍵,以及追蹤非致命錯誤。
- 與 Google Play 整合,即可直接在 Crashlytics 資訊主頁中,依 Google Play 軌道篩選 Android 應用程式的當機報告。這樣一來,您就能更專注於特定建構版本。