開始使用 Firebase Crashlytics

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

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

事前準備

  1. 如果您尚未在 Unity 專案中新增 Firebase,請先完成這項操作。如果您沒有 Unity 專案,可以下載範例應用程式

  2. 建議做法:如要自動取得導覽標記記錄,瞭解引發當機、一般錯誤或 ANR 事件的使用者動作,您必須在 Firebase 專案中啟用 Google Analytics (分析)。

    • 如果現有的 Firebase 專案尚未啟用 Google Analytics (分析),您可以在 Firebase 控制台中前往 >「專案設定」,在「整合」分頁中啟用 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. 在新物件的「Inspector」(檢查工具) 中,按一下「Add Component」(新增元件)。

    3. 選取要新增至 CrashlyticsInitializer 物件的 CrashlyticsInit 指令碼。

  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設定符號上傳功能

只有使用 IL2CPP 的 Android 應用程式才需要執行這個步驟。

  • 如果 Android 應用程式使用 Unity 的 Mono 指令碼後端,則不必執行以下步驟。

  • 如果是 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. 建構完成後,請產生與 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/SYMBOLSunityLibrary/symbols 目錄,在您透過 Gradle 或 Android Studio 建構應用程式時,會在匯出的專案根目錄中建立。

      • 直接在 Unity 中建構 APK:PATH/TO/SYMBOLS 是建構作業結束時,在專案根目錄中產生的 ZIP 符號檔案路徑 (例如:myproject/myapp-1.0-v100.symbols.zip)。

    查看使用 Firebase CLI 指令產生及上傳符號檔案的進階選項

    標記 說明
    --generator=csym

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

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

    --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 應用程式的當機報告。如此一來,您就能將資訊主頁的重點放在特定版本上。