自訂網頁當機報告

選取平台: iOS+ Android Web Flutter Unity


在 Firebase 控制台 (「DevOps & Engagement」> 「Crashlytics 資訊主頁」) 中,您可以點選問題 並取得詳細的事件報表。您可以自訂這些報表並管理遙測資料收集作業,進一步瞭解網頁應用程式的運作情形:

透過程式輔助方式回報已處理的例外狀況

您可以使用 recordError 手動記錄已處理的例外狀況。架構錯誤邊界會自動擷取轉送錯誤和未偵測到的例外狀況。

以下說明如何追蹤使用者失敗普及度和診斷屬性:

import { recordError, getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase';

const crashlytics = getCrashlytics(app);

async function submitPaymentForm() {
  try {
    await api.processTransaction();
  } catch (error) {
    // Manually record handled exceptions with diagnostic context
    recordError(crashlytics, error, {
      userTier: 'Premium Gold',
      checkoutStage: 'BillingAddressVerification',
      transactionCode: 'tx_8412_err',
      retryAttempts: 2
    });
    showFallbackBanner(error);
  }
}

新增自訂鍵

自訂中繼資料鍵可協助您瞭解導致當機的特定應用程式狀態或使用者工作流程。

呼叫 recordError 時,您可以使用選用的中繼資料參數,直接將使用者活動、工作階段狀態和診斷詳細資料記錄為鍵/值自訂屬性:

import { recordError, getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase'; // Shared initialization script

const crashlytics = getCrashlytics(app);

// Pass custom key-value diagnostic metadata within recordError
recordError(crashlytics, error, {
  userTier: 'Premium Gold',
  checkoutStage: 'BillingAddressVerification',
  transactionCode: 'tx_8412_err',
  retryAttempts: 2,
  breadcrumb: 'User opened shopping cart',
  lastAction: 'Click Checkout Button'
});

這些自訂屬性會保留在例外狀況報告中,並顯示在 Crashlytics 資訊主頁問題檢視畫面的「Keys」分頁下方。

強制清除遙測記錄

根據預設,網路遙測引擎會將記錄批次處理至記憶體區段,以節省電池電力、CPU 效能和網路頻寬。不過,如果是短期執行環境,則必須在執行環境刪除前立即上傳記錄。

您可以使用非同步 flush 指令,立即將所有排入佇列的錯誤傳送至後端:

import { recordError, flush, getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase';

const crashlytics = getCrashlytics(app);

async function handleApplicationCrash(error: Error) {
  // Capture the error with immediate priority
  recordError(crashlytics, error, { priority: 'IMMEDIATE' });

  // Force an immediate upload before the process terminates or reloads
  await flush(crashlytics);

  // Safe to terminate or refresh the current execution context
  window.location.reload();
}

設定取樣率

如要對部分使用者工作階段進行取樣,以控管遙測資料量和費用,可以使用下列任一選項設定取樣:

方法 1 (建議):在 Firebase 控制台設定取樣率

  1. 在 Firebase 控制台中,依序前往 「DevOps & Engagement」(開發運作與參與度) >「Crashlytics dashboard」(資訊主頁)。

  2. 從頁面頂端的下拉式選單中選取網頁應用程式。

  3. 按一下資訊主頁右上角的「設定取樣」。

  4. 設定「取樣率」百分比 (介於 0% 和 100% 之間),控制從用戶端收集的事件和工作階段百分比。

方法 2:使用 Firebase Telemetry Admin API 設定取樣率

您可以使用 Firebase Telemetry Admin API (firebasetelemetryadmin.googleapis.com/v1alpha) 管理 Firebase 應用程式的遙測收集設定。

  1. 在終端機中設定下列必要變數:

    PROJECT_ID="PROJECT_ID"
    LOCATION="LOCATION"  # for example, global
    APP_ID="FIREBASE_APP_ID"  # for example, 1:1234567890:web:abcdef123456
    TOKEN=$(gcloud auth application-default print-access-token)
    
  2. 找出 CONFIG_NAME,然後在終端機中將其設為變數:

    遙測設定是透過 Config 資源管理,因此您需要找出網頁應用程式的特定 CONFIG_NAME。

    1. 列出專案中的設定,並依 FIREBASE_APP_ID 篩選。curl -G 和 --data-urlencode 旗標可確保 AIP-160 篩選器字串正確進行網址編碼:

      curl -G \
        -H "Authorization: Bearer $TOKEN" \
        --data-urlencode "filter=app_id=\"${APP_ID}\"" \
        "https://firebasetelemetryadmin.googleapis.com/v1alpha/projects/${PROJECT_ID}/locations/${LOCATION}/configs"
      
    2. 在 JSON 回應中,找出應用程式的 name 欄位 (projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>),然後將其設為 CONFIG_NAME 變數:

      CONFIG_NAME="CONFIG_NAME"
      
  3. 設定取樣率:

    如要調整取樣率,請使用 PATCH 方法更新 sampling_rate 欄位。您必須在查詢參數中指定 updateMask=sampling_rate。取樣率是雙精度浮點數值,代表要收集的工作階段百分比 (例如 0.25 代表 25%):

    # Example: Set sampling rate to 25%
    curl -X PATCH \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d "{
        \"sampling_rate\": 0.25,
        \"app_id\": \"${APP_ID}\"
      }" \
      "https://firebasetelemetryadmin.googleapis.com/v1alpha/${CONFIG_NAME}?updateMask=sampling_rate"
    

停用或啟用遙測資料收集功能

根據預設,為網頁應用程式設定 Crashlytics 時,系統會啟用遙測資料收集功能。如果安裝 Crashlytics SDK 後,需要動態停用或重新啟用遙測資料收集功能,可以使用 Firebase Telemetry Admin API (firebasetelemetryadmin.googleapis.com/v1alpha) 管理收集端點。

您必須先設定下列變數,才能停用或啟用遙測功能:

  1. 在終端機中設定下列必要變數:

    PROJECT_ID="PROJECT_ID"
    LOCATION="LOCATION"  # for example, global
    APP_ID="FIREBASE_APP_ID"  # for example, 1:1234567890:web:abcdef123456
    TOKEN=$(gcloud auth application-default print-access-token)
    
  2. 找出 CONFIG_NAME,然後在終端機中將其設為變數:

    遙測設定是透過 Config 資源管理,因此您需要找出網頁應用程式的特定 CONFIG_NAME。

    1. 列出專案中的設定,並依 FIREBASE_APP_ID 篩選。curl -G 和 --data-urlencode 旗標可確保 AIP-160 篩選器字串正確進行網址編碼:

      curl -G \
        -H "Authorization: Bearer $TOKEN" \
        --data-urlencode "filter=app_id=\"${APP_ID}\"" \
        "https://firebasetelemetryadmin.googleapis.com/v1alpha/projects/${PROJECT_ID}/locations/${LOCATION}/configs"
      
    2. 在 JSON 回應中,找出應用程式的 name 欄位 (projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>),然後將其設為 CONFIG_NAME 變數:

      CONFIG_NAME="CONFIG_NAME"
      

停用遙測資料收集功能

使用 :disable 自訂方法停用遙測收集功能:

curl -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}' \
  "https://firebasetelemetryadmin.googleapis.com/v1alpha/${CONFIG_NAME}:disable"

重新啟用遙測資料收集功能

如要重新啟用遙測資料收集功能,請呼叫 :enable 方法:

curl -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}' \
  "https://firebasetelemetryadmin.googleapis.com/v1alpha/${CONFIG_NAME}:enable"