Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

有其他挑战或没有看到下面概述的问题?请务必检查出的主要火力地堡FAQ更多的泛火力地堡或特殊产品的常见问题解答。

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

Firebase 支持 .NET 4.x 作为 Unity 2017 及更高版本中的实验性构建选项。火力地堡插件使用的成分解析SDK在早期版本的.NET提供了一些.NET 4.x的类。

因此,火力地堡统一SDK版本5.4.0和后来者提供了符合或者.NET 3.x或4.x版的.NET兼容的插件dotnet3dotnet4的火力地堡统一SDK的目录。

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

要解决编译错误,如果您使用的是 .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工程,导航到资产>播放服务解析器>版本处理器>更新,以使您的项目正确的DLL。

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

Firebase 支持 .NET 4.x 作为 Unity 2017 及更高版本中的实验性构建选项。火力地堡插件使用的成分解析SDK在早期版本的.NET提供了一些.NET 4.x的类。

因此,火力地堡统一SDK版本5.4.0和后来提供的类型的转发的DLL,其转发解析类型(例如,解析执行System.Threading.Tasks.Task )到.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 配置文件

为了统一支持的版本不具有自定义摇篮构建的能力,在火力地堡编辑工具产生Assets/Plugins/Android/Firebase/res/values/google-services.xml为Android资源打包到一个Android 构建,以便 Firebase SDK 可以使用它来初始化默认 FirebaseApp 实例。

在Unity 2020年,所有的Android资源必须与目录.androidlib后缀。如果你的项目是使用火力地堡SDK产生的Assets/Plugins/Android/Firebase目录下,重命名为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 库的方法总数超过此限制,则构建将失败。

统一引入微小在2017.2,它使用Proguard的(或其他工具在Unity的一些版本),以汽提出未使用的代码,从而可以减少在一个单一的DEX文件的引用的方法的总数。该选项可以在播放器设置>安卓>发布设置>缩减大小被发现。不同版本的 Unity 中的选项可能有所不同,因此请参阅官方 Unity 文档。

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

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

更多细节可以发现在multidex用户指南

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

在2021年5月(火力地堡物料清单v28.0.0),其所有的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 版本。统一新版本添加compileOptions默认的gradle中生成文件块。要在 Unity 2017 和 Unity 2018 中修复此构建错误,请执行以下操作之一:

  • a添加compileOptions块的gradle的模板:

    1. 使用Gradle作为构建系统。
    2. 启用Custom Gradle TemplatePlayer Settings
    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