| Выберите платформу: | iOS+ Android Android NDK Web Flutter Unity |
В этом руководстве рассказывается, как начать работу с Firebase Crashlytics в веб-приложении.
После настройки SDK Firebase Crashlytics в приложении вы сможете получать подробные отчеты о сбоях в консоли Firebase. Crashlytics для веб-приложений позволяет получать отчеты об ошибках.
Подготовка
Чтобы настроить Crashlytics, нужно выполнить действия как в консоли Firebase, так и в интегрированной среде разработки (например, добавить конфигурацию Firebase для приложения и SDK Crashlytics). Чтобы завершить настройку, вам нужно принудительно вызвать тестовый сбой и отправить первый отчет о нем в Firebase.
Чтобы вручную настроить Crashlytics в веб-приложении, выполните следующие действия:
Создайте проект и приложение Firebase, если у вас их ещё нет. Если вы ещё этого не сделали, добавьте Firebase в проект JavaScript.
Убедитесь, что у вашего аккаунта есть разрешения владельца проекта. Это необходимо для включения нужных API и ролей IAM.
Убедитесь, что в проекте Firebase используется тарифный план Blaze с оплатой по мере использования. Crashlytics для веб-приложений использует Cloud Logging для хранения телеметрии и Cloud Storage для хранения файлов исходного кода. Это платные продукты с бесплатным уровнем. Подробнее о ценах на Logging и Cloud Storage…
Шаг 1. Включите Crashlytics для веб-приложения
Crashlytics для веб-приложений использует Cloud Logging, Error Reporting и Cloud Storage, поэтому вам нужно включить эти API и настроить разрешения для проекта. Вы можете включить Crashlytics для своего веб-приложения с помощью консоли Firebase или интерфейса командной строки Firebase.
Используйте консоль Firebase
В консоли Firebase перейдите в раздел DevOps & Engagement (DevOps и вовлечение) > Crashlytics dashboard (Панель управления).
Выберите веб-приложение в раскрывающемся списке вверху страницы.
Нажмите Настроить Crashlytics и следуйте инструкциям на экране.
Как использовать CLI Firebase
Если вы предпочитаете настраивать проект из терминала или использовать ИИ-агента для написания кода, вы можете использовать CLI Firebase:
Убедитесь, что у вас установлена версия 15.35.0 или более поздняя Firebase CLI и что вы прошли аутентификацию (
firebase login). Узнайте, как установить или обновить Firebase CLI.Чтобы настроить Crashlytics для веб-приложения, выполните следующую команду:
firebase crashlytics:setup \ --app FIREBASE_APP_ID \ --project PROJECT_IDЭта команда выполняет следующие действия:
Проверяет, используется ли в вашем проекте тарифный план Blaze с оплатой по мере использования, и при необходимости предлагает перейти на него.
Включает необходимые API Crashlytics и телеметрии (
firebasetelemetry.googleapis.com,firebasetelemetryadmin.googleapis.com,firebasecrashlytics.googleapis.comиclienttelemetry.googleapis.com).Если у ключа API вашего веб-приложения есть ограничения API, добавьте
clienttelemetry.googleapis.comв список разрешенных API.Задает настройки телеметрии Crashlytics для веб-приложения.
При интерактивном запуске предлагает включить оповещения по электронной почте о новых и повторных проблемах.
Шаг 2. Добавьте и инициализируйте SDK в приложении
Установите SDK Crashlytics:
npm install firebaseИнициализируйте экземпляр
FirebaseApp:Создайте центральный файл конфигурации, чтобы использовать инициализацию синглтона. Чтобы найти значения конфигурации приложения Firebase, в консоли Firebase перейдите в раздел
Project settings (Настройки проекта) > General (Общие), найдите карточку Your apps (Ваши приложения) и выберите веб-приложение.// 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();
Шаг 3. Настройте автоматическую регистрацию ошибок для своего фреймворка
Как автоматические получатели ошибок фреймворка, так и ручные трекеры используют общий экземпляр FirebaseApp. Выберите фреймворк, чтобы настроить автоматическую регистрацию ошибок:
Angular
Чтобы интегрировать SDK с глобальной средой выполнения Angular, которая перехватывает ошибки, и автоматическим отслеживанием маршрутов, добавьте provideCrashlytics(() => app) в поставщики приложения в файле 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 и более поздние версии (рекомендуется): инструментирование клиента (instrumentation-client.ts)
В Next.js 15.3 и более поздних версиях есть встроенные средства инструментирования на стороне клиента, которые используют файл instrumentation-client.ts (или instrumentation-client.js). Next.js выполняет этот файл в браузере до начала гидратации React.
Создайте файл src/instrumentation-client.ts (или instrumentation-client.ts в корневом каталоге проекта, если вы не используете каталог src/) и инициализируйте Crashlytics:
// src/instrumentation-client.ts
import { getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase'; // Shared initialization script
getCrashlytics(app);
Этот файл инициализирует Crashlytics до гидратации React и автоматически регистрирует глобальные прослушиватели ошибок (error и unhandledrejection) без изменений в src/app/layout.tsx или любом компоненте React.
Next.js < 15.3: клиентский (макет App Router)
В версиях Next.js до 15.3 layout.tsx по умолчанию является серверным компонентом. Поскольку FirebaseApp не сериализуется, оберните <FirebaseCrashlytics> (из @firebase/crashlytics/react, чтобы инициализировать Crashlytics и фиксировать неперехваченные ошибки) в клиентский компонент (например, src/components/CrashlyticsProvider.tsx), помеченный директивой '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}
</>
);
}
Затем оберните корневой макет в <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 (без React Router)
Оберните корневой компонент приложения (обычно src/App.tsx или src/main.tsx) компонентом <FirebaseCrashlytics>. Это глобальный приемник, который обрабатывает необработанные отклонения и исключения из браузера и пользовательского интерфейса React. Он охватывает все иерархии дочерних компонентов и автоматически фиксирует неперехваченные исключения или ошибки маршрутизации:
// 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 (версия 6 и выше)
Если вы используете React Router версии 6 или более поздней, замените контейнер <Routes> на <CrashlyticsRoutes>. Это позволяет автоматически сопоставлять границы ошибок на маршрутах и отслеживать ошибки, используя шаблонные названия путей, например /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
Если в вашем приложении используется TanStack Router, инициализируйте Crashlytics с помощью getCrashlytics(app) и прикрепите запись ошибок по умолчанию непосредственно в конфигурации экземпляра маршрутизатора (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);
},
});
(Необязательно) Шаг 4. Настройте управление версиями приложения
Настоятельно рекомендуем добавлять в сборки веб-приложений понятную строку версии, чтобы вы могли изолировать регрессии в определенных развертываниях. Передайте appVersion в CrashlyticsOptions при инициализации SDK Crashlytics для вашего фреймворка (используя строку выпуска или переменную среды времени сборки, например process.env.NEXT_PUBLIC_APP_VERSION или import.meta.env.VITE_APP_VERSION):
Angular
Передайте объект CrashlyticsOptions со значением appVersion в качестве второго аргумента в provideCrashlytics в 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 и более поздние версии (рекомендуется): инструментирование клиента (instrumentation-client.ts)
Передайте объект CrashlyticsOptions со свойством appVersion в качестве второго аргумента методу getCrashlytics в файле 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: клиентский (макет App Router)
Передайте crashlyticsOptions с appVersion в <FirebaseCrashlytics> в 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 (без React Router)
Передайте crashlyticsOptions с appVersion в <FirebaseCrashlytics> в 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 (версия 6 и выше)
Передайте crashlyticsOptions с appVersion в <CrashlyticsRoutes> в 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
Передайте объект CrashlyticsOptions с appVersion в качестве второго аргумента в 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);
},
});
Шаг 5. Принудительно вызовите тестовый сбой
Чтобы завершить настройку Crashlytics и увидеть первые данные на панели управления Crashlytics в консоли Firebase, необходимо принудительно вызвать тестовый сбой.
Добавьте в приложение код, который можно использовать для принудительного тестового сбоя.
Добавьте в приложение React, Next.js или Angular тестовую кнопку или триггер маршрута, который при нажатии вызывает ошибку выполнения:
// Trigger an unhandled exception on button click or route load function handleTestCrash() { throw new Error("Crashlytics Web SDK Test Unhandled Error!"); }Если вы настроили автоматическую регистрацию ошибок с помощью
<FirebaseCrashlytics>(React или Next.js),provideCrashlytics(Angular) или<CrashlyticsRoutes>(React Router), то при возникновении ошибки исключение будет автоматически зарегистрировано и запланировано к загрузке.Скомпилируйте и запустите приложение, а затем вызовите тестовую ошибку, чтобы приложение отправило в Firebase первый отчет о сбое.
В консоли Firebase перейдите в раздел DevOps & Engagement (DevOps и взаимодействие) > Crashlytics dashboard (Панель управления) и проверьте, появился ли отчет о тестовом сбое.
Выберите веб-приложение в раскрывающемся списке вверху страницы.
Обновите страницу. Тестовое исключение должно появиться в таблице Проблемы в течение нескольких минут.
Если вы обновили консоль и по-прежнему не видите тестовый сбой через 5–10 минут, ознакомьтесь с разделом Устранение неполадок.
Crashlytics теперь отслеживает ошибки в вашем веб-приложении. Чтобы посмотреть и изучить все отчеты и статистику, перейдите на панель управления Crashlytics.
Дальнейшие действия
- Получайте понятные отчеты о сбоях. Настройте автоматическую загрузку файлов сопоставления (
.js.map), чтобы в трассировках стека рабочей среды показывались исходные названия файлов и номера строк. - Настройка отчетов о сбоях. Узнайте, как создавать отчеты об обработанных исключениях, добавлять специальные ключи, принудительно очищать записи телеметрии и настраивать выборку.