测试您的 Crashlytics 实现(Web)

选择平台: iOS+ Android Web Flutter Unity


如果您已按照入门指南操作,但仍未在 Crashlytics 信息中心内看到崩溃,请使用本指南。

强制造成崩溃以便测试您的实现

  1. 向应用添加可用于强制造成测试崩溃的代码。

    向 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) 配置了自动错误捕获,则抛出此错误会自动捕获异常并安排上传。

  2. 构建并运行您的应用,然后触发测试错误,以便您的应用向 Firebase 发送其第一个崩溃报告。

  3. 在 Firebase 控制台中,前往 DevOps 和互动 > Crashlytics 信息中心,查看您的测试崩溃报告:

    1. 从页面顶部的下拉选择器中选择您的 Web 应用。

    2. 刷新页面。您的测试异常应该会在几分钟内显示在问题表中。

如果您已刷新控制台,但在 5 到 10 分钟后仍未看到测试崩溃报告,请参阅下一部分,了解如何排查设置问题。

排查设置问题

如果您触发了测试崩溃,但在 5 到 10 分钟后仍未在 Crashlytics 信息中心内看到报告,请尝试重新运行设置流程,或在控制台中验证以下项目配置:

  • 重新运行 Crashlytics 设置流程:您可以安全地重新运行 Firebase CLI 设置命令 (firebase crashlytics:setup),或按照入门指南第 1 步中的说明在 Firebase 控制台中完成设置。重新运行设置会自动启用所有缺失的 API,并修复 firebase-telemetry Cloud Logging 存储桶和路由接收器。

  • 检查结算和 IAM 权限:确保您的 Firebase 项目采用随用随付 Blaze 定价方案,并且您的账号在运行设置步骤时拥有该项目的所有者权限。

  • 验证 firebasetelemetry.googleapis.com API 密钥限制:在 Google Cloud 控制台凭证页面中,选择在 firebaseConfig 对象中配置的 API 密钥(例如 Browser key (auto created by Firebase))。如果该密钥启用了 API 限制,请验证 Firebase Telemetry API (firebasetelemetry.googleapis.com) 是否包含在允许的 API 列表中。如果受限 API 密钥中缺少此目标,网络上传请求将失败,并在浏览器控制台中显示 HTTP 403(禁止)错误。

  • 检查已启用的 Google Cloud API:在 Google Cloud 控制台的已启用的 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),以便生产堆栈轨迹显示原始文件名和行号。

  • 自定义崩溃报告 - 了解如何报告已处理的异常、添加自定义键、强制刷新遥测记录以及配置采样。