開始使用 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 啟用 Google Analytics,您可以前往 使用者介面的「整合」分頁 >專案設定 Firebase)。

    • 如要建立新的 Firebase 專案,請啟用「Google Analytics」 專案建立流程

步驟 1:在應用程式中加入 Crashlytics SDK

請注意,當您將 Unity 專案註冊至 Firebase 專案時,可能已下載 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)。請確認 已啟用 Google Analytics

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

步驟 2:初始化 Crashlytics

  1. 建立新的 C# 指令碼,然後將其新增至場景中的 GameObject

    1. 開啟第一個場景,然後建立名為 CrashlyticsInitializer 的空白 GameObject

    2. 在新物件的「Inspector」(檢查工具) 中,按一下「Add Component」(新增元件)。

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

  • 如果 Android 應用程式使用 Unity 的 Mono 指令碼後端,請按照下列步驟操作 。

  • 如果是 Apple 平台應用程式,則不必執行這些步驟,因為 Firebase Unity 編輯器外掛程式會自動設定 Xcode 專案以上傳符號。

Crashlytics 的 Unity SDK 8.6.1 以上版本會自動包含 NDK 當機回報功能, 可讓 Crashlytics 自動回報 Unity IL2CPP 導致 Android 系統當機不過,如要在 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 產生器

    不建議使用。建議您使用預設值 換行符號符號檔案產生器。

    --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 報告,以便偵錯原生記憶體錯誤所導致的當機情形。這些記憶體相關錯誤可能與應用程式中的記憶體毀損問題有關,而這類問題是造成應用程式安全漏洞的主要原因。如要使用這項偵錯功能,請確認您的應用程式 採用最新的 Crashlytics SDK for Unity (10.7.0 以上版本),並 已明確啟用 GWP-ASan (您必須 修改 Android 應用程式資訊清單)。
  • Google Play 整合,讓 可以直接依下列路徑篩選 Android 應用程式的當機報告:Google Play Crashlytics資訊主頁。這樣一來,您就能更專注於資訊主頁的特定版本。