了解 2023 年 Google I/O 大会上介绍的 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(推薦的導入方法)。