| Seleccionar plataforma: | iOS+ Android NDK de Android Web Flutter Unity |
En esta guía, se describe cómo comenzar a usar Firebase Crashlytics en tu app web.
Después de configurar el SDK de Firebase Crashlytics en tu app, puedes obtener informes de fallas completos en Firebase console. Con Crashlytics para apps web, obtienes informes de errores.
Antes de comenzar
La configuración de Crashlytics requiere realizar tareas en Firebase console y en tu IDE (por ejemplo, agregar la configuración de Firebase de tu app y el SDK de Crashlytics). Para finalizar la configuración, deberás forzar una falla de prueba para enviar el primer informe de fallas a Firebase.
Para configurar Crashlytics de forma manual en tu app web, asegúrate de haber completado los siguientes requisitos previos:
Crea un proyecto y una app de Firebase si aún no tienes uno. Si aún no lo has hecho, agrega Firebase a tu proyecto de JavaScript.
Asegúrate de que tu cuenta tenga permisos de propietario en tu proyecto. Esto es necesario para habilitar las APIs y los roles de IAM necesarios.
Asegúrate de que tu proyecto de Firebase tenga el plan de precios Blaze de pago por uso. Crashlytics para la Web usa Cloud Logging para el almacenamiento de telemetría y Cloud Storage para el almacenamiento de mapas de origen, que son productos pagados con un nivel sin costo. Obtén más información sobre los precios de Logging y los precios de Cloud Storage.
Paso 1: Habilita Crashlytics para tu app web
Crashlytics para la Web usa Cloud Logging, Error Reporting y Cloud Storage, por lo que debes habilitar estas APIs y configurar los permisos para tu proyecto. Puedes habilitar Crashlytics para tu app web con la consola de Firebase o la CLI de Firebase.
Usa Firebase console
En la consola de Firebase, ve a DevOps y participación > panel de Crashlytics.
Selecciona tu app web en el selector desplegable que se encuentra en la parte superior de la página.
Haz clic en Configurar Crashlytics y sigue las instrucciones en pantalla.
Usa la CLI de Firebase
Si prefieres configurar tu proyecto desde la terminal o con un agente de programación de IA, puedes usar la CLI de Firebase:
Asegúrate de tener instalada la CLI de Firebase v15.35.0 o una posterior y de que te autenticaste (
firebase login). Obtén información para instalar o actualizar la CLI de Firebase.Ejecuta el siguiente comando para configurar Crashlytics en tu app web:
firebase crashlytics:setup \ --app FIREBASE_APP_ID \ --project PROJECT_IDEste comando realiza los siguientes pasos de configuración:
Verifica que tu proyecto tenga el plan de precios Blaze de pago por uso y te solicita que lo actualices si es necesario.
Habilita las APIs de Crashlytics y telemetría necesarias (
firebasetelemetry.googleapis.com,firebasetelemetryadmin.googleapis.com,firebasecrashlytics.googleapis.comyclienttelemetry.googleapis.com).Si la clave de API de tu app web tiene restricciones de API, agrega
clienttelemetry.googleapis.coma sus APIs permitidas.Establece la configuración de telemetría de Crashlytics para tu app web.
Cuando se ejecuta de forma interactiva, te solicita que habilites de forma opcional las alertas por correo electrónico para los problemas nuevos y recurrentes.
Paso 2: Agrega y, luego, inicializa el SDK en tu app
Instala el SDK de Crashlytics:
npm install firebaseInicializa tu instancia de
FirebaseApp:Crea un archivo de utilidad de configuración central para usar la inicialización de singleton. Para encontrar los valores de configuración de tu app de Firebase, ve a la página
Configuración del proyecto > General en la consola de Firebase, ve a la tarjeta Tus apps y selecciona tu app web.// src/lib/firebase.ts import { initializeApp, getApps, getApp } from '@firebase/app'; const firebaseConfig = { apiKey: "API_KEY", authDomain: "AUTH_DOMAIN", projectId: "PROJECT_ID", storageBucket: "STORAGE_BUCKET", messagingSenderId: "MESSAGING_SENDER_ID", appId: "FIREBASE_APP_ID" }; // Guarantee singleton initialization across renders or module refreshes export const app = getApps().length === 0 ? initializeApp(firebaseConfig) : getApp();
Paso 3: Configura la captura automática de errores para tu framework
Tanto los receptores automáticos de errores del framework como los seguimientos manuales usan tu instancia compartida de FirebaseApp. Selecciona tu framework para configurar la captura automática de errores:
Angular
Integra el entorno de ejecución de captura de errores global de Angular y el seguimiento automático de rutas
agregando provideCrashlytics(() => app) a los proveedores de tu app
en src/app/app.config.ts:
// src/app/app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideRouter } from '@angular/router';
import { provideCrashlytics } from '@firebase/crashlytics/angular';
import { app } from '../lib/firebase'; // Shared initialization script
import { routes } from './app.routes';
export const appConfig: ApplicationConfig = {
providers: [
provideRouter(routes),
provideCrashlytics(() => app)
]
};
Next.js
Next.js 15.3 o versiones posteriores (recomendado): Instrumentación del cliente
(instrumentation-client.ts)
Next.js 15.3 y versiones posteriores incluyen instrumentación nativa del cliente a través de
instrumentation-client.ts (o instrumentation-client.js). Next.js
ejecuta este archivo en el navegador antes de que comience la hidratación de React.
Crea src/instrumentation-client.ts (o instrumentation-client.ts en
la raíz del proyecto si no usas un directorio src/) y, luego, inicializa
Crashlytics:
// src/instrumentation-client.ts
import { getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase'; // Shared initialization script
getCrashlytics(app);
Este único archivo inicializa Crashlytics antes de la hidratación de React y
registra automáticamente los objetos de escucha de errores globales (error y
unhandledrejection) sin modificaciones en src/app/layout.tsx ni en ningún
componente de React.
Next.js < 15.3: Del cliente (diseño de App Router)
Para las versiones de Next.js anteriores a la 15.3, layout.tsx es un componente de servidor
de forma predeterminada. Debido a que FirebaseApp no se puede serializar, une
<FirebaseCrashlytics> (desde @firebase/crashlytics/react para inicializar
Crashlytics y capturar errores no detectados) en un componente de cliente (como
src/components/CrashlyticsProvider.tsx) marcado con la directiva
'use client':
// src/components/CrashlyticsProvider.tsx
'use client';
import React from 'react';
import { FirebaseCrashlytics } from '@firebase/crashlytics/react';
import { app } from '../lib/firebase'; // Shared initialization script
export function CrashlyticsProvider({
children,
}: {
children: React.ReactNode;
}) {
return (
<>
<FirebaseCrashlytics firebaseApp={app} />
{children}
</>
);
}
Luego, une tu diseño raíz con <CrashlyticsProvider>:
// src/app/layout.tsx
import React from 'react';
import { CrashlyticsProvider } from '../components/CrashlyticsProvider';
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body>
<CrashlyticsProvider>
{children}
</CrashlyticsProvider>
</body>
</html>
);
}
React (sin React Router)
Une el componente raíz de tu app (por lo general, src/App.tsx o src/main.tsx)
con el componente de límite de error <FirebaseCrashlytics>. Esto actúa como el
receptor global, que controla los rechazos y las excepciones no controlados del
navegador y la IU de React. Une todas las jerarquías de componentes secundarios y captura automáticamente las excepciones no detectadas o los errores de enrutamiento:
// src/App.tsx
import React from 'react';
import { FirebaseCrashlytics } from '@firebase/crashlytics/react';
import { app } from './lib/firebase'; // Shared initialization script
export default function App({
children,
}: {
children?: React.ReactNode;
}) {
return (
<FirebaseCrashlytics firebaseApp={app}>
{children}
</FirebaseCrashlytics>
);
}
React Router (v6+)
Si usas React Router v6 o una versión posterior, reemplaza el contenedor <Routes> de React Router por <CrashlyticsRoutes>. Esto asigna automáticamente los límites de error
en las rutas y hace un seguimiento de los errores con nombres de rutas con plantilla, como
/profile/:userId:
// src/App.tsx
import React from 'react';
import { BrowserRouter, Route } from 'react-router-dom';
import { CrashlyticsRoutes } from '@firebase/crashlytics/react-router';
import { app } from './lib/firebase'; // Shared initialization script
import Home from './pages/Home';
import Profile from './pages/Profile';
import Product from './pages/Product';
export default function App() {
return (
<BrowserRouter>
<CrashlyticsRoutes firebaseApp={app}>
<Route path="/" element={<Home />} />
<Route path="/profile/:userId" element={<Profile />} />
<Route path="/product/:productId/details" element={<Product />} />
</CrashlyticsRoutes>
</BrowserRouter>
);
}
TanStack Router
Si tu app usa TanStack Router, inicializa Crashlytics con
getCrashlytics(app) y adjunta el registro de errores predeterminado directamente dentro
de la configuración de la instancia del router (defaultOnCatch):
import { recordError, getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase'; // Shared initialization script
import { createRouter } from '@tanstack/react-router';
import { routeTree } from './routeTree.gen';
const crashlytics = getCrashlytics(app);
const router = createRouter({
routeTree,
defaultOnCatch: (error, errorInfo) => {
recordError(crashlytics, error, errorInfo);
},
});
(Opcional) Paso 4: Configura el control de versiones de la app
Se recomienda agregar una cadena de versión clara a las compilaciones de tu app web para que puedas aislar las regresiones en implementaciones específicas. Pasa appVersion en
CrashlyticsOptions cuando inicialices el SDK de Crashlytics para tu
framework (con una cadena de versión o una variable de entorno de tiempo de compilación, como
process.env.NEXT_PUBLIC_APP_VERSION o import.meta.env.VITE_APP_VERSION):
Angular
Pasa un objeto CrashlyticsOptions con appVersion como segundo argumento a provideCrashlytics en src/app/app.config.ts:
// src/app/app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideRouter } from '@angular/router';
import { provideCrashlytics } from '@firebase/crashlytics/angular';
import { app } from '../lib/firebase'; // Shared initialization script
import { routes } from './app.routes';
export const appConfig: ApplicationConfig = {
providers: [
provideRouter(routes),
provideCrashlytics(() => app, {
appVersion: 'APP_VERSION'
})
]
};
Next.js
Next.js 15.3 o versiones posteriores (recomendado): Instrumentación del cliente
(instrumentation-client.ts)
Pasa un objeto CrashlyticsOptions con appVersion como segundo argumento a getCrashlytics en src/instrumentation-client.ts:
// src/instrumentation-client.ts
import { getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase'; // Shared initialization script
getCrashlytics(app, {
appVersion: 'APP_VERSION'
});
Next.js < 15.3: Del cliente (diseño de App Router)
Pasa crashlyticsOptions con appVersion a <FirebaseCrashlytics> en src/components/CrashlyticsProvider.tsx:
// src/components/CrashlyticsProvider.tsx
'use client';
import React from 'react';
import { FirebaseCrashlytics } from '@firebase/crashlytics/react';
import { app } from '../lib/firebase'; // Shared initialization script
const crashlyticsOptions = {
appVersion: 'APP_VERSION'
};
export function CrashlyticsProvider({
children,
}: {
children: React.ReactNode;
}) {
return (
<>
<FirebaseCrashlytics
firebaseApp={app}
crashlyticsOptions={crashlyticsOptions}
/>
{children}
</>
);
}
React (sin React Router)
Pasa crashlyticsOptions con appVersion a <FirebaseCrashlytics> en src/App.tsx:
// src/App.tsx
import React from 'react';
import { FirebaseCrashlytics } from '@firebase/crashlytics/react';
import { app } from './lib/firebase'; // Shared initialization script
const crashlyticsOptions = {
appVersion: 'APP_VERSION'
};
export default function App({
children,
}: {
children?: React.ReactNode;
}) {
return (
<FirebaseCrashlytics
firebaseApp={app}
crashlyticsOptions={crashlyticsOptions}
>
{children}
</FirebaseCrashlytics>
);
}
React Router (v6+)
Pasa crashlyticsOptions con appVersion a <CrashlyticsRoutes> en src/App.tsx:
// src/App.tsx
import React from 'react';
import { BrowserRouter, Route } from 'react-router-dom';
import { CrashlyticsRoutes } from '@firebase/crashlytics/react-router';
import { app } from './lib/firebase'; // Shared initialization script
import Home from './pages/Home';
import Profile from './pages/Profile';
import Product from './pages/Product';
const crashlyticsOptions = {
appVersion: 'APP_VERSION'
};
export default function App() {
return (
<BrowserRouter>
<CrashlyticsRoutes
firebaseApp={app}
crashlyticsOptions={crashlyticsOptions}
>
<Route path="/" element={<Home />} />
<Route path="/profile/:userId" element={<Profile />} />
<Route path="/product/:productId/details" element={<Product />} />
</CrashlyticsRoutes>
</BrowserRouter>
);
}
TanStack Router
Pasa un objeto CrashlyticsOptions con appVersion como segundo argumento a getCrashlytics:
import { recordError, getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase'; // Shared initialization script
import { createRouter } from '@tanstack/react-router';
import { routeTree } from './routeTree.gen';
const crashlytics = getCrashlytics(app, {
appVersion: 'APP_VERSION'
});
const router = createRouter({
routeTree,
defaultOnCatch: (error, errorInfo) => {
recordError(crashlytics, error, errorInfo);
},
});
Paso 5: Fuerza una falla de prueba
Para finalizar la configuración de Crashlytics y ver los datos iniciales en el panel de Crashlytics de Firebase console, debes forzar una falla de prueba.
Agrega código a tu app para forzar una falla de prueba.
Agrega un botón de prueba o un activador de ruta a tu app de React, Next.js o Angular que arroje un error de tiempo de ejecución cuando se haga clic en él:
// Trigger an unhandled exception on button click or route load function handleTestCrash() { throw new Error("Crashlytics Web SDK Test Unhandled Error!"); }Si configuraste la captura automática de errores con
<FirebaseCrashlytics>(React o Next.js),provideCrashlytics(Angular) o<CrashlyticsRoutes>(React Router), arrojar este error captura automáticamente la excepción y la programa para subirla.Compila y ejecuta tu app y, luego, activa el error de prueba para que la app envíe su primer informe de fallas a Firebase.
En la consola de Firebase, ve al panel DevOps & Engagement > Crashlytics para verificar el informe de fallas de prueba:
Selecciona tu app web en el selector desplegable que se encuentra en la parte superior de la página.
Actualiza la página. La excepción de prueba debería aparecer en la tabla Problemas en unos minutos.
Si actualizaste la consola y sigues sin poder ver la falla de prueba después de cinco a diez minutos, consulta Soluciona problemas de configuración.
Ahora Crashlytics supervisa tu app web para detectar errores. Visita el panel de Crashlytics para ver y analizar todos los informes y estadísticas.
Próximos pasos
- Obtén informes de fallas legibles:
Configura la carga automática de mapas de origen (
.js.map) para que los seguimientos de pila de producción muestren los nombres de archivo y los números de línea originales. - Personaliza los informes de fallas: Obtén información para informar excepciones controladas, agregar claves personalizadas, forzar el vaciado de los registros de telemetría y configurar el muestreo.