如何在iOS上报告Firebase崩溃的非致命异常?

时间:2017-05-08 16:48:38

标签: ios firebase firebase-crash-reporting

如何使用Firebase崩溃报告在iOS上报告非致命异常?在Android中,我们可以这样做:

 FirebaseCrash.report(new Exception("My first Firebase non-fatal error on Android"));

4 个答案:

答案 0 :(得分:5)

仁的回答是正确的。不过,您可以考虑以下几种方法:

  1. 记录Firebase Analytics事件。虽然这不能为您提供从Firebase崩溃报告中获得的所有堆栈的好处,但您至少可以跟踪特定异常随时间发生的频率。

  2. 使用FIRCrashMessage()方法记录应用中发生的任何错误。您只会在崩溃报告中看到最终报告给Firebase崩溃报告的这些日志方法,但鉴于错误经常导致崩溃,这不是一个坏主意。

  3. 尝试Crashlytics。他们使用reportError()方法专门用于报告非致命错误。在你的应用程序中继续使用Firebase的其他功能时,使用Crashlytics进行崩溃报告是很好的 - 它们现在都是同一家公司。 :)

答案 1 :(得分:3)

根据the documentation,您目前只能在iOS上报告致命错误。

答案 2 :(得分:1)

您现在可以在Firebase中记录非致命异常

因此,已接受的答案不再正确。可以使用以下Firebase Crashlytics方法记录非致命异常:

Crashlytics.sharedInstance().recordError(error)

来自the documentation

  

这允许您记录由NSError对象描述的非致命事件。这些事件将被分组和显示,类似于崩溃。请记住,此方法可能会很昂贵。此外,在应用程序的生命周期内可以记录的NSError总数受固定大小的循环缓冲区限制。如果缓冲区溢出,则将删除最早的数据。错误在以后启动应用程序时传递给Crashlytics。


用法示例:

let userInfo: [String: String] = [
    "deviceId": "someDeviceId",
    "localizedDescription": yourExeption.localizedDescription,
    "anotherKey": "anotherValue"
]

let domain = "METHOD: some/domain/that/just/had-an-exception"
let code = 404

let error = NSError(domain: domain, code: code, userInfo: userInfo)

Crashlytics.sharedInstance().recordError(error)

其中domain是在Firebase中使用的漂亮标识符(例如方法+请求路径),code是异常的状态代码(此处为404),另外userInfo数据将转换为键值对,并显示在单个问题的“键/日志”部分中。

注意:记录的错误按NSError domaincode分组(与致命错误不同,致命错误在Firebase中按堆栈跟踪进行分组)。


Firebase Console > Crashlytics中的示例输出:

Example output showing non-fatal exceptions in Firebase Crashlytics console

控制台中的“问题详细信息”页面(显示userInfo个键值对):

Example details view of a non-fatal exception issue in the Firebase Crashlytics console (showing userInfo key-value pairs)

答案 3 :(得分:0)

现在使用最新版本的Firebase Crashlytics:

Crashlytics.crashlytics().record(error: error)