Menyesuaikan laporan error untuk Web

Pilih platform: iOS+ Android Web Flutter Unity


Di Firebase console (DevOps & Engagement > dasbor Crashlytics), Anda dapat mengklik masalah dan mendapatkan laporan peristiwa yang mendetail. Anda dapat menyesuaikan laporan tersebut dan mengelola pengumpulan telemetri untuk membantu lebih memahami situasi yang terjadi di aplikasi web Anda:

Melaporkan pengecualian yang ditangani secara terprogram

Anda dapat mencatat pengecualian yang ditangani secara manual menggunakan recordError. Error pemilihan rute dan pengecualian yang tidak tertangkap akan otomatis ditangkap oleh batas error framework Anda.

Berikut cara melacak prevalensi kegagalan dan atribut diagnostik di seluruh pengguna Anda:

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);
  }
}

Menambahkan kunci kustom

Kunci metadata kustom membantu Anda memahami status aplikasi atau alur kerja pengguna tertentu menjelang error.

Anda dapat mencatat aktivitas pengguna, status sesi, dan detail diagnostik secara langsung sebagai atribut kustom nilai kunci menggunakan parameter metadata opsional saat memanggil 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'
});

Atribut kustom ini disimpan dalam laporan pengecualian dan muncul di tab Keys dalam tampilan masalah dasbor Crashlytics.

Memaksa penghapusan data telemetri

Secara default, mesin telemetri web mengelompokkan log ke dalam segmen memori untuk menghemat masa pakai baterai, performa CPU, dan bandwidth jaringan. Namun, untuk lingkungan eksekusi yang berumur singkat, log harus segera diupload sebelum konteks eksekusi dihancurkan.

Anda dapat menggunakan perintah flush asinkron untuk segera mengirim semua error dalam antrean ke backend:

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();
}

Mengonfigurasi frekuensi sampling

Jika Anda mengambil sampel proporsi sesi pengguna untuk mengontrol volume dan biaya telemetri, Anda dapat mengonfigurasi pengambilan sampel menggunakan salah satu opsi berikut:

Opsi 1 (direkomendasikan): Konfigurasikan frekuensi sampling di Firebase console

  1. Di Firebase console, buka DevOps & Engagement > dasbor Crashlytics.

  2. Pilih aplikasi web Anda dari pemilih drop-down di bagian atas halaman.

  3. Klik Konfigurasi pengambilan sampel di pojok kanan atas dasbor.

  4. Tetapkan persentase Frekuensi sampling (antara 0% dan 100%) untuk mengontrol persentase peristiwa dan sesi yang dikumpulkan dari klien.

Opsi 2: Menetapkan frekuensi sampling menggunakan Firebase Telemetry Admin API

Anda dapat menggunakan Firebase Telemetry Admin API (firebasetelemetryadmin.googleapis.com/v1alpha) untuk mengelola setelan pengumpulan telemetri untuk aplikasi Firebase Anda.

  1. Konfigurasikan variabel yang diperlukan berikut di terminal Anda:

    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. Temukan CONFIG_NAME Anda, lalu konfigurasikan sebagai variabel di terminal Anda:

    Setelan telemetri dikelola menggunakan resource Config, jadi Anda perlu menemukan CONFIG_NAME tertentu untuk aplikasi web Anda.

    1. Cantumkan konfigurasi dalam project Anda dan filter menurut FIREBASE_APP_ID. Flag curl -G dan --data-urlencode memastikan string filter AIP-160 dienkode URL dengan benar:

      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. Dalam respons JSON, temukan kolom name untuk aplikasi Anda (projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>), lalu tetapkan sebagai variabel CONFIG_NAME:

      CONFIG_NAME="CONFIG_NAME"
      
  3. Tetapkan frekuensi sampling:

    Untuk menyesuaikan frekuensi sampling, gunakan metode PATCH untuk memperbarui kolom sampling_rate. Anda harus menentukan updateMask=sampling_rate dalam parameter kueri. Frekuensi sampling adalah nilai ganda yang mewakili persentase sesi yang akan dikumpulkan (misalnya, 0.25 untuk 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"
    

Menonaktifkan atau mengaktifkan pengumpulan telemetri

Secara default, pengumpulan telemetri diaktifkan saat Anda menyiapkan Crashlytics untuk aplikasi web Anda. Jika Anda perlu menonaktifkan atau mengaktifkan kembali pengumpulan telemetri secara dinamis setelah menginstal Crashlytics SDK, Anda dapat mengelola endpoint pengumpulan menggunakan Firebase Telemetry Admin API (firebasetelemetryadmin.googleapis.com/v1alpha).

Sebelum dapat menonaktifkan atau mengaktifkan telemetri, Anda perlu menetapkan variabel berikut:

  1. Konfigurasikan variabel yang diperlukan berikut di terminal Anda:

    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. Temukan CONFIG_NAME Anda, lalu konfigurasikan sebagai variabel di terminal Anda:

    Setelan telemetri dikelola menggunakan resource Config, jadi Anda perlu menemukan CONFIG_NAME tertentu untuk aplikasi web Anda.

    1. Cantumkan konfigurasi dalam project Anda dan filter menurut FIREBASE_APP_ID. Flag curl -G dan --data-urlencode memastikan string filter AIP-160 dienkode URL dengan benar:

      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. Dalam respons JSON, temukan kolom name untuk aplikasi Anda (projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>), lalu tetapkan sebagai variabel CONFIG_NAME:

      CONFIG_NAME="CONFIG_NAME"
      

Menonaktifkan pengumpulan telemetri

Gunakan metode kustom :disable untuk menonaktifkan pengumpulan telemetri:

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

Mengaktifkan kembali pengumpulan telemetri

Untuk mengaktifkan kembali pengumpulan telemetri, panggil metode :enable:

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