Dostosowywanie raportów o awariach w przypadku aplikacji internetowych

Wybierz platformę: iOS+ Android Web Flutter Unity


W konsoli Firebase (DevOps i zaangażowanie > panel Crashlytics) możesz kliknąć problem, aby wyświetlić szczegółowy raport Zdarzenia. Możesz dostosowywać te raporty i zarządzać zbieraniem danych telemetrycznych, aby lepiej zrozumieć, co dzieje się w aplikacji internetowej:

Zgłaszanie obsłużonych wyjątków automatycznie

Możesz ręcznie rejestrować obsłużone wyjątki za pomocą metody recordError. Błędy routingu i nieobsługiwane wyjątki są automatycznie przechwytywane przez granice błędów platformy.

Oto jak śledzić częstość występowania błędów i atrybuty diagnostyczne u użytkowników:

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

Dodawanie kluczy niestandardowych

Niestandardowe klucze metadanych pomagają zrozumieć konkretny stan aplikacji lub przepływ pracy użytkownika, który doprowadził do awarii.

Możesz rejestrować aktywność użytkowników, stany sesji i szczegóły diagnostyczne bezpośrednio jako atrybuty niestandardowe klucz-wartość, używając opcjonalnego parametru metadanych podczas wywoływania 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'
});

Te atrybuty niestandardowe są przechowywane w raporcie o wyjątkach i pojawiają się na karcie Klucze w widoku problemu w Crashlytics panelu.

Wymuś czyszczenie rekordów telemetrycznych

Domyślnie silnik telemetrii internetowej grupuje logi w segmenty pamięci, aby oszczędzać baterię, wydajność procesora i przepustowość sieci. Jednak w przypadku krótkotrwałych środowisk wykonawczych logi muszą zostać przesłane bezpośrednio przed zniszczeniem kontekstu wykonania.

Możesz użyć asynchronicznego polecenia flush, aby natychmiast wysłać wszystkie błędy z kolejki do backendu:

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

Konfigurowanie częstotliwości próbkowania

Jeśli próbkujesz część sesji użytkowników, aby kontrolować ilość i koszt danych telemetrycznych, możesz skonfigurować próbkowanie za pomocą dowolnej z tych opcji:

Opcja 1 (zalecana): skonfiguruj częstotliwość próbkowania w konsoli Firebase

  1. W konsoli Firebase otwórz panel DevOps i zaangażowanie > Crashlytics.

  2. Wybierz aplikację internetową w menu u góry strony.

  3. W prawym górnym rogu panelu kliknij Skonfiguruj próbkowanie.

  4. Ustaw wartość procentową Częstotliwości próbkowania (od 0% do 100%), aby kontrolować odsetek zdarzeń i sesji zbieranych od klientów.

Opcja 2. Ustawianie częstotliwości próbkowania za pomocą interfejsu Firebase Telemetry Admin API

Możesz używać interfejsu Firebase Telemetry Admin API (firebasetelemetryadmin.googleapis.com/v1alpha) do zarządzania ustawieniami zbierania danych telemetrycznych w aplikacjach w Firebase.

  1. Skonfiguruj w terminalu te wymagane zmienne:

    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. Znajdź CONFIG_NAME, a następnie skonfiguruj go jako zmienną w terminalu:

    Ustawieniami telemetrii zarządza się za pomocą zasobu Config, więc musisz znaleźć konkretny zasób CONFIG_NAME dla swojej aplikacji internetowej.

    1. Wyświetl listę konfiguracji w projekcie i odfiltruj je według FIREBASE_APP_ID. Flagi curl -G i --data-urlencode zapewniają, że ciąg filtra AIP-160 jest prawidłowo zakodowany w adresie 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. W odpowiedzi JSON znajdź pole name aplikacji (projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>), a następnie ustaw je jako zmienną CONFIG_NAME:

      CONFIG_NAME="CONFIG_NAME"
      
  3. Ustaw częstotliwość próbkowania:

    Aby dostosować częstotliwość próbkowania, użyj metody PATCH, aby zaktualizować pole sampling_rate. W parametrach zapytania musisz podać updateMask=sampling_rate. Częstotliwość próbkowania to wartość podwójnej precyzji, która reprezentuje odsetek sesji do zebrania (np. 0.25 dla 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"
    

Wyłączanie i włączanie zbierania danych telemetrycznych

Domyślnie zbieranie danych telemetrycznych jest włączone, gdy skonfigurujesz Crashlytics w aplikacji internetowej. Jeśli po zainstalowaniu pakietu SDK Crashlytics musisz dynamicznie wyłączyć lub ponownie włączyć zbieranie danych telemetrycznych, możesz zarządzać punktami końcowymi zbierania danych za pomocą interfejsu Firebase Telemetry Admin API (firebasetelemetryadmin.googleapis.com/v1alpha).

Zanim wyłączysz lub włączysz dane telemetryczne, musisz ustawić te zmienne:

  1. Skonfiguruj w terminalu te wymagane zmienne:

    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. Znajdź CONFIG_NAME, a następnie skonfiguruj go jako zmienną w terminalu:

    Ustawieniami telemetrii zarządza się za pomocą zasobu Config, więc musisz znaleźć konkretny zasób CONFIG_NAME dla swojej aplikacji internetowej.

    1. Wyświetl listę konfiguracji w projekcie i odfiltruj je według FIREBASE_APP_ID. Flagi curl -G i --data-urlencode zapewniają, że ciąg filtra AIP-160 jest prawidłowo zakodowany w adresie 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. W odpowiedzi JSON znajdź pole name aplikacji (projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>), a następnie ustaw je jako zmienną CONFIG_NAME:

      CONFIG_NAME="CONFIG_NAME"
      

Wyłączanie zbierania danych telemetrycznych

Aby wyłączyć zbieranie danych telemetrycznych, użyj metody niestandardowej :disable:

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

Ponowne włączanie zbierania danych telemetrycznych

Aby ponownie włączyć zbieranie danych telemetrycznych, wywołaj metodę :enable:

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