Rozwiązywanie problemów & Często zadawane pytania dotyczące Unity i Firebase

Ta strona zawiera wskazówki i sposoby rozwiązywania problemów specyficznych dla Unity, które możesz napotkać podczas korzystania z Firebase.

Masz inne wyzwania lub nie widzisz swojego problemu opisanego poniżej? Pamiętaj, aby zapoznać się z głównymi często zadawanymi pytaniami dotyczącymi Firebase, aby uzyskać więcej często zadawanych pytań dotyczących Firebase lub konkretnych produktów.

Zgodność z platformą .NET podczas korzystania z Unity 2017.x i nowszych

Firebase obsługuje platformę .NET 4.x jako opcję kompilacji eksperymentalnej w Unity 2017 i nowszych wersjach. Wtyczki Firebase wykorzystują komponenty zestawu SDK Parse do udostępniania niektórych klas .NET 4.x we wcześniejszych wersjach .NET.

Dlatego pakiet Firebase Unity SDK w wersji 5.4.0 i nowszych udostępnia wtyczki zgodne z platformą .NET 3.x lub .NET 4.x w katalogach dotnet3 i dotnet4 pakietu Firebase Unity SDK.

Jeśli zaimportujesz wtyczkę Firebase, która jest niezgodna z wersją .NET włączoną w Twoim projekcie, zobaczysz błędy kompilacji niektórych typów w środowisku .NET, które są implementowane przez zestaw SDK Parse.

Aby rozwiązać błąd kompilacji, jeśli używasz platformy .NET 3.x:

  1. Usuń lub wyłącz następujące biblioteki DLL dla wszystkich platform:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. Włącz następujące biblioteki DLL dla wszystkich platform:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

Aby rozwiązać błąd kompilacji, jeśli używasz platformy .NET 4.x:

  1. Usuń lub wyłącz następujące biblioteki DLL dla wszystkich platform:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. Włącz następujące biblioteki DLL dla wszystkich platform:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

Jeśli zaimportujesz inną wtyczkę Firebase:

  • W projekcie Unity przejdź do Zasoby > Narzędzie do rozpoznawania usług Play > Obsługa wersji > Aktualizuj , aby włączyć prawidłowe biblioteki DLL dla swojego projektu.

Kompilacja Unity 2017.1 IL2CPP w projektach .NET 4.x

Firebase obsługuje platformę .NET 4.x jako opcję kompilacji eksperymentalnej w Unity 2017 i nowszych wersjach. Wtyczki Firebase wykorzystują komponenty zestawu SDK Parse do udostępniania niektórych klas .NET 4.x we wcześniejszych wersjach .NET.

Dlatego zestaw SDK Firebase Unity w wersji 5.4.0 i nowszych udostępnia biblioteki DLL przekazywania typów, które przekazują typy analizy (na przykład implementacja analizy System.Threading.Tasks.Task ) do platformy .NET. Niestety, IL2CPP (transpiler konwertujący C# na C++) dostarczony w Unity 2017.1.x nie przetwarza poprawnie bibliotek DLL przekazujących typy, co powoduje błędy kompilacji podobne do następujących:

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

Obecnie nie jest dostępne obejście błędów kompilacji IL2CPP platformy .NET 4.x w Unity 2017.1, dlatego należy dokonać aktualizacji do wersji Unity 2017.2 lub nowszej, aby używać platformy .NET 4.x w projektach skompilowanych przy użyciu IL2CPP.

Sieć Unity 2017.2

Baza danych Firebase Realtime Database tworzy połączenia sieciowe TLS przy użyciu stosu sieciowego .NET. Funkcja TLS jest uszkodzona w Unity 2017.2 podczas korzystania z platformy .NET 4.6, co powoduje awarię wtyczki Realtime Database w edytorach i na komputerze.

Nie ma obejścia tego problemu, dlatego musisz użyć innej wersji Unity, na przykład wersji 2017.1 lub 2017.3.

Brak pliku konfiguracyjnego Firebase Android w Unity 2020

Aby obsługiwać wersje Unity, które nie mają możliwości dostosowywania kompilacji Gradle, narzędzie edytora Firebase generuje Assets/Plugins/Android/Firebase/res/values/google-services.xml jako zasób Androida, który ma zostać spakowany w Kompilacja systemu Android, dzięki czemu zestaw SDK Firebase może go użyć do zainicjowania domyślnej instancji FirebaseApp.

W Unity 2020 wszystkie zasoby Androida muszą znajdować się w katalogach z sufiksem .androidlib . Jeśli Twój projekt korzysta z pakietu SDK Firebase, który generuje katalog Assets/Plugins/Android/Firebase , zmień jego nazwę na Assets/Plugins/Android/Firebase.androidlib . Upewnij się, że zawiera AndroidManifest.xml , project.properties i res/values/google-services.xml .

Problem z pojedynczym indeksem podczas tworzenia aplikacji na Androida

Podczas tworzenia aplikacji na Androida może wystąpić błąd kompilacji związany z posiadaniem pojedynczego pliku dex. Komunikat o błędzie wygląda podobnie do poniższego, jeśli projekt jest skonfigurowany do korzystania z systemu kompilacji Gradle.

Cannot fit requested classes in a single dex file.

Pliki wykonywalne Dalvik ( .dex ) służą do przechowywania zestawu definicji klas i powiązanych z nimi danych dodatkowych dla aplikacji na Androida ( .apk ). Pojedynczy plik dex jest ograniczony do odniesień do 65 536 metod. Kompilacja nie powiedzie się, jeśli łączna liczba metod ze wszystkich bibliotek systemu Android w projekcie przekroczy ten limit.

Unity wprowadziło Minifikację w wersji 2017.2, która wykorzystuje Proguard (lub inne narzędzia w niektórych wersjach Unity) do usuwania nieużywanego kodu, co może zmniejszyć całkowitą liczbę metod odniesienia w jednym pliku dex. Opcję tę można znaleźć w Ustawieniach odtwarzacza > Android > Ustawienia publikowania > Minify . Opcje mogą się różnić w różnych wersjach Unity, dlatego zapoznaj się z oficjalną dokumentacją Unity.

Jeśli liczba odwoływanych metod nadal przekracza limit, inną opcją jest włączenie multidex . W Unity można to osiągnąć na wiele sposobów:

  • Jeśli w Player Settings włączono Custom Gradle Template , zmodyfikuj mainTemplate.gradle .
  • Jeśli do zbudowania wyeksportowanego projektu używasz Android Studio, zmodyfikuj plik build.gradle na poziomie modułu.

Więcej szczegółów można znaleźć w podręczniku użytkownika multidex .

Obsługa Java 8 i usuwanie cukru dla kompilacji Androida w Unity 2017 i Unity 2018 (Firebase Unity SDK 8.0.0 i nowsze)

W maju 2021 r. (Firebase BoM v28.0.0) Firebase wyłączył usuwanie cukru dla wszystkich swoich bibliotek Androida (zobacz informacje o wersji ). Podczas tworzenia aplikacji na Androida przy użyciu pakietu Firebase Unity SDK (8.0.0 i nowszego) może pojawić się następujący błąd kompilacji:

> Error while dexing.
 The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle

Ta zmiana dotyczy tylko kompilacji Androida w Unity 2017 i Unity 2018. Nowsze wersje Unity domyślnie dodają blok compileOptions w plikach kompilacji stopniowej. Aby naprawić ten błąd kompilacji w Unity 2017 i Unity 2018, wykonaj jedną z następujących czynności:

  • Dodaj blok compileOptions do szablonu gradle:

    1. Użyj Gradle jako systemu kompilacji.
    2. Włącz Custom Gradle Template w Player Settings .
    3. Dodaj następujące linie do mainTemplate.gradle (lub build.gradle na poziomie modułu, jeśli eksportujesz projekt do Android Studio):

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • Alternatywnie zwiększ wartość minSdkVersion dla swojego projektu na Androida do 26 lub nowszej.

Zobacz także Rozwiązywanie problemów z Androidem — usuwanie błędów kompilacji .

Problemy podczas tworzenia systemu iOS przy użyciu Cocoapodów

Podczas tworzenia oprogramowania dla systemu iOS instalacja Cocoapod może zakończyć się niepowodzeniem z powodu błędu dotyczącego ustawień regionalnych języka lub kodowania UTF-8. Obecnie istnieje kilka różnych sposobów obejścia tego problemu.

  • Z terminala uruchom bezpośrednio pod install i otwórz powstały plik xcworkspace.

  • Zmień wersję Cocoapods na 1.10.2. Problem występuje tylko w wersji 1.11 i nowszych.

  • W swoim ~/.bash_profile lub jego odpowiedniku dodaj export LANG=en_US.UTF-8

Jak zaktualizować wersję zestawów SDK Firebase Unity

Proces aktualizacji wersji pakietów SDK Firebase Unity zależy od sposobu, w jaki zostały one pierwotnie zaimportowane. Oto dwie alternatywne metody importu:

  • Importowanie plików .unitypackage do katalogu Assets/ projektu
  • Importowanie przy użyciu Menedżera pakietów Unity (UPM)
    • Jest to zalecany sposób zarządzania pakietami w Unity 2018.4+.
    • Użyj tej metody, aby ułatwić przyszłe aktualizacje wersji i oczyścić katalog Assets/ katalog.

W projekcie Unity powinieneś używać tylko jednej metody importu do zarządzania wszystkimi pakietami Firebase. Poniższe instrukcje można wykorzystać nie tylko do aktualizacji wersji poszczególnych pakietów, ale także, w razie potrzeby, do migracji zarządzania pakietami do UPM (zalecana metoda importu).