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

How to report a non-fatal exception with Firebase crash on iOS?

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

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

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

Jen 的回答是正确的。不过,您可以考虑一些替代方案:

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

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

  3. 试试 Crashlytics。他们有一个专门为报告非致命错误而设计的 reportError() 方法。在您的应用程序中继续使用 Firebase 的其他功能的同时使用 Crashlytics 进行崩溃报告是很好的——如今它们都是同一家母公司。 :)

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

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

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

来自 the documentation:

This allows you to record a non-fatal event, described by an NSError object. These events will be grouped and displayed similarly to crashes. Keep in mind that this method can be expensive. Also, the total number of NSErrors that can be recorded during your app's life-cycle is limited by a fixed-size circular buffer. If the buffer is overrun, the oldest data is dropped. Errors are relayed to Crashlytics on a subsequent launch of your application.


用法示例:

let userInfo: [String: String] = [
    "deviceId": "someDeviceId",
    "localizedDescription": yourException.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.crashlytics().record(error: error)

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

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


Firebase 中的示例输出 Console > Crashlytics:

控制台中的问题详情页面(显示 userInfo 个键值对):