Google 致力于为黑人社区推动种族平等。查看具体举措

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。

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

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用户指南