此快速入门介绍了如何使用 Firebase Crashlytics SDK 在应用中设置 Firebase Crashlytics,以便您可以在 Firebase 控制台中获得全面的崩溃报告。
设置 Crashlytics 需要在 Firebase 控制台和 IDE 中分别执行一些操作(例如添加 Firebase 配置文件和 Crashlytics SDK)。为了完成设置,您需要强制造成一次测试崩溃,以便向 Firebase 发送您的第一个崩溃报告。
准备工作
将 Firebase 添加到您的 Unity 项目(如果尚未添加)。如果您没有 Unity 项目,可以下载一个示例应用。
建议:要自动获取路径日志以了解导致崩溃事件、非严重事件或 ANR 事件的用户操作,您需要在 Firebase 项目中启用 Google Analytics。
如果您的现有 Firebase 项目未启用 Google Analytics,您可以访问 Firebase 控制台,依次点击
,然后在 >“项目设置”集成标签页中启用 Google Analytics。 如果您要创建新的 Firebase 项目,请在项目创建工作流中启用 Google Analytics。
第 1 步:将 Crashlytics SDK 添加到您的应用
注意:在向 Firebase 项目注册 Unity 项目时,您可能已经下载了 Firebase Unity SDK 并添加了以下步骤中所述的软件包。
下载 Firebase Unity SDK,然后将此 SDK 解压缩到合适的位置。 Firebase Unity SDK 不局限于特定平台。
在您打开的 Unity 项目中,依次转到 Assets > Import Package > Custom Package。
从解压缩的 SDK 中,选择导入 Crashlytics SDK (
FirebaseCrashlytics.unitypackage
)。如需利用路径日志,还可以将 Firebase SDK for Google Analytics 添加到您的应用 (
FirebaseAnalytics.unitypackage
) 中。确保您的 Firebase 项目中启用了 Google Analytics。在“Import Unity Package”(导入 Unity 软件包)窗口中,点击 Import(导入)。
第 2 步:初始化 Crashlytics
创建一个新的 C# 脚本,然后将其添加到场景中的
GameObject
。打开您的第一个场景,然后创建一个名为
CrashlyticsInitializer
的空GameObject
。在新对象的 Inspector(检查器)中点击 Add Component(添加组件)。
选择
CrashlyticsInit
脚本以将其添加到CrashlyticsInitializer
对象中。
在该脚本的
Start
方法中初始化 Crashlytics:using System.Collections; using System.Collections.Generic; using UnityEngine; // Import Firebase and Crashlytics using Firebase; using Firebase.Crashlytics; public class CrashlyticsInit : MonoBehaviour { // Use this for initialization void Start () { // Initialize Firebase Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { var dependencyStatus = task.Result; if (dependencyStatus == Firebase.DependencyStatus.Available) { // Create and hold a reference to your FirebaseApp, // where app is a Firebase.FirebaseApp property of your application class. // Crashlytics will use the DefaultInstance, as well; // this ensures that Crashlytics is initialized. Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance; // When this property is set to true, Crashlytics will report all // uncaught exceptions as fatal events. This is the recommended behavior. Crashlytics.ReportUncaughtExceptionsAsFatal = true; // Set a flag here for indicating that your project is ready to use Firebase. } else { UnityEngine.Debug.LogError(System.String.Format( "Could not resolve all Firebase dependencies: {0}",dependencyStatus)); // Firebase Unity SDK is not safe to use here. } }); } // Update is called once per frame void Update() // ... }
第 3 步:(仅限 Android)设置符号上传
只有使用 IL2CPP 的 Android 应用才需要执行此步骤。
对于使用 Unity 的 Mono 脚本后端的 Android 应用,不需要执行这些步骤。
对于 Apple 平台应用,不需要执行这些步骤,因为 Firebase Unity Editor 插件会自动配置您的 Xcode 项目以上传符号。
Crashlytics 的 Unity SDK 8.6.1 及更高版本自动包含 NDK 崩溃报告,让 Crashlytics 能够自动报告 Android 上的 Unity IL2CPP 崩溃问题。不过,如需在 Crashlytics 信息中心内查看原生库崩溃的经过符号化解析的堆栈轨迹,您必须在构建时使用 Firebase CLI 上传符号信息。
如需设置符号上传,请按照说明安装 Firebase CLI。
如果您已安装 CLI,请务必将其更新为最新版本。
第 4 步:构建项目并上传符号
iOS+(Apple 平台)
在“Build Settings”(构建设置)对话框中,将您的项目导出到 Xcode 工作区。
构建您的应用。
对于 Apple 平台,Firebase Unity Editor 插件会自动配置 Xcode 项目,以便为每个 build 生成与 Crashlytics 兼容的符号文件并将其上传到 Firebase 服务器。
Android
在“Build Settings”(构建设置)对话框中,执行以下操作之一:
导出到 Android Studio 项目以构建您的项目;或
直接通过 Unity 编辑器构建 APK。
在构建之前,请确保在“Build Settings(构建设置)”对话框中选中 Create symbols.zip(创建 symbols.zip)复选框。
构建完成后,生成与 Crashlytics 兼容的符号文件,然后运行以下 Firebase CLI 命令将其上传到 Firebase 服务器:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID:您的 Firebase Android 应用 ID(而不是您的软件包名称)
示例 Firebase Android 应用 ID:1:567383003300:android:17104a2ced0c9b9b
PATH/TO/SYMBOLS:CLI 生成的符号文件的路径
导出到 Android Studio 项目 - PATH/TO/SYMBOLS 是
unityLibrary/symbols
目录,在您通过 Gradle 或 Android Studio 构建应用后,系统会在导出的项目根目录中创建该目录。直接在 Unity 中构建 APK - PATH/TO/SYMBOLS 是构建完成时在项目根目录中生成的压缩符号文件的路径(例如:
)。myproject/myapp-1.0-v100.symbols.zip
查看可使用 Firebase CLI 命令生成和上传符号文件的高级选项
标志 说明 --generator=csym
使用旧版 cSYM 符号文件生成器,而不是默认的 Breakpad 生成器
不推荐使用。我们建议您使用默认的 Breakpad 符号文件生成器。
--generator=breakpad
使用 Breakpad 符号文件生成器
请注意,用于生成符号文件的默认选项是 Breakpad。 只有当您已经在 build 配置中添加了
,并且想要替换它以改用 Breakpad 时,才需要使用此标志。symbolGenerator { csym() }
--dry-run
生成符号文件,但不将其上传
如果您要检查所发送文件的内容,此标志将非常有用。
--debug
提供额外的调试信息
第 5 步:强制造成一次测试崩溃以完成设置
如需完成 Crashlytics 设置并在 Firebase 控制台的 Crashlytics 信息中心内查看初始数据,您需要强制造成一次测试崩溃。
找到现有的
GameObject
,然后向其中添加以下脚本。此脚本将在您运行应用几秒钟后造成一次测试崩溃。using System; using UnityEngine; public class CrashlyticsTester : MonoBehaviour { int updatesBeforeException; // Use this for initialization void Start () { updatesBeforeException = 0; } // Update is called once per frame void Update() { // Call the exception-throwing method here so that it's run // every frame update throwExceptionEvery60Updates(); } // A method that tests your Crashlytics implementation by throwing an // exception every 60 frame updates. You should see reports in the // Firebase console a few minutes after running your app with this method. void throwExceptionEvery60Updates() { if (updatesBeforeException > 0) { updatesBeforeException--; } else { // Set the counter to 60 updates updatesBeforeException = 60; // Throw an exception to test your Crashlytics implementation throw new System.Exception("test exception please ignore"); } } }
构建您的应用,并在构建完成后上传符号信息。
iOS+:Firebase Unity Editor 插件会自动配置您的 Xcode 项目,以便上传您的符号文件。
Android:对于使用 IL2CPP 的 Android 应用,请运行 Firebase CLI
crashlytics:symbols:upload
命令来上传您的符号文件。
运行应用。应用运行后,查看设备日志并等待
CrashlyticsTester
触发异常。iOS+:在 Xcode 的底部窗格中查看日志。
Android:在终端中运行以下命令来查看日志:
adb logcat
。
前往 Firebase 控制台的 Crashlytics 信息中心,查看您的测试崩溃报告。
如果您已刷新控制台,但在五分钟后仍未看到测试崩溃报告,请启用调试日志记录,查看您的应用是否正在发送崩溃报告。
大功告成!Crashlytics 现在会监控您的应用是否发生崩溃。您可以访问 Crashlytics 信息中心以查看和调查所有报告和统计信息。
后续步骤
- (推荐)对于使用 IL2CPP 的 Android 应用,请收集 GWP-ASan 报告,以帮助调试由原生内存错误引起的崩溃。这些内存相关错误可能与应用内的内存损坏有关,这也是导致应用安全漏洞的主要原因。要利用此调试功能,请确保您的应用使用最新的 Crashlytics SDK for Unity (v10.7.0+) 并且明确启用了 GWP-ASan(要求您修改 Android 应用清单)。
- 您可以通过添加自选式报告、日志、键以及非严重错误跟踪来自定义崩溃报告设置。
- 与 Google Play 集成,以便您可以直接在 Crashlytics 信息中心内按 Google Play 轨道过滤 Android 应用的崩溃报告。这样可让 Crashlytics 信息中心更有侧重地显示特定 build 的崩溃信息。