自定义 Firebase Crashlytics 崩溃报告


Crashlytics 信息中心内,您可以点击进入某个问题并获取详细的事件报告。您可以自定义这些报告,以便更好地了解应用中发生的情况以及向 Crashlytics 报告事件的环境。

  • 如果您的应用使用 Firebase SDK for Google Analytics,会自动获取面包屑导航日志。借助这些日志,您可以了解导致应用中发生 Crashlytics 收集的事件的用户操作。

  • 关闭自动崩溃报告并为您的用户启用自选式报告。请注意,默认情况下,Crashlytics 会自动为应用的所有用户收集崩溃报告。

报告异常

报告捕获到的异常

如果某些异常预期会发生,您可以让 Crashlytics SDK 将其报告为非严重事件。这些事件会记录在设备上,然后与下一份严重事件报告一起发送或者在最终用户重启游戏时发送。

您可以使用 C# 通过以下方法记录异常:

Crashlytics.LogException(Exception ex);

您可以在游戏的 try/catch 块中记录预期异常:

try {
    myMethodThatThrows();
} catch (Exception e) {
   Crashlytics.LogException(e);
   // handle your exception here!
}

报告未捕获的异常

对于不会让您的游戏崩溃的未捕获的异常(例如,游戏逻辑中未捕获的 C# 异常),您可以让 Crashlytics SDK 将其报告为严重事件,具体方法是,在 Unity 项目中初始化 Crashlytics 的地方Crashlytics.ReportUncaughtExceptionsAsFatal 属性设置为 true。这些事件会实时报告给 Crashlytics,而无需最终用户重启游戏。

将这些未捕获的异常报告为严重事件意味着它们会计入您的未遇到崩溃问题的用户统计信息,并计入疾速崩溃提醒。

请注意,原生代码崩溃始终会报告为严重事件。这些事件会记录在设备上,然后在最终用户重启游戏时一并发送。

void Start() {
    // Since there is no try-block surrounding this call, if an exception is thrown,
    // it is considered unexpected.
    // Setting `Crashlytics.ReportUncaughtExceptionsAsFatal = true`
    // will ensure that such cases are reported as fatals.
    thirdPartyMethodThatMayThrow();
}

添加 GWP-ASan 报告以调试内存损坏问题

对于使用 IL2CPP 的 Android 应用,Crashlytics 可以通过收集 GWP-ASan 报告来帮助您调试由原生内存错误引起的崩溃。这些内存相关错误可能与应用内的内存损坏有关,这也是导致应用安全漏洞的主要原因。

  • Crashlytics 信息中心点击某个问题的详细信息后,系统便会打开一个新的“内存堆栈轨迹”标签页,您可在其中查看此数据。

  • 您还可以使用新的“GWP-ASan 报告”信号和过滤器,快速查看与此数据有关的所有问题。

如果您的应用使用最新的 Crashlytics SDK for Unity (v10.7.0+) 并且明确启用了 GWP-ASan(要求您修改 Android 应用清单),则您可以获取 GWP-ASan 内存报告。如果您的应用中包含任何 C++ 代码,您可以使用 Android 文档中的示例原生代码测试 GWP-ASan 设置。

添加自定义键

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

  • Crashlytics 信息中心内,您可以搜索与自定义键匹配的问题。
  • 当您在控制台中查看某个特定问题时,可以查看每个事件关联的自定义键(在“键”子标签中),甚至可以按自定义键过滤事件(使用页面顶部的“过滤条件”菜单)。

如果调用了多次,将使用现有键的新值更新该值,并且在记录崩溃时系统仅会捕获最新值。

Crashlytics.SetCustomKey(string key, string value);

添加自定义日志消息

记录的消息与您的崩溃数据相关联,并在您查看特定崩溃时显示在 Firebase Crashlytics 信息中心中。

Crashlytics.Log(string message);

设置用户标识符

您可以使用 ID 编号、令牌或哈希值来唯一标识应用的最终用户,而无需披露或传输他们的任何个人信息。您也可以通过将相应值设置为空字符串来清除该值。当您查看特定崩溃时,该值将显示在 Firebase Crashlytics 信息中心中。

Crashlytics.SetUserId(string identifier);

获取面包屑导航日志

面包屑导航日志可让您更好地了解用户与您的应用进行,导致崩溃、非严重或 ANR 事件的互动。在尝试重现和调试问题时,这些日志会很有用。

面包屑导航日志由 Google Analytics 提供支持,因此为了获取面包屑导航日志,您需要为 Firebase 项目启用 Google Analytics ,并添加 Firebase SDK for Google Analytics 到您的应用中。满足这些要求后,当您查看问题的详细信息时,面包屑导航日志便会随事件数据一起自动包含在日志标签页中。

Analytics SDK 会自动记录 screen_view 事件,从而使面包屑导航日志能够显示发生崩溃事件、非严重事件或 ANR 事件之前浏览过的屏幕的列表。screen_view 面包屑导航日志包含 firebase_screen_class 参数。

面包屑导航日志还会填充您在用户会话中手动记录的任何自定义事件,包括事件的参数数据。此数据有助于显示导致崩溃事件、非严重事件或 ANR 事件的一系列用户操作。

请注意,您可以控制 Google Analytics 数据的收集和使用,其中包括填充面包屑导航日志的数据。

启用自选式报告

默认情况下,Crashlytics 会自动为应用的所有用户收集崩溃报告。您可以让用户选择启用崩溃报告功能,从而让其对自己发送的数据有更多掌控权。

如需仅针对选定用户停用自动收集功能并初始化 Crashlytics,请在运行时调用 Crashlytics 数据收集替换。在应用的多次启动之间,替换值会保持不变,因此 Crashlytics 可以自动收集相关报告。如需停用自动崩溃报告功能,请将 false 作为替换值传递。将此设置为 false 时,新值要等到应用下次运行时才会生效。

Crashlytics.IsCrashlyticsCollectionEnabled = true

管理 Crash Insights 数据

Crash Insights 会比较您的匿名堆栈轨迹和来自其他 Firebase 应用的轨迹,并让您知道您的问题是否属于个例,从而帮助您解决问题。对于许多问题,Crash Insights 甚至会提供资源来帮助您调试崩溃。

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