我们可以在我们的Web应用程序中使用firebase crashlytics吗?

时间:2019-01-23 08:01:06

标签: firebase-crash-reporting

我有一个Web应用程序,我想跟踪其崩溃报告。 我可以为此使用Firebase crashlytics或Fabric。在他们的网站中,它只提到了Android或ios。

关于, 马克兰德

3 个答案:

答案 0 :(得分:1)

显然,Sentry现在支持多种Web框架。 我最近为Django App集成了Sentry crashlytics。

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

答案 1 :(得分:1)

虽然仍然没有用于网络的 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 错误日志记录平台中自动跟踪。 因此,您只需要将错误报告从您的网络应用程序发送到您的 firebase 函数,并在该函数内使用 console.error 进行记录。

请注意,只有 Error 对象的实例会被发送到 Stackdriver 平台。例如,console.error("{field1: 'text'}") 不会发送到 Stackdriver。有关该 in this doc

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

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

在 firebase nodejs 中:

    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);

从 nodejs 向 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 库的更多信息,请参见 in this doc。可以找到有关堆栈跟踪及其格式的更多信息in the docs here

关于设置的一些注意事项:

您需要启用两件事:

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

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

  1. 确保还向 firebase 服务帐户授予“错误编写者”权限n,以便 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 在内的许多谷歌服务。您可以使用以下网址从您的 firebase 仪表板获取您的(只需在使用前将您的 firebase project_id 放在链接中):

https://console.firebase.google.com/u/0/project/{project_id}/settings/serviceaccounts/adminsdk

打开它并单击“生成新凭据”。这将生成一个新的服务帐户并下载您需要确保安全的 serviceAccount.json(除非您生成一个新帐户,否则您将无法再次获取它)。

答案 2 :(得分:0)

有功能请求: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', 'window.onerror', message, navigator.userAgent);
}

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

但是我也为打字稿https://github.com/enkot/catch-decorator

找到了类似的东西