此頁面針對您在使用 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 的dotnet3
和dotnet4
目錄中提供了與 .NET 3.x 或 .NET 4.x 兼容的插件。
如果您導入與項目中啟用的 .NET 版本不兼容的 Firebase 插件,您將看到 Parse SDK 實現的 .NET 框架中某些類型的編譯錯誤。
要解決編譯錯誤,如果您使用的是 .NET 3.x:
- 刪除或禁用所有平台的以下 DLL:
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
- 為所有平台啟用以下 DLL:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
要解決編譯錯誤,如果您使用的是 .NET 4.x:
- 刪除或禁用所有平台的以下 DLL:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
- 為所有平台啟用以下 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.xml
、 project.properties
和res/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 模板:- 使用
Gradle
作為構建系統。 - 在
Player Settings
下啟用Custom Gradle Template
。 將以下行添加到
mainTemplate.gradle
(或模塊級build.gradle
,如果為 Android Studio 導出項目):android { compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } }
- 使用
或者,將 Android 項目的 minSdkVersion 增加到 26 或更高。
使用 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(推薦的導入方法)。
如果 Firebase 包位於Assets/
目錄中,您有兩種更新 SDK 版本的選項:
選項 1 (推薦) :遷移以使用 UPM(在 Unity 2018.4+ 中可用)
- 按照 Firebase 提供的說明將包管理遷移到 UPM 。
- 雖然此方法比繼續使用
.unitypackage
工作流程需要更多的初始設置,但它在後續 SDK 版本更新的便利性方面得到了回報。
方案二:繼續使用
.unitypackage
文件導入到Assets/
目錄導入更新版本的每個包。
如果您從 Firebase 網站下載firebase_unity_sdk.zip ,請確保從正確的
dotnet
文件夾導入所有.unitypackages
。- 如果您使用的是 Unity 2019 或更高版本,請從
dotnet4
文件夾導入。 - 否則,在Player Settings中選擇Scripting Runtime Version ,如果設置為“.NET 3.x”,則從
dotnet3
文件夾導入。
- 如果您使用的是 Unity 2019 或更高版本,請從
之前導入的包版本的覆蓋應該由外部依賴管理器自動處理(當你導入 Firebase
.unitypackages
時它會自動包含)。但是,如果且僅當此自動過程失敗時,您需要手動刪除以下文件夾,然後再次重試上述導入步驟。
-
Assets/Editor Default Resources/Firebase
-
Assets/ExternalDependencyManager
-
Assets/Firebase
-
Assets/Parse
-
Assets/Plugins/iOS/Firebase
-
如果 Firebase 包由 UPM 管理,請將較新的 SDK 版本導入為.tgz
。此導入將自動覆蓋以前的版本。