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

Unity 和 Firebase 的故障排除和常见问题解答

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

此页面针对您在使用 Firebase 时可能遇到的特定于 Unity 的问题提供提示和故障排除。

有其他挑战或没有在下面列出您的问题吗?请务必查看主要的 Firebase 常见问题解答,了解更多泛 Firebase 或产品特定的常见问题解答。

使用 Unity 2017.x 及更高版本时的 .NET 兼容性

Firebase 支持 .NET 4.x 作为 Unity 2017 及更高版本中的实验性构建选项。 Firebase 插件使用Parse SDK的组件在早期版本的 .NET 中提供一些 .NET 4.x 类。

因此,Firebase Unity SDK 5.4.0及更高版本在 Firebase Unity SDK 的dotnet3dotnet4目录中提供了与 .NET 3.x 或 .NET 4.x 兼容的插件。

如果您导入与项目中启用的 .NET 版本不兼容的 Firebase 插件,您将看到 Parse SDK 实现的 .NET 框架中某些类型的编译错误。

要解决编译错误,如果您使用的是 .NET 3.x:

  1. 删除或禁用所有平台的以下 DLL:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. 为所有平台启用以下 DLL:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

要解决编译错误,如果您使用的是 .NET 4.x:

  1. 删除或禁用所有平台的以下 DLL:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. 为所有平台启用以下 DLL:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

如果您导入另一个 Firebase 插件:

  • 在您的 Unity 项目中,导航到Assets > Play Services Resolver > Version Handler > Update为您的项目启用正确的 DLL。

.NET 4.x 项目中的 Unity 2017.1 IL2CPP 编译

Firebase 支持 .NET 4.x 作为 Unity 2017 及更高版本中的实验性构建选项。 Firebase 插件使用Parse SDK的组件在早期版本的 .NET 中提供一些 .NET 4.x 类。

因此,Firebase Unity SDK 5.4.0 及更高版本提供了类型转发 DLL,可将 Parse 类型(例如, System.Threading.Tasks.Task的 Parse 实现)转发到 .NET 框架。不幸的是,Unity 2017.1.x 中附带的 IL2CPP(将 C# 转换为 C++ 的转换器)无法正确处理类型转发 DLL,这会导致类似于以下内容的构建错误:

Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>

目前没有针对 Unity 2017.1 中的 .NET 4.x IL2CPP 构建错误的解决方法,因此您必须升级到 Unity 2017.2 或更高版本才能在使用 IL2CPP 编译的项目中使用 .NET 4.x。

Unity 2017.2联网

Firebase 实时数据库使用 .NET 网络堆栈创建 TLS 网络连接。使用 .NET 4.6 时,Unity 2017.2 中的 TLS 功能被破坏,导致实时数据库插件在编辑器和桌面上失败。

此问题没有解决方法,因此您必须使用不同版本的 Unity,例如版本 2017.1 或 2017.3。

Unity 2020 中缺少 Firebase Android 配置文件

为了支持无法自定义 Gradle 构建的 Unity 版本,Firebase 编辑器工具生成Assets/Plugins/Android/Firebase/res/values/google-services.xml作为 Android 资源打包到Android 构建,以便 Firebase SDK 可以使用它来初始化默认的 FirebaseApp 实例。

在 Unity 2020 中,所有 Android 资源都必须位于带有.androidlib后缀的目录中。如果您的项目使用生成Assets/Plugins/Android/Firebase目录的 Firebase SDK,请将其重命名为Assets/Plugins/Android/Firebase.androidlib 。确保它包含AndroidManifest.xmlproject.propertiesres/values/google-services.xml

构建 Android 应用程序时单个 dex 的问题

在构建 Android 应用程序时,您可能会遇到与具有单个 dex 文件相关的构建失败。如果您的项目配置为使用 Gradle 构建系统,则错误消息类似于以下内容。

Cannot fit requested classes in a single dex file.

Dalvik 可执行 ( .dex ) 文件用于保存一组类定义及其相关的 Android 应用程序 ( .apk ) 附属数据。单个 dex 文件仅限于引用 65,536 个方法。如果项目中所有 Android 库的方法总数超过此限制,构建将失败。

Unity 在 2017.2 引入了Minification ,它使用 Proguard(或某些版本的 Unity 中的其他工具)剥离掉未使用的代码,可以减少单个 dex 文件中引用方法的总数。该选项可以在Player Settings > Android > Publishing Settings > Minify中找到。选项在不同版本的 Unity 中可能有所不同,因此请参阅官方 Unity 文档。

如果引用方法的数量仍然超过限制,另一种选择是启用multidex 。在 Unity 中有多种方法可以实现这一点:

  • 如果开启了Player Settings下的Custom Gradle Template ,修改mainTemplate.gradle
  • 如果您使用 Android Studio 构建导出的项目,请修改模块级别的build.gradle文件。

可以在multidex 用户指南中找到更多详细信息。

Unity 2017 和 Unity 2018(Firebase Unity SDK 8.0.0 及更高版本)中 Android 构建的 Java 8 支持和脱糖

2021 年 5 月(Firebase BoM v28.0.0),Firebase 对其所有 Android 库禁用了脱糖(请参阅发行说明)。使用 Firebase Unity SDK(8.0.0 及更高版本)构建 Android 应用程序时,您可能会看到以下构建错误:

> Error while dexing.
 The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle

此更改仅影响 Unity 2017 和 Unity 2018 中的 Android 构建。较新版本的 Unity 默认在 gradle 构建文件中添加compileOptions块。要修复 Unity 2017 和 Unity 2018 中的此构建错误,请执行以下操作之一:

  • 添加一个compileOptions块到你的 gradle 模板:

    1. 使用Gradle作为构建系统。
    2. Player Settings下启用Custom Gradle Template
    3. 将以下行添加到mainTemplate.gradle (或模块级build.gradle ,如果为 Android Studio 导出项目):

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • 或者,将 Android 项目的 minSdkVersion 增加到 26 或更高。

另请参阅Android 故障排除 - 去除构建失败的糖分。

使用 Cocoapods 为 iOS 构建时的问题

为 iOS 构建时,Cocoapod 安装可能会失败,并出现有关语言区域设置或 UTF-8 编码的错误。目前有几种不同的方法可以解决这个问题。

  • 从终端直接运行pod install ,然后打开生成的 xcworkspace 文件。

  • 将 Cocoapods 的版本降级到 1.10.2。该问题仅存在于 1.11 及更新版本中。

  • 在您的~/.bash_profile或等效文件中,添加export LANG=en_US.UTF-8

如何更新 Firebase Unity SDK 的版本

更新 Firebase Unity SDK 版本的过程取决于它们最初是如何导入的。以下是两种替代导入方法:

  • 在项目的Assets/目录下导入.unitypackage文件
  • 使用Unity 包管理器(UPM) 导入
    • 这是在 Unity 2018.4+ 中管理包的推荐方式。
    • 使用此方法可以使将来的版本更新更容易,并且您的Assets/目录更干净。

在您的 Unity 项目中,您应该只使用一种导入方法来管理所有 Firebase 包。下面的说明不仅可以用于更新单个包的版本,还可以在需要时将包管理迁移到 UPM(推荐的导入方法)。