疑難排解(&A);Unity 和 Firebase 常見問題

本頁提供 Unity 相關問題的提示和疑難排解 可協助您瞭解使用 Firebase 時可能遇到的情況

是否遇到其他挑戰,或是您的問題與下方無關?請務必勾選 請參閱 Firebase 主要常見問題 產品相關常見問題

使用 Unity 2017.x 以上版本時有.NET 相容性

Firebase 支援 .NET 4.x 做為 Unity 2017 中的實驗性建構選項,且 Firebase 外掛程式會使用 剖析 SDK,以便提供 舊版 .NET 中的 .NET 4.x 類別。

因此,Firebase Unity SDK 5.4.0 以上版本提供具有以下特徵的外掛程式: dotnet3dotnet4 與 .NET 3.x 或 .NET 4.x 相容 Firebase Unity SDK 的獨立目錄。

您匯入的 Firebase 外掛程式與 .NET 版本不相容 那麼您會在專案已啟用 的 Cloud Shell 中 由 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 專案中,前往 素材資源 >Play 服務解析器 >「版本處理常式」>更新 為專案啟用正確的 DLL。

在.NET 4 .x 專案中進行 Unity 2017.1 IL2CPP 編譯

Firebase 支援 .NET 4.x 做為 Unity 2017 中的實驗性建構選項,且 Firebase 外掛程式會使用 剖析 SDK,以便提供 舊版 .NET 中的 .NET 4.x 類別。

因此,Firebase Unity SDK 5.4.0 以上版本提供類型 轉送轉寄剖析類型的 DLL (例如, System.Threading.Tasks.Task) 遷移至 .NET 架構。很抱歉,IL2CPP Unity 2017.1.x 中提供的 (將 C# 轉換為 C++ 的轉譯器) 確實會 無法正確處理類型轉送 DLL 而造成建構錯誤 類似下列內容:

Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>

目前, Unity 2017.1,因此你必須升級至 Unity 2017.2 以上版本才能在主機中使用 .NET 4.x 以及使用 IL2CPP 編譯的專案

Unity 2017.2 網路

Firebase Realtime Database 會使用 .NET 網路建立 TLS 網路連線 使用.NET 4 .6 造成的 TLS 功能無法運作 Unity 2017.2 Realtime Database 外掛程式無法在編輯器和電腦上執行。

這個問題沒有解決方法,因此您必須使用 Unity,例如版本 2017.1 或 2017.3。

Unity 2020 中缺少 Firebase Android 設定檔

為了支援無法提供支援的 Unity 版本 自訂 Gradle 建構作業時,Firebase 編輯器工具會產生 Assets/Plugins/Android/Firebase/res/values/google-services.xml 做為 Android 要封裝到 Android 版本中,這樣 Firebase SDK 就能使用 來初始化預設的 FirebaseApp 執行個體。

在 Unity 2020 中,所有 Android 資源都必須位於具有 .androidlib 後置字串。如果您的專案使用 Firebase 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 程式庫的方法數量超過上限。

Unity 推出了壓縮功能 ,其中使用 Proguard (或部分 Unity 版本中的其他工具) 去除未使用的程式碼,可減少 單一 dex 檔案中所參照的方法。這個選項位於 播放器設定 >Android >發布設定 >縮小。選項可能會 因為 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 與脫糖程序

Firebase 已於 2021 年 5 月 (Firebase BoM 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 版本。較新版本的 Unity 預設會在 Gradle 建構檔案中新增 compileOptions 區塊。 如要修正 Unity 2017 和 Unity 2018 中的這個建構錯誤,請執行下列任一操作:

  • 在 Gradle 範本中新增 compileOptions 區塊:

    1. 使用 Gradle 做為建構系統。
    2. 啟用 Player Settings 底下的 Custom Gradle Template
    3. 將下列幾行新增至 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 套件管理工具 (UPM)
    • 建議您使用這個方法管理 Unity 2018.4 以上版本中的套件。
    • 使用這個方法,即可輕鬆更新日後的版本和 Assets/ 目錄清理工具

在 Unity 專案中,建議您只使用一種匯入方法來管理 Firebase 套件。下列指示除了用來更新 也可視需要遷移套件 改用 UPM (建議使用的匯入方法)