故障排除與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 相容的插件。

如果您匯入的 Firebase 外掛程式與專案中啟用的 .NET 版本不相容,您將看到由 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 構建,以便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 中 Android 版本的 Java 8 支援與脫糖(Firebase Unity SDK 8.0.0 及更高版本)

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 (如果匯出 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(建議的導入方法)。