我们能在我们的Web应用程序中使用Firebase Crashlytics吗?

33

我有一个Web应用程序,希望能够跟踪其崩溃报告。我可以使用Firebase Crashlytics或Fabric来实现这个目的吗?在它们的网站上提到了它们只适用于Android或iOS。

问候, Makrand


1
Firebase Crashlytics文档仅提到了Android和iOS应用程序,对于Web应用程序没有明确说明。 - Shantam Mittal
快速问题,什么是 Web 应用程序的“崩溃”? - Jake Lee
@JakeSteam,无论是移动应用还是桌面应用,它们都只是可能会抛出错误或异常的应用程序。包括Web、Android、IOS和桌面应用。但你也许应该提一个新问题。 - Renetik
1
由于Crashlytics仅适用于Android或iOS,因此我们在项目中使用[Airbrake](https://airbrake.io/)来处理崩溃报告。 - Sujay
3个回答

20

有一个功能请求:https://github.com/firebase/firebase-js-sdk/issues/710

看起来根本不支持,fabric 在 web 上也没有支持 crashlytics,所以可能有一些替代方案,比如 https://www.bugsnag.com,但我想把它放在一个地方。完全看不出 web、android 或 iOS 客户端之间的区别,也不知道为什么不支持。

但对于 Vue 框架的一些可能解决方案是捕获错误并将其发送到 Google Analytics,在那里您还可以连接您的 firebase 移动应用程序。我想现在试一试这种方法。我还没有测试过,所以不知道是否也需要捕获窗口错误。

Vue.config.errorHandler = function (error) {
  //Toast.error(error.message)
  console.warn(error.message)
  //send error as event to google analytcs... 
  if (error) message = error.stack;
  ga('send', 'event', 'Vue.config.errorHandler', message, navigator.userAgent);
}

window.onerror = function(message, source, lineno, colno, error) {
  // maybe we need to also catch errors here and send to GA
}

但我也为 TypeScript 找到了类似的东西 https://github.com/enkot/catch-decorator


10

虽然暂时没有适用于Web的Firebase Crashlytics,但Google提供带有错误报告功能的Stackdriver - 它可以跟踪所有错误,并标记为已解决(还可以发送有关新错误的电子邮件通知):

enter image description here

您可以使用下面的链接访问它(在点击链接之前,请确保将您的Firebase {project_id} 放入链接中):

https://console.cloud.google.com/errors?project={project_id}

以下有两种使用方法:

  1. 简单方式,灵活性有限

你的Firebase函数中每个console.error(new Error(...)) 报告都会自动跟踪到Stackdriver错误日志平台。 因此,您只需要从Web应用程序向Firebase函数发送错误报告,并在该函数内使用console.error进行记录即可。

注意,只有Error对象实例将被发送到Stackdriver平台。例如,console.error("{field1: 'text'}") 不会被发送到Stackdriver。有关更多信息,请参见此文档

  1. 更全面的方式提供额外的控制(您还可以报告userId、自定义平台名称、版本、用户代理等):

这里是一个快速代码片段,展示如何使用它(在我们的案例中,我们首先将来自Web应用程序的错误日志发送到服务器,然后将错误报告给Stackdriver):

在Firebase Node.js中:

    const {ErrorReporting} = require('@google-cloud/error-reporting');

    let serviceAccount = {...} //service account is your firebase credetials that holds your secret keys etc. See below for more details.
    let config = {
        projectId: serviceAccount.project_id,
        reportMode: "always",
        credentials: serviceAccount
    }
    let errors = new ErrorReporting(config);

从Node.js将错误报告给Stackdriver:

async function reportError(message){

//message is a string that contains the error name with an optional
//stacktrace as a string representing each stack frame separated using "\n". 
//For example:
//message = "Error: Oh-hoh\n at MyClass.myMethod (filename.js:12:23)\n etc.etc." 

    const errorEvent = this.errors.event()
        .setMessage(message)
        .setUser(userId)
        .setServiceContext("web-app", "1.0.0")

   await errors.report(errorEvent)
}

有关Stackdriver库的更多信息,请参见此文档。关于堆栈跟踪及其格式的更多信息可以在此处的文档中找到。

设置注意事项:

您需要启用两个功能:

  1. 使用以下链接为项目启用Stackdrive api(确保在单击下面的链接之前,在链接中设置firebase {project_id})

https://console.developers.google.com/apis/library/clouderrorreporting.googleapis.com?project={project_id}

  1. 确保还为Firebase服务帐户授予“错误编写器”的权限,以便Stackdriver可以接收错误日志(服务帐户是表示访问服务的Firebase项目的“用户”类型)

要授予权限,请按照以下步骤操作:

  1. 首先使用您的Firebase仪表板链接找到“Firebase服务帐户”(您可以在下面找到它),并记住它的值-它看起来像firebase-adminsdk-{random_symbols}@{project_id}.iam.gserviceaccount.com

  2. 然后在“访问”->“IAM”下打开gcloud控制台。或使用以下链接:

https://console.cloud.google.com/access/iam?project={project_id}<- 在此处输入您的Firebase项目ID

enter image description here

  1. 从步骤1中找到您的Firebase服务帐户。

  2. 为该帐户按编辑,添加“错误编写器”权限:

enter image description here

如何找到serviceAccount.json:

关于serviceAccount——这是一种通用凭据,可用于认证包括Stackdriver在内的许多Google服务。您可以使用下面的链接从Firebase仪表板获取您的凭据(仅需在使用链接之前将您的Firebaseproject_id放入链接中):

打开链接,并点击“生成新的凭证”。这将生成一个新的服务帐户并下载您需要妥善保管的serviceAccount.json文件(除非您生成一个新的文件,否则您将无法再次获取它)。


1
太棒了。这非常惊人,而且很方便,因为我已经在控制台中记录了我的错误,所以我只需点击链接就可以看到它们! - Martin Capodici

3

显然,Sentry现在支持多个Web框架开箱即用。我最近为Django应用程序集成了Sentry崩溃日志记录。

请参见此处: https://sentry.io/platforms/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接