升级到 Firebase Crashlytics SDK

现在,您可以使用全新官方 Firebase Crashlytics SDK 在应用中设置 Crashlytics,该 SDK 提供了与其他 Firebase 产品更为一致、更加直观易用的改进版 API。

本指南介绍了如何从旧版 Fabric SDK 升级为新 SDK。其中说明了新 API 中的更改、更改的原因,以及如何更新代码(如果需要)。

准备工作

Fabric 会将 GameObject 添加到您的场景中,以在您的游戏中以及 SDK 本身的其他目录中初始化 Crashlytics。

为确保 Fabric Crashlytics 和 Firebase Crashlytics 插件之间没有冲突,请从 Unity 项目中移除以下 Fabric 文件夹和文件:

  • Assets 下,删除以下文件:

    Assets/
       Editor Default Resources/
           FabricSettings.asset     <- DELETE
       Fabric/                      ><- DELETE
       Plugins/
           Android/
               answers/             ><- DELETE
               beta/                ><- DELETE
               crashlytics/         ><- DELETE
               crashlytics-wrapper/ ><- DELETE
               fabric/              ><- DELETE
               fabric-init/         ><- DELETE
           iOS/
               Fabric/              ><- DELETE
    >
  • Hierarchy Window 中,移除以下 GameObject

    SampleScene
        Main Camera
        Directional Light
        Canvas
        EventSystem
        FabricInit                  <- DELETE CrashlyticsInit><- DELETE
    >
  • 移除 Assets > Plugins > Android > AndroidManifest.xml 中的所有 Fabric 条目。

    例如,已知要移除的一个键为: android:name="io.fabric.unity.android.FabricApplication"

    搜索并移除其他 Fabric 条目(如果有的话)。

第 1 步:添加 Firebase 配置文件

  1. 打开您的项目设置。在您的应用卡片中,选择您需要为其添加配置文件的应用的软件包 ID 或软件包名称。

  2. 为每个应用下载具体平台的 Firebase 配置文件。

    • 对于 iOS+GoogleService-Info.plist
    • 对于 Androidgoogle-services.json

    对于单个 Unity 项目,您最多只能添加两个配置文件。

  3. 在 Unity 项目中,打开项目窗口,然后将您的配置文件移到 Assets 文件夹中。

第 2 步:添加 Firebase Crashlytics SDK

  1. 下载 Firebase Unity SDK,然后将其解压缩到方便的位置。

    Firebase Unity SDK 不局限于特定平台。

  2. 在您打开的 Unity 项目中,依次转到 Assets > Import Package > Custom Package

  3. 从解压缩的 SDK 中,选择导入 Crashlytics SDK (FirebaseCrashlytics.unitypackage)。确保您有 FirebaseCrashlytics.unitypackage 6.15.0 版或更高版本(如果不是,请更新 Asset 软件包版本)。 只有这样,您的崩溃报告才会显示在 Firebase 控制台中。

    • Unity 2017.x 及更新版本支持 .NET 4.x 框架。如果您的 Unity 项目使用 .NET 4.x,请导入 dotnet4/FirebaseCrashlytics.unitypackage

    请注意,您也可以导入其他任何受支持的 Firebase 产品

  4. 在“Import Unity Package”窗口中,点击 Import

  5. 创建一个新的 C# 脚本,然后将其添加到场景中的 GameObject

    1. 打开您的第一个场景,然后创建一个名为 CrashlyticsInitializer 的空 GameObject

    2. 在新对象的 Inspector 中点击 Add Component

    3. 选择 CrashlyticsInit 脚本以将其添加到 CrashlyticsInitializer 对象中。

  6. 在该脚本的 Start 方法中初始化 Crashlytics:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    // Import Firebase
    using Firebase;
    
    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;
    
                  // 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()
      // ...
    }

添加并初始化 SDK 后,Crashlytics 就会立即自动开始监听并收集崩溃报告。

第 3 步:更新您的代码

查看以下 SDK 更改,并对您的代码进行适当的更新:

Crashlytics 现在会根据 Firebase 安装 ID 来轮替 ID

Crashlytics 使用 Crashlytics 安装 UUID 来标识应用的实例,并将用户数据与其设备相关联。 以前,Crashlytics 会在设备的广告 ID 发生更改时轮替用户的安装 UUID。现在,Crashlytics 会根据用户的 Firebase 安装 ID (FID) 来轮替安装 UUID。如需了解详情,请访问管理 Firebase 安装 ID

更改的原因

使用 FID,以便与其他 Firebase SDK 保持一致。

Fabric.Crashlytics 现已更名为 Firebase.Crashlytics

我们已将命名空间从 Fabric 更改为 Firebase

Fabric

using Fabric.Crashlytics;

Firebase

using Firebase.Crashlytics;

RecordCustomException 现为 LogException

记录已捕获和处理的自定义非严重异常。

Fabric

Crashlytics.RecordCustomException(string name, string reason, StackTrace stackTrace);
Crashlytics.RecordCustomException(string name, string reason, string stackTraceString);

Firebase

Crashlytics.LogException(Exception ex);

更改的原因

大多数情况下,此函数用于记录 Exception 的实例。您现在可以提供 Exception 的实例,并且 Firebase Crashlytics 会提取它所需的信息,而无需您手动提取“name”、“reason”和“stackTrace”,也避免了因此产生的多余代码。

临时解决方法

如果您要通过某种方式利用这些参数,而不仅仅是直接提取异常信息,则仍然可以通过在其说明中创建自己的 Exception 子类以及自定义元数据来完成先前的行为。

SetKeyValue 现已更改为 SetCustomKey

设置要与崩溃报告一起发送的任何键值对。重新设置相同的键将更新相应的值。

Fabric

Crashlytics.SetKeyValue(string key, string value);

Firebase

Crashlytics.SetCustomKey(string key, string value);

更改的原因

我们正在重命名此方法,以使其行为更加清晰,并提高与其他 Firebase API 的一致性。

SetUserIdentifier 现为 SetUserId

设置用户标识符以帮助了解哪个用户遇到了崩溃。

Fabric

Crashlytics.SetUserIdentifier(string identifier);

Firebase

Crashlytics.SetUserId(string identifier);

更改的原因

我们正在重命名此方法,以提高与其他 Firebase API 的一致性。此外,它的长度更短;谁不想少按几个键呢?

移除了 SetUserEmail 和 SetUserName

以前,您可以使用显式方法设置与崩溃相关联的名称或电子邮件。日后,我们将不再明确定义这些内容。

Fabric

Crashlytics.SetUserEmail(string email);
Crashlytics.SetUserName(string name);

更改的原因

Google 致力于保护客户数据,这就要求在设计开发者工具使用的 API 时也要考虑这一点。这些针对特定用户的 API 已被移除,以鼓励使用已生成的不用于识别个人信息的方法来辨别哪个用户受到崩溃的影响。

临时解决方法

如需指明哪个用户遇到了崩溃,首选方法是使用 SetUserId。但是,如果此解决方案不可行,则可以使用 SetCustomKey 达到相同目的。

移除了 Crash 和 ThrowNonFatal

以前,Crashlytics 提供了两种实用程序方法来抛出异常,以便进行测试。这些方法不会包含在 Firebase Crashlytics 中。

Fabric

Crashlytics.Crash();
Crashlytics.ThrowNonFatal();

更改的原因

Crashlytics for Unity 在许多不同的环境中运行,并且可能发生多种不同类型的崩溃。这些方法未明确指定生成的崩溃是发生在 C# 中还是针对具体平台的原生 SDK 中。

临时解决方法

  • 强制造成一次测试崩溃,以将崩溃报告发送到 Firebase 控制台中的 Crashlytics 信息中心,从而测试您的实现

第 4 步:构建项目

  1. 使用 Unity 的 Build Settings 对话框导出项目。

  2. 导出完成后,通过将导出的项目与下面的导出配置示例进行比较,验证是否正确导出项目。

    iOS+

    Android

  3. 如果在比较您的项目之后发现似乎缺少文件,请打开 Unity 编辑器,然后运行 Google Play Services Resolver(请参阅以下说明)。

(根据需要)如果导出后缺少文件,请运行解析器

External Dependency Manager for Unity (EDM4U) 可确保您的 Unity 项目在 Apple 和 Android 平台上都有相应的运行时依赖项。如需详细了解该解析器,请访问 Unity Jar Resolver 的自述文件。

后续步骤