| 플랫폼 선택: | iOS+ Android 웹 Flutter Unity |
시작 가이드를 따랐지만 Crashlytics 대시보드에 비정상 종료가 표시되지 않는 경우 이 가이드를 사용하세요.
비정상 종료로 구현 테스트하기
테스트 비정상 종료를 강제로 적용하는 데 사용할 수 있는 코드를 앱에 추가합니다.
클릭 시 런타임 오류를 발생시키는 테스트 버튼 또는 경로 트리거를 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 Console에서 DevOps 및 참여 > Crashlytics 대시보드로 이동하여 테스트 비정상 종료 보고서를 확인합니다.
페이지 상단의 드롭다운 선택기에서 웹 앱을 선택합니다.
페이지를 새로고침합니다. 몇 분 이내에 문제 표에 테스트 예외가 표시됩니다.
Console을 새로고침하고 5~10분 후에도 테스트 비정상 종료가 표시되지 않으면 설정 문제 해결에 대한 다음 섹션을 참조하세요.
설정 문제 해결
테스트 비정상 종료를 트리거했는데도 5~10분 후에 Crashlytics 대시보드에 보고서가 표시되지 않으면 설정 흐름을 다시 실행하거나 콘솔에서 다음 프로젝트 구성을 확인해 보세요.
Crashlytics 설정 흐름 다시 실행: Firebase CLI 설정 명령어(
firebase crashlytics:setup)를 안전하게 다시 실행하거나 시작 가이드의 1단계에 설명된 대로 Firebase 콘솔에서 설정을 완료할 수 있습니다. 설정을 다시 실행하면 누락된 API가 자동으로 사용 설정되고firebase-telemetryCloud Logging 버킷 및 라우팅 싱크가 복구됩니다.결제 및 IAM 권한 확인: Firebase 프로젝트가 사용한 만큼만 지불하는 Blaze 요금제를 사용하고 있으며 설정 단계를 실행할 때 계정에 프로젝트에 대한 소유자 권한이 있는지 확인합니다.
firebasetelemetry.googleapis.comAPI 키 제한사항 확인: Google Cloud Console 사용자 인증 정보 페이지에서firebaseConfig객체에 구성된 API 키(예:Browser key (auto created by Firebase))를 선택합니다. 키에 API 제한사항이 사용 설정된 경우 Firebase Telemetry API(firebasetelemetry.googleapis.com)가 허용되는 API 목록에 포함되어 있는지 확인합니다. 제한된 API 키에 이 타겟이 누락된 경우 네트워크 업로드 요청이 브라우저 콘솔에서 HTTP 403(Forbidden) 오류와 함께 실패합니다.사용 설정된 Google Cloud API 확인: Google Cloud Console 사용 설정된 API 및 서비스 페이지에서 Firebase Telemetry API(
firebasetelemetry.googleapis.com), Firebase Telemetry Admin API(firebasetelemetryadmin.googleapis.com), Cloud Logging API(logging.googleapis.com), Cloud Storage(storage.googleapis.com)가 프로젝트에 사용 설정되어 있는지 확인합니다.로깅 버킷에서 로그 애널리틱스 확인: Google Cloud 콘솔 로그 스토리지 페이지에서
firebase-telemetry버킷(global위치)이 존재하고 로그 애널리틱스가 사용 설정되어 있는지 확인하고 로그 라우터 페이지에서firebase-telemetry-routing싱크가 존재하는지 확인합니다.
테스트 예외를 수동으로 캡처하고 플러시
메모리 일괄 처리 또는 페이지 언로드를 기다리지 않고 엔드 투 엔드 전송을 즉시 확인하려면 recordError를 flush와 함께 사용하세요.
import { recordError, flush, getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase'; // Shared initialization script
const crashlytics = getCrashlytics(app);
async function triggerImmediateTestCrash() {
const error = new Error("Crashlytics Web SDK Test Handled Error!");
// Capture the error with immediate priority and custom diagnostic metadata
recordError(crashlytics, error, {
priority: 'IMMEDIATE',
testEvent: true,
environment: 'staging_verification'
});
// Force an immediate upload before the browser terminates or reloads
await flush(crashlytics);
console.log("Test error flushed to Crashlytics successfully.");
}
다음 단계
읽기 쉬운 비정상 종료 보고서 가져오기 — 프로덕션 스택 트레이스에 원본 파일 이름과 줄 번호가 표시되도록 자동 소스 맵(
.js.map) 업로드를 설정합니다.비정상 종료 보고서 맞춤설정 - 처리된 예외를 보고하고, 커스텀 키를 추가하고, 원격 분석 레코드를 강제로 플러시하고, 샘플링을 구성하는 방법을 알아봅니다.