获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

自定义您的 Firebase Crashlytics 崩溃报告

本指南介绍如何使用 Firebase Crashlytics SDK 自定义崩溃报告。默认情况下,Crashlytics 会自动为您应用的所有用户收集崩溃报告(您可以关闭自动崩溃报告并为您的用户启用选择加入报告)。 Crashlytics 提供了四种开箱即用的日志记录机制:自定义键自定义日志用户标识符捕获的异常

添加自定义键

自定义键可帮助您了解导致崩溃的应用的特定状态。您可以将任意键/值对与崩溃报告相关联,然后使用自定义键在 Firebase 控制台中搜索和过滤崩溃报告。

  • Crashlytics 仪表板中,您可以搜索与自定义键匹配的问题。

  • 当您在控制台中查看特定问题时,您可以查看每个事件的关联自定义键(子选项卡),甚至可以通过自定义键过滤事件(页面顶部的过滤器菜单)。

使用setCustomKey实例方法设置键/值对。请注意,对于value参数, setCustomKey被重载以接受任何原始参数或String参数。这里有些例子:

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("my_string_key", "foo" /* string value */);

crashlytics.setCustomKey("my_bool_key", true /* boolean value */);

crashlytics.setCustomKey("my_double_key", 1.0 /* double value */);

crashlytics.setCustomKey("my_float_key", 1.0f /* float value */);

crashlytics.setCustomKey("my_int_key", 1 /* int value */);

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("my_string_key", "foo") // String value
    key("my_bool_key", true)    // boolean value
    key("my_double_key", 1.0)   // double value
    key("my_float_key", 1.0f)   // float value
    key("my_int_key", 1)        // int value
}

您还可以通过调用键并将其设置为不同的值来修改现有键的值。例如:

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("current_level", 3)
    key("last_UI_action", "logged_in")
}

通过将CustomKeysAndValues的实例传递给setCustomKeys实例方法来批量添加键/值对:

Java

CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
.putString("string key", "string value")
.putString("string key 2", "string  value 2")
.putBoolean("boolean key", True)
.putBoolean("boolean key 2", False)
.putFloat("float key", 1.01)
.putFloat("float key 2", 2.02)
.build();

FirebaseCrashlytics.getInstance().setCustomKeys(keysAndValues);

Kotlin+KTX

对于 Kotlin,现有功能比使用CustomKeysAndValues构建器更简单。

crashlytics.setCustomKeys {
  key("str_key", "hello")
  key("bool_key", true)
  key("int_key", 1)
  key("long_key", 1L)
  key("float_key", 1.0f)
  key("double_key", 1.0)
}

添加自定义日志消息

要为导致崩溃的事件提供更多背景信息,您可以将自定义 Crashlytics 日志添加到您的应用程序。 Crashlytics 将日志与您的崩溃数据相关联,并将它们显示在Firebase 控制台的 Crashlytics 页面中的日志选项卡下。

使用log帮助查明问题。例如:

Java

FirebaseCrashlytics.getInstance().log("message");

Kotlin+KTX

Firebase.crashlytics.log("message")

设置用户标识符

要诊断问题,了解哪些用户遇到了给定的崩溃通常很有帮助。 Crashlytics 包括一种在您的崩溃报告中匿名识别用户的方法。

要将用户 ID 添加到您的报告中,请以 ID 号、令牌或散列值的形式为每个用户分配一个唯一标识符:

Java

FirebaseCrashlytics.getInstance().setUserId("user123456789");

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

如果您在设置后需要清除用户标识符,请将值重置为空白字符串。清除用户标识符不会删除现有的 Crashlytics 记录。如果您需要删除与用户 ID 关联的记录,请联系 Firebase 支持

(仅限 Android NDK)将元数据添加到 NDK 崩溃报告

您可以选择在 C++ 代码中包含crashlytics.h标头,以将元数据添加到 NDK 崩溃报告,例如自定义键自定义日志用户标识符。所有这些选项都在上面的这个页面上进行了描述。

crashlytics.hFirebase Android SDK GitHub Repository中以仅标头 C++ 库的形式提供。

阅读头文件中的注释以获取有关使用 NDK C++ API 的说明。

报告非致命异常

除了自动报告您的应用程序崩溃之外,Crashlytics 还允许您记录非致命异常并在您的应用程序下次启动时将它们发送给您。

使用recordException方法在应用程序的catch块中记录非致命异常。例如:

Java

try {
    methodThatThrows();
} catch (Exception e) {
    FirebaseCrashlytics.getInstance().recordException(e);
    // handle your exception here
}

Kotlin+KTX

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e)
    // handle your exception here
}

所有记录的异常都在 Firebase 控制台中显示为非致命问题。问题摘要包含您通常从崩溃中获得的所有状态信息,以及按 Android 版本和硬件设备分类的故障。

Crashlytics 在专用后台线程上处理异常,以尽量减少对您的应用程序的性能影响。为了减少用户的网络流量,Crashlytics 将记录的异常批量处理在一起,并在应用下次启动时发送。

启用选择加入报告

默认情况下,Crashlytics 会自动为您应用的所有用户收集崩溃报告。为了让用户更好地控制他们发送的数据,您可以通过禁用自动报告并仅在您选择在代码中将数据发送到 Crashlytics 来启用选择报告:

  1. AndroidManifest.xml文件的application块中,添加meta-data标签以关闭自动收集:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. 通过在运行时调用 Crashlytics 数据收集覆盖来为选定用户启用收集。覆盖值在您的应用程序启动期间保持不变,因此 Crashlytics 可以自动收集报告。要选择退出自动崩溃报告,请将false作为覆盖值传递。当设置为false时,新值将在应用程序的下一次运行之前应用。

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

管理崩溃洞察数据

Crash Insights 通过将匿名堆栈跟踪与来自其他 Firebase 应用的跟踪进行比较,并让您知道您的问题是否属于更大趋势的一部分,从而帮助您解决问题。对于许多问题,Crash Insights 甚至提供资源来帮助您调试崩溃。

Crash Insights 使用汇总的崩溃数据来识别常见的稳定性趋势。如果您不想共享应用的数据,可以从Firebase 控制台中 Crashlytics 问题列表顶部的Crash Insights菜单中选择退出 Crash Insights。