本頁面提供使用 Firebase 時可能遇到的 Unity 專屬問題提示和疑難排解方式。
是否遇到其他挑戰,或是您的問題與下方無關?請務必查看主要 Firebase 常見問題,進一步瞭解展開 Firebase 或特定產品的常見問題。
使用 Unity 2017.x 以上版本時有.NET 相容性
在 Unity 2017 以上版本中,Firebase 支援 .NET 4.x 做為實驗性建構選項。Firebase 外掛程式會使用 Parse SDK 的元件,在舊版 .NET 中提供部分 .NET 4.x 類別。
因此,Firebase Unity SDK 的 5.4.0
以上版本會提供外掛程式,與 Firebase Unity SDK 的 dotnet3
和 dotnet4
目錄中的 .NET 3.x 或 .NET 4.x 相容。
如果匯入的 Firebase 外掛程式與專案中啟用的 .NET 版本不相容,您會在由 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 編譯
在 Unity 2017 以上版本中,Firebase 支援 .NET 4.x 做為實驗性建構選項。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 Realtime Database 會使用 .NET 網路堆疊建立 TLS 網路連線。使用 .NET 4.6 時,Unity 2017.2 中的 TLS 功能無法正常運作,導致 Realtime Database 外掛程式在編輯器和電腦上無法運作。
這個問題沒有解決方法,因此您必須使用其他版本的 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 Executable (.dex
) 檔案用於儲存 Android 應用程式 (.apk
) 的一系列類別定義及其相關附加資料。單一 DEX 檔案只能參照 65,536 個方法。如果專案中所有 Android 程式庫的方法總數超過此上限,建構作業就會失敗。
Unity 在 2017.2 版中推出了縮減功能,可使用 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 28.0.0 版),Firebase 已為所有 Android 程式庫停用 desugaring 功能 (請參閱版本資訊)。使用 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
(如果匯出 Android Studio 專案,則為模組層級build.gradle
):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 Package Manager (UPM) 匯入
- 建議您使用這個方法管理 Unity 2018.4 以上版本中的套件。
- 使用這個方法可簡化日後的版本更新作業,並讓
Assets/
目錄更加簡潔。
在 Unity 專案中,您應只使用一種匯入方法來管理所有 Firebase 套件。您可以使用下列操作說明,不僅更新個別套件的版本,還可視需要將套件管理遷移至 UPM (建議的匯入方法)。