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

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的故障-脫糖構建失敗