自訂 Unity 的當機報告

選取平台: iOS+ Android Flutter Unity


您可以在 控制台的「DevOps 與參與度」 > 「Crashlytics 資訊主頁」中,點選問題並取得詳細的事件報表。Firebase您可以自訂這些報表,進一步瞭解應用程式的運作情形,以及向 Crashlytics 回報的事件相關情況。

回報例外狀況

回報已攔截的例外狀況

如果發生預期中的例外狀況,可以讓 Crashlytics SDK 將其回報為非致命事件。這些事件會記錄在裝置上,然後與下一個嚴重事件報告一併傳送,或在使用者重新啟動遊戲時傳送。

您可以使用下列方法,在 C# 中記錄例外狀況:

Crashlytics.LogException(Exception ex);

您可以在遊戲的 try/catch 區塊中記錄預期的例外狀況:

try {
    myMethodThatThrows();
} catch (Exception e) {
   Crashlytics.LogException(e);
   // handle your exception here!
}

回報未偵測到的例外狀況

如果未偵測到的例外狀況不會導致遊戲當機 (例如遊戲邏輯中未偵測到的 C# 例外狀況),您可以在 Unity 專案中初始化 Crashlytics 的位置,將 Crashlytics.ReportUncaughtExceptionsAsFatal 屬性設為 true,讓 Crashlytics SDK 將這些例外狀況回報為嚴重事件。這些事件會即時回報給 Crashlytics,使用者不需要重新啟動遊戲。

將這些未偵測到的例外狀況回報為嚴重事件,代表這些事件會計入未受當機情況影響的使用者統計資料,且會算做當機風險驟升快訊的一部分。

請注意,原生程式碼發生錯誤一律會回報為嚴重事件。這些事件會記錄在裝置上,並在使用者重新啟動遊戲時一併傳送。

void Start() {
    // Since there is no try-block surrounding this call, if an exception is thrown,
    // it is considered unexpected.
    // Setting `Crashlytics.ReportUncaughtExceptionsAsFatal = true`
    // will ensure that such cases are reported as fatals.
    thirdPartyMethodThatMayThrow();
}

納入 GWP-ASan 報告,對記憶體毀損問題進行偵錯

對於使用 IL2CPP 的 Android 應用程式,Crashlytics可收集 GWP-ASan 報告,協助您對原生記憶體錯誤造成的當機問題進行偵錯。這類記憶體相關錯誤可能與應用程式內的記憶體毀損問題有關,而這類問題是產生應用程式安全漏洞的主要原因。

在 Firebase 控制台的「DevOps & Engagement」>「Crashlytics 資訊主頁」中,您可以對這項資料執行下列操作:

  • 點選問題詳細資料,即可在新的「記憶體堆疊追蹤」分頁中查看這項資料。

  • 您可以使用新的「GWP-ASan 報告」信號和篩選器,快速查看含有這項資料的所有問題。

如果應用程式使用最新版 Crashlytics SDK for Unity (10.7.0 以上版本),且明確啟用 GWP-ASan (需要修改 Android 應用程式資訊清單),您就能取得 GWP-ASan 記憶體報告。如果應用程式含有 C++ 程式碼,您可以使用 Android 說明文件中的原生程式碼範例,測試 GWP-ASan 設定。

新增自訂鍵

你可以使用自訂鍵,取得導致當機情況的應用程式特定狀態。您可以將任意鍵/值組合與當機報告建立關聯,然後使用自訂鍵,在 Firebase 控制台的「DevOps & Engagement」 > 「Crashlytics 資訊主頁」中搜尋及篩選當機報告。

  • 您可以搜尋與自訂鍵相符的問題。

  • 在控制台中查看特定問題時,您可以查看每個事件的相關自訂鍵 (「Keys」子分頁),甚至可以依自訂鍵篩選事件 (頁面頂端的「Filter」選單)。

如果多次呼叫,現有鍵的新值會更新值,且記錄當機時只會擷取最新值。

Crashlytics.SetCustomKey(string key, string value);

新增自訂記錄訊息

如要進一步瞭解導致當機的事件,您可以在應用程式中新增自訂 Crashlytics 記錄。Crashlytics 會將記錄與當機資料建立關聯,並在您查看問題詳細資料時,將記錄顯示在「Logs」分頁中 (如要查看所有問題,請前往 Firebase 控制台的「DevOps & Engagement」 >「Crashlytics dashboard」)。

Crashlytics.Log(string message);

設定使用者 ID

您可以使用 ID 號碼、權杖或雜湊值,不重複識別應用程式的使用者,而不必揭露或傳輸任何個人資訊。您也可以將值設為空白字串,藉此清除值。在Firebase控制台的「DevOps & Engagement」 >「Crashlytics」資訊主頁中查看特定當機事件時,就會顯示這個值。

Crashlytics.SetUserId(string identifier);

取得當機前使用者動作記錄

當機前使用者動作記錄可協助您進一步瞭解使用者在發生當機、非致命錯誤或 ANR 事件前,與應用程式的互動情形。在嘗試重現及偵錯問題時,這些記錄會很有幫助。

當機前使用者動作記錄由 Google Analytics 提供,因此您必須為 Firebase 專案啟用 Google Analytics,並在應用程式中新增 Google Analytics 的 Firebase SDK,才能取得這類記錄。符合這些條件後,當您查看問題詳細資料時,當機前使用者動作記錄就會自動包含在「記錄」分頁的事件資料中 (您可以在 Firebase 控制台的「開發運作和參與度」>「Crashlytics 資訊主頁」中查看所有問題)。

Analytics SDK 會自動記錄 screen_view 事件,讓當機前使用者動作記錄顯示當機、非致命錯誤或 ANR 事件發生前,使用者瀏覽過的畫面清單。screen_view 當機前使用者動作記錄包含 firebase_screen_class 參數。

當機前使用者動作記錄也會填入您在使用者工作階段中手動記錄的任何自訂事件,包括事件的參數資料。這項資料可協助您瞭解導致當機、一般錯誤或 ANR 事件的一連串使用者動作。

請注意,您可以控管 Google Analytics 資料的收集和使用方式,包括填入當機前使用者動作記錄的資料。

啟用選擇加入報表

根據預設,Crashlytics 會自動收集所有應用程式使用者的當機報告。您可以讓使用者選擇加入回報當機情形,進一步控管傳送的資料。

如要只為特定使用者停用自動收集功能,請在執行階段呼叫 Crashlytics 資料收集覆寫。覆寫值會在後續所有應用程式啟動時保留,因此 Crashlytics 可以自動收集該使用者的報表。

Crashlytics.IsCrashlyticsCollectionEnabled = true

如果使用者之後選擇不收集資料,您可以傳遞 false 做為覆寫值,這會在使用者下次啟動應用程式時套用,並在該使用者之後的所有啟動中持續套用。

管理 Crash Insights 資料

Crash Insights 會將您的去識別化堆疊追蹤與其他 Firebase 應用程式的追蹤記錄進行比較,並在問題屬於更廣泛的趨勢時通知您,協助您解決問題。對於許多問題,當機情況深入分析甚至會提供資源,協助您對當機情況進行偵錯。

Crash Insights 會使用匯總的當機資料,找出常見的穩定性趨勢。如果不想分享應用程式資料,可以前往 Firebase 控制台的 DevOps 與參與度 > Crashlytics 資訊主頁 資訊主頁,在問題清單頂端的 當機深入分析 選單中,選擇不採用當機深入分析功能。

後續步驟