我有一个Web应用程序,希望能够跟踪其崩溃报告。我可以使用Firebase Crashlytics或Fabric来实现这个目的吗?在它们的网站上提到了它们只适用于Android或iOS。
问候, Makrand
我有一个Web应用程序,希望能够跟踪其崩溃报告。我可以使用Firebase Crashlytics或Fabric来实现这个目的吗?在它们的网站上提到了它们只适用于Android或iOS。
问候, Makrand
有一个功能请求: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
虽然暂时没有适用于Web的Firebase Crashlytics,但Google提供带有错误报告功能的Stackdriver - 它可以跟踪所有错误,并标记为已解决(还可以发送有关新错误的电子邮件通知):
您可以使用下面的链接访问它(在点击链接之前,请确保将您的Firebase {project_id}
放入链接中):
https://console.cloud.google.com/errors?project={project_id}
以下有两种使用方法:
你的Firebase函数中每个console.error(new Error(...))
报告都会自动跟踪到Stackdriver错误日志平台。
因此,您只需要从Web应用程序向Firebase函数发送错误报告,并在该函数内使用console.error
进行记录即可。
注意,只有Error对象实例将被发送到Stackdriver平台。例如,console.error("{field1: 'text'}")
不会被发送到Stackdriver。有关更多信息,请参见此文档
这里是一个快速代码片段,展示如何使用它(在我们的案例中,我们首先将来自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库的更多信息,请参见此文档。关于堆栈跟踪及其格式的更多信息可以在此处的文档中找到。
设置注意事项:
您需要启用两个功能:
要授予权限,请按照以下步骤操作:
首先使用您的Firebase仪表板链接找到“Firebase服务帐户”(您可以在下面找到它),并记住它的值-它看起来像firebase-adminsdk-{random_symbols}@{project_id}.iam.gserviceaccount.com
然后在“访问”->“IAM”下打开gcloud控制台。或使用以下链接:
https://console.cloud.google.com/access/iam?project={project_id}<- 在此处输入您的Firebase项目ID
从步骤1中找到您的Firebase服务帐户。
为该帐户按编辑,添加“错误编写器”权限:
如何找到serviceAccount.json:
关于serviceAccount
——这是一种通用凭据,可用于认证包括Stackdriver在内的许多Google服务。您可以使用下面的链接从Firebase仪表板获取您的凭据(仅需在使用链接之前将您的Firebaseproject_id
放入链接中):
打开链接,并点击“生成新的凭证”。这将生成一个新的服务帐户并下载您需要妥善保管的serviceAccount.json
文件(除非您生成一个新的文件,否则您将无法再次获取它)。
显然,Sentry现在支持多个Web框架开箱即用。我最近为Django应用程序集成了Sentry崩溃日志记录。
请参见此处: https://sentry.io/platforms/