Firebase Crashlytics中的崩溃报告

本文概述

  • 自定义键
  • 添加自定义日志消息
  • 设置用户标识符
  • 记录非致命异常
  • 启用选择加入报告
  • 管理崩溃洞察数据
  • 自定义速度警报
在上一节中, 我们了解了Firebase Crashlytics, 以及如何使用我们的应用程序进行设置和配置。现在, 我们将测试Firebase Crashlytics实现。因此, 我们必须为崩溃进行设置以了解Crashlytics是否正常运行。
Firebase Crashlytics提供了四种日志记录机制, 可让你更深入地了解崩溃报告。这些机制是:
  1. 自定义键
  2. 自定义日志
  3. 用户标识符
  4. 捕获异常
Firebase Crashlytics中的崩溃报告

文章图片
自定义键 自定义键可帮助我们获取应用程序的特定状态, 从而导致崩溃。自定义键将任意键/值对与我们的崩溃报告相关联, 并在Firebase控制台中查看它们。有五种设置键的方法, 每种方法处理不同的数据类型。
Crashlytics.setString(key, "foo" /* string value */)Crashlytics.setBool(key, true /* boolean value */)Crashlytics.setDouble(key, 1.0 /* double value */)Crashlytics.setFloat(key, 1.0f /* float value */)Crashlytics.setInt(key, 1 /* int value */)

重新设置密钥会更新其值:
Crashlytics.setInt("current_level", 3)Crashlytics.setString("last_UI_action", "logged_in")

添加自定义日志消息 我们可以在我们的应用程序中添加自定义Crashlytics日志, 以便为导致崩溃的事件提供更多上下文。它将日志与崩溃数据相关联, 并使它们在Firebase控制台中可见。我们可以使用Crashlytics.log方法和Log.println()将日志写入崩溃报告:
Crashlytics.log(Log.DEBUG, "tag", "message")//For crash report onlyCrashlytics.log("message")

设置用户标识符 要诊断问题, 了解哪些用户经历了给定的崩溃通常会很有帮助。 Crashlytics提供了一种在崩溃报告中匿名标识用户的方法。要将用户ID添加到报告中, 我们必须为每个用户分配ID号, 令牌或哈希值形式的唯一标识符:
Crashlytics.setUserIdentifier("user123456789")

如果我们需要在设置用户标识符后清除它, 请将值重置为空白字符串。当我们清除用户标识符时, 它不会删除现有的Crashlytics记录。
记录非致命异常 记录非致命异常意味着我们可以在应用程序的catch块中记录捕获的异常:
try{methodThatThrows()}catch(e: Exception){Crashlytics.logException(e)//handle our exception here}

所有记录的异常在Firebase控制台中显示为非严重问题。问题摘要包含我们通常从崩溃中获取的所有状态信息, 以及按Android版本和硬件设备分类的故障。
Crashlytics在专用的后台线程中处理异常, 并且对应用程序的性能影响很小。
启用选择加入报告 默认情况下, Firebase Crashlytics自动为所有应用程序用户收集崩溃报告。我们可以通过启用对参与发送的数据的更多控制来使用“参与报告”。我们必须禁用自动收集, 并且仅对选择加入的用户初始化Crashlytics。我们可以在AndroidManifest.xml文件中使用元数据标签关闭自动收集:
< meta-data> android:name="firebase_crashlytics_collection_enabled" android: value="http://www.srcmini.com/false"/>

我们可以通过初始化应用程序活动之一Fabric.with(this, Crashlytics())的Crashlytics来为选定的用户启用收集功能。
管理崩溃洞察数据 通过Crash Insights, 我们可以将你的匿名堆栈跟踪与其他Firebase应用程序的匿名跟踪进行比较, 从而解决问题。
Crash Insight Data可通过以下两种方式提供帮助:
  1. 它使你能够知道问题是否属于更大的趋势。
  2. 它还可以提供有助于调试崩溃的资源。
Crash Insight使用汇总的崩溃数据来识别常见的稳定性趋势。我们可以从Firebase控制台中Crashlytics问题列表顶部的Crash Insight菜单中选择退出Crash Insight。
自定义速度警报 当任何个人问题在我们的应用中引起紧急问题时, 速度警报可以通知我们的团队。当应用程序中的问题超过Firebase控制台中定义的阈值时, 将触发速度警报。该阈值是根据受崩溃影响的用户会话百分比来定义的, 并且该值设置在会话的0.1%和1%之间。
如果在特定时间段内满足以下条件, 则会触发警报:
  1. 当应用程序中的问题超过该应用程序的定义阈值时。
  2. 该应用在该时间段内拥有250个会话。
  3. 如果以前没有在应用程序中针对该问题引发警报。
要更新速度警报, 我们必须具有必要的权限。在Firebase控制台中, 转到Crashlytics仪表板:
  • 从页面顶部的应用程序下拉列表中选择应用程序。
  • 从问题窗格的顶部栏中打开溢出菜单, 然后选择速度警报设置。
  • 要设置应用程序的警报阈值, 请按照屏幕上的说明进行操作。
我们可以使用电子邮件或集成将速度警报发送给我们的团队。让我们看一个示例, 在该示例中, 我们将创建一个带有按钮的应用程序, 该按钮将模拟崩溃。
activity_main.xml
Firebase Crashlytics中的崩溃报告

文章图片
MainActivity.kt
package com.example.crashlyticsexampleimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.util.Logimport android.view.ViewGroupimport android.widget.Buttonimport com.crashlytics.android.Crashlyticsimport io.fabric.sdk.android.Fabricclass MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setKeysBasic("JasonTest"); logReportAndPrint()logReportOnly()setUserId()logCaughtEx()enableDebugMode()forceACrash()}//Setting key-value pairsprivate fun setKeysBasic(key: String) {Crashlytics.setString(key, "foo" /* string value */)Crashlytics.setBool(key, true /* boolean value */)Crashlytics.setDouble(key, 1.0 /* double value */)Crashlytics.setFloat(key, 1.0f /* float value */)Crashlytics.setInt(key, 1 /* int value */)}// Modifying keys private fun resetKey() {Crashlytics.setInt("current_level", 3)Crashlytics.setString("last_UI_action", "logged_in")}//Adding custom log and log messagesprivate fun logReportAndPrint() {Crashlytics.log(Log.DEBUG, "tag", "message")}// Only for log Reportprivate fun logReportOnly() {Crashlytics.log("message")}// Enabling at run timeprivate fun enableAtRuntime() {Fabric.with(this, Crashlytics())}// Setting user identifierprivate fun setUserId() {Crashlytics.setUserIdentifier("user123456789")}@Throws(Exception::class)private fun methodThatThrows() {throw Exception()}// log exceptionprivate fun logCaughtEx() {try {methodThatThrows()} catch (e: Exception) {Crashlytics.logException(e)// handle your exception here}}// Enabling debug modeprivate fun enableDebugMode() {val fabric = Fabric.Builder(this).kits(Crashlytics()).debuggable(true) // Enables Crashlytics debugger.build()Fabric.with(fabric)}private fun forceACrash() {val crashButton = Button(this)crashButton.text = "Crash!"crashButton.setOnClickListener {Crashlytics.getInstance().crash() // Force a crash}addContentView(crashButton, ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))}}




【Firebase Crashlytics中的崩溃报告】

    推荐阅读