Personaliza los informes de fallas para la Web

Seleccionar plataforma: iOS+ Android Web Flutter Unity


En la consola de Firebase (DevOps y participación > panel de Crashlytics), puedes hacer clic en un problema para obtener un informe detallado del evento. Puedes personalizar esos informes y administrar la recopilación de telemetría para comprender mejor lo que sucede en tu app web:

Informa excepciones controladas de manera programática

Puedes registrar excepciones controladas de forma manual con recordError. Los límites de errores de tu framework capturan automáticamente los errores de enrutamiento y las excepciones no detectadas.

A continuación, se muestra cómo hacer un seguimiento de la prevalencia de fallas y los atributos de diagnóstico en tus usuarios:

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

Agrega claves personalizadas

Las claves de metadatos personalizadas te ayudan a comprender el estado específico de la app o el flujo de trabajo del usuario que provocó una falla.

Puedes registrar las actividades del usuario, los estados de las sesiones y los detalles de diagnóstico directamente como atributos personalizados de par clave-valor con el parámetro de metadatos opcional cuando llamas a 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'
});

Estos atributos personalizados se conservan en el informe de excepciones y aparecen en la pestaña Claves de la vista de problemas del panel de Crashlytics.

Fuerza la eliminación de los registros de telemetría

De forma predeterminada, el motor de telemetría web agrupa los registros en segmentos de memoria para preservar la duración de la batería, el rendimiento de la CPU y el ancho de banda de la red. Sin embargo, en el caso de los entornos de ejecución de corta duración, los registros se deben subir inmediatamente antes de que se destruya el contexto de ejecución.

Puedes usar el comando asíncrono flush para enviar todos los errores en cola al backend de inmediato:

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

Configura la tasa de muestreo

Si tomas una muestra de una proporción de las sesiones de usuario para controlar el volumen y el costo de la telemetría, puedes configurar el muestreo con cualquiera de las siguientes opciones:

Opción 1 (recomendada): Configura la tasa de muestreo en Firebase console

  1. En la consola de Firebase, ve al panel DevOps & Engagement > Crashlytics.

  2. Selecciona tu app web en el selector desplegable que se encuentra en la parte superior de la página.

  3. Haz clic en Configurar muestreo en la esquina superior derecha del panel.

  4. Establece el porcentaje de la Tasa de muestreo (entre 0% y 100%) para controlar el porcentaje de eventos y sesiones recopilados de los clientes.

Opción 2: Establece la tasa de muestreo con la API de Firebase Telemetry Admin

Puedes usar la API de Firebase Telemetry Admin (firebasetelemetryadmin.googleapis.com/v1alpha) para administrar la configuración de recopilación de telemetría de tus apps de Firebase.

  1. Configura las siguientes variables obligatorias en tu terminal:

    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. Busca tu CONFIG_NAME y, luego, configúralo como una variable en tu terminal:

    La configuración de telemetría se administra con un recurso Config, por lo que debes encontrar el CONFIG_NAME específico para tu app web.

    1. Enumera los parámetros de configuración de tu proyecto y fíltralos por tu FIREBASE_APP_ID. Las marcas curl -G y --data-urlencode garantizan que la cadena de filtro AIP-160 esté codificada en URL de forma correcta:

      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. En la respuesta JSON, busca el campo name de tu app (projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>) y, luego, establécelo como tu variable CONFIG_NAME:

      CONFIG_NAME="CONFIG_NAME"
      
  3. Establece la tasa de muestreo:

    Para ajustar la tasa de muestreo, usa el método PATCH para actualizar el campo sampling_rate. Debes especificar updateMask=sampling_rate en los parámetros de consulta. La tasa de muestreo es un valor doble que representa el porcentaje de sesiones que se recopilarán (por ejemplo, 0.25 para el 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"
    

Inhabilita o habilita la recopilación de telemetría

De forma predeterminada, la recopilación de telemetría se habilita cuando configuras Crashlytics para tu app web. Si necesitas inhabilitar o volver a habilitar la recopilación de telemetría de forma dinámica después de instalar el SDK de Crashlytics, puedes administrar los endpoints de recopilación con la API de Admin de Firebase Telemetry (firebasetelemetryadmin.googleapis.com/v1alpha).

Antes de inhabilitar o habilitar la telemetría, debes configurar las siguientes variables:

  1. Configura las siguientes variables obligatorias en tu terminal:

    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. Busca tu CONFIG_NAME y, luego, configúralo como una variable en tu terminal:

    La configuración de telemetría se administra con un recurso Config, por lo que debes encontrar el CONFIG_NAME específico para tu app web.

    1. Enumera los parámetros de configuración de tu proyecto y fíltralos por tu FIREBASE_APP_ID. Las marcas curl -G y --data-urlencode garantizan que la cadena de filtro AIP-160 esté codificada en URL de forma correcta:

      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. En la respuesta JSON, busca el campo name de tu app (projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>) y, luego, establécelo como tu variable CONFIG_NAME:

      CONFIG_NAME="CONFIG_NAME"
      

Inhabilita la recopilación de telemetría

Usa el método personalizado :disable para inhabilitar la recopilación de telemetría:

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

Vuelve a habilitar la recopilación de telemetría

Para volver a habilitar la recopilación de telemetría, llama al método :enable:

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