ウェブ向けにクラッシュ レポートをカスタマイズする

プラットフォームを選択: 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 を呼び出すときに、オプションのメタデータ パラメータを使用して、ユーザー アクティビティ、セッション状態、診断の詳細を Key-Value カスタム属性として直接ロギングできます。

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 ダッシュボードの問題ビューの [キー] タブに表示されます。

テレメトリー レコードを強制的にフラッシュする

デフォルトでは、ウェブ テレメトリー エンジンは、バッテリー駆動時間、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 とエンゲージメント] > [Crashlytics ダッシュボード] に移動します。

  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 フィルタ文字列が正しく URL エンコードされます。

      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 レスポンスで、アプリ(projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>)の name フィールドを見つけて、CONFIG_NAME 変数として設定します。

      CONFIG_NAME="CONFIG_NAME"
      
  3. サンプリング レートを設定します。

    サンプリング レートを調整するには、PATCH メソッドを使用して sampling_rate フィールドを更新します。クエリ パラメータに updateMask=sampling_rate を指定する必要があります。サンプリング レートは、収集するセッションの割合を表す double 値です(例: 25% の場合は 0.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 フィルタ文字列が正しく URL エンコードされます。

      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 レスポンスで、アプリ(projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>)の name フィールドを見つけて、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"