開始使用 Firebase Crashlytics


本快速入門導覽課程說明如何在應用程式中使用 Firebase Crashlytics SDK 設定 Firebase Crashlytics,以便在 Firebase 控制台中取得完整的當機報告。

如要設定 Crashlytics,您必須具備 Firebase 控制台和 IDE 中的工作 (例如新增 Firebase 設定檔和 Crashlytics SDK)。您需要強制測試當機,才能將第一份當機報告傳送至 Firebase,才能完成設定。

事前準備

  1. 如果您尚未將 Firebase 新增至 Unity 專案,如果您沒有 Unity 專案,可以下載應用程式示例

  2. 建議:如要自動取得導覽標記記錄,瞭解導致當機、非致命或 ANR 事件的使用者動作,您必須在 Firebase 專案中啟用 Google Analytics

    • 如果現有的 Firebase 專案未啟用 Google Analytics,請前往 Firebase 控制台,依序前往 >「Project settings」,依序點選「Integrations」分頁和「Project settings」,啟用 Google Analytics

    • 如果您要建立新的 Firebase 專案,請在專案建立工作流程中啟用 Google Analytics

步驟 1:在應用程式中新增 Crashlytics SDK

請注意,當您在 Firebase 專案中註冊 Unity 專案時,您可能已下載 Firebase Unity SDK,並新增以下步驟中所述的套件。

  1. 下載 Firebase Unity SDK,然後在方便的位置解壓縮 SDK。Firebase Unity SDK 不限於特定平台。

  2. 在您開啟的 Unity 專案中,依序前往「Assets」>「Import Package」>「Custom Package」

  3. 在已解壓縮的 SDK 中,選取要匯入的 Crashlytics SDK (FirebaseCrashlytics.unitypackage)。

    如要充分運用麵包屑記錄,請將 Google Analytics 專用 Firebase SDK 加進應用程式 (FirebaseAnalytics.unitypackage)。請確認 Firebase 專案已啟用 Google Analytics

  4. 在「Import Unity Package」視窗中,按一下「Import」

步驟 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 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 應用程式才需要執行這個步驟。

  • 如果是使用 Unity 的 Mono 指令碼後端的 Android 應用程式,則不需要執行這些步驟。

  • 如果是 Apple 平台應用程式,由於 Firebase Unity Editor 外掛程式會自動設定 Xcode 專案上傳符號,因此不必執行這些步驟。

Crashlytics 的 Unity SDK 8.6.1 以上版本會自動納入 NDK 當機回報功能,讓 Crashlytics 自動回報 Android 上的 Unity IL2CPP 當機情形。不過,如要在 Crashlytics 資訊主頁中查看原生程式庫當機的符號化堆疊追蹤記錄,您必須在建構期間使用 Firebase CLI 上傳符號資訊。

如要設定符號上傳功能,請按照安裝 Firebase CLI 的操作說明操作。

如果您已安裝 CLI,請務必更新至最新版本

步驟 4:建構專案並上傳符號

iOS+ (Apple 平台)

  1. 在「Build Settings」對話方塊中,將專案匯出至 Xcode 工作區。

  2. 建構應用程式。

    如果是 Apple 平台,Firebase Unity Editor 外掛程式會自動設定 Xcode 專案,為每個版本產生與 Crashlytics 相容的符號檔案並上傳至 Firebase 伺服器。

Android

  1. 在「Build Settings」對話方塊中,執行下列任一操作:

    • 匯出至 Android Studio 專案以建構專案;或

    • 直接透過 Unity 編輯器建構 APK。
      建構前,請確認「Build Settings」對話方塊中已勾選「Create symbols.zip」核取方塊。

  2. 建置完成後,請執行下列 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: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

    使用舊版 cSYM 符號檔案產生器,而非預設的 Breakpad 產生器

    不建議使用。建議您使用預設的 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 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");
            }
        }
    }
  2. 建構完成後,即可建構應用程式並上傳符號資訊。

    • iOS+:Firebase Unity 編輯器外掛程式會自動設定 Xcode 專案,上傳符號檔案。

    • Android:如果是使用 IL2CPP 的 Android 應用程式,請執行 Firebase CLI crashlytics:symbols:upload 指令來上傳符號檔案。

  3. 執行應用程式。應用程式執行後,請查看裝置記錄,並等待 CrashlyticsTester 觸發例外狀況。

    • iOS+:在 Xcode 的底部窗格中查看記錄。

    • Android:在終端機中執行以下指令,即可查看記錄檔:adb logcat

  4. 前往 Firebase 控制台的 Crashlytics 資訊主頁,查看測試異常終止情形。

    如果您已重新整理控制台,但五分鐘後仍未看到測試異常終止,請啟用偵錯記錄,看看應用程式是否會傳送異常終止報告。


大功告成!Crashlytics 正在監控應用程式的當機情形。前往 Crashlytics 資訊主頁查看及查看所有報表和統計資料。

後續步驟

  • (建議) 如果是使用 IL2CPP 的 Android 應用程式,請收集 GWP-ASan 報告,以便偵錯原生記憶體錯誤所導致的當機情形。這些記憶體相關錯誤可能與應用程式中的記憶體毀損問題有關,而這類問題是造成應用程式安全漏洞的主要原因。如要利用這項偵錯功能,請確認應用程式使用 Unity 適用的最新版 Crashlytics SDK (10.7.0 以上版本),並明確啟用 GWP-ASan (需要您修改 Android 應用程式資訊清單)。
  • 整合 Google Play,直接在 Crashlytics 資訊主頁中依 Google Play 測試群組篩選 Android 應用程式的當機報告。這樣一來,您就能更專注於特定版本的資訊主頁。