Alf*_*gle 5 firebase crashlytics flutter
寻找一些关于如何使用flutter的firebase_crashlytics软件包记录捕获的异常的说明。
如果我理解正确(并且从运行一些示例代码开始),Crashlytics.instance.log('text');只会将日志添加到下一个崩溃报告中,而不是发送非致命性的问题本身。
我正在寻找Crashlytics.logException(e)与Android 等价的功能
try {
throwException();
} catch (e) {
Crashlytics.logExcpetion(e);
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以记录捕获的异常,使它们在Crashlytics仪表板中显示为非致命问题。
flutter的firebase_crashlytics包当前是否可以实现?
现在是否正在呼吁Crashlytics.instance.recordError('text', StackTrace.current)实现这一目标?
非常感谢!
简短的回答,是的。
Crashlytics.instance.recordError() 相当于 Crashlytics.logException()
如果您深入研究 Flutter firebase_crashlytics源代码,您实际上可以看到涉及哪些 Android API。
Flutter 的recordError()调用了 Android 库中的Crashlytics#onError方法。
并跟踪 Crashlytics#onError,你会看到它转到 Crashlytics.logException(exception);
附加说明,您还会注意到为什么Crashlytics.instance.log() “只会将日志添加到下一次崩溃报告中”。这些日志被添加到 a 中ListQueue<String> _logs,然后打包到下一次调用中recordError()
Flutter调用 Crashlytics.logException() 的片段:
_recordError(...) {
...
final String result = await channel
.invokeMethod<String>('Crashlytics#onError', <String, dynamic>{
'exception': "${exception.toString()}",
'context': '$context',
'information': _information,
'stackTraceElements': stackTraceElements,
'logs': _logs.toList(),
'keys': _prepareKeys(),
});
}
Run Code Online (Sandbox Code Playgroud)
以及Crashlytics.logException() 的一些参考说明:
为了减少用户的网络流量,Crashlytics 将记录的异常一起批处理并在应用程序下次启动时发送它们。
对于任何单个应用程序会话,仅存储最近记录的 8 个异常。
小智 5
要添加到已接受的答案中,Crashlytics.instance.recordError()新方法现已弃用FirebaseCrashlytics.instance.recordError(exception, stack)。
额外提示: 我遇到了这个问题,所有记录的异常都分组在 Crashlytics 仪表板中的同一问题下。这些可能是相同或不同代码组件的不同崩溃。因此,我必须手动检查每个崩溃实例进行验证。
根据我自己的测试,我发现分组是基于您传递到上面方法的堆栈跟踪中的最顶层行。幸运的是,Dart 有一种简单的方法可以使用StackTrace.current.
因此,要正确对问题进行分组:获取异常发生时的当前堆栈跟踪并将其传递到FirebaseCrashlytics.instance.recordError(exception, stack).
希望这对那里的人有帮助,我在互联网上到处寻找类似的问题,但找不到任何问题。
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |