Rozwiązywanie problemów i najczęstsze pytania dotyczące Unity i Firebase

Na tej stronie znajdziesz wskazówki i sposoby rozwiązywania problemów związanych z Unity, które możesz napotkać podczas korzystania z Firebase.

Masz inny problem lub nie widzisz go poniżej? Więcej odpowiedzi na najczęstsze pytania dotyczące Pan Firebase i konkretnych usług znajdziesz w głównych odpowiedziach na najczęstsze pytania na temat Firebase.

zgodność z .NET w przypadku wersji Unity 2017.x i nowszych;

Firebase obsługuje .NET 4.x jako eksperymentalną opcję kompilacji w Unity 2017 i nowszych wersjach. Wtyczki Firebase korzystają z komponentów pakietu SDK Parse, aby udostępniać niektóre klasy .NET 4.x we wcześniejszych wersjach .NET.

Dlatego pakiet SDK Unity w Firebase w wersji 5.4.0 lub nowszej zawiera wtyczki zgodne z .NET 3.x lub .NET 4.x w dotnet3 i katalogach dotnet4 pakietu SDK Firebase Unity.

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 platformie .NET, które są zaimplementowane przez pakiet Parse SDK.

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

  1. Usuń lub wyłącz te biblioteki DLL na wszystkich platformach:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. Włącz te biblioteki DLL dla wszystkich platform:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

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

  1. Usuń lub wyłącz te biblioteki DLL na wszystkich platformach:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. Włącz te 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 otwórz Zasoby > Program do rozpoznawania usług Google Play > Moduł obsługi wersji > Aktualizuj, aby włączyć odpowiednie pliki DLL dla swojego projektu.

Kompilacja Unity 2017.1 IL2CPP w projektach .NET 4.x

Firebase obsługuje .NET 4.x jako eksperymentalną opcję kompilacji w Unity 2017 i nowszych wersjach. Wtyczki Firebase korzystają z komponentów pakietu SDK Parse, aby udostępniać niektóre klasy .NET 4.x we wcześniejszych wersjach .NET.

Dlatego pakiet SDK Unity w Firebase w wersji 5.4.0 i nowszych udostępnia pakiety DLL służące do przekazywania typów i przekazywania typów analizy (np. implementacja System.Threading.Tasks.Task) do platformy .NET. Niestety IL2CPP (transpiler, który konwertuje język C# na C++) i używany w Unity 2017.1.x, nie przetwarza prawidłowo typów przekazywania plików DLL, co powoduje wystąpienie błędów kompilacji, które przypominają te:

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

Obecnie w Unity 2017.1 nie ma sposobu obejścia błędów kompilacji .NET 4.x IL2CPP. Aby używać .NET 4.x w projektach skompilowanych z użyciem IL2CPP, musisz uaktualnić Unity do wersji 2017.2 lub nowszej.

Sieci na platformie Unity 2017.2

Baza danych czasu rzeczywistego Firebase tworzy połączenia sieciowe TLS przy użyciu stosu sieci .NET. Funkcja TLS nie działa w Unity 2017.2 w przypadku używania języka .NET w wersji 4.6, co powoduje awarię wtyczki Bazy danych czasu rzeczywistego w edytorach i na komputerze.

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

Brak pliku konfiguracyjnego Firebase na Androida w Unity 2020

Aby obsługiwać wersje Unity, które nie mają możliwości dostosowania kompilacji Gradle, edytor Firebase generuje Assets/Plugins/Android/Firebase/res/values/google-services.xml jako zasób Androida, który zostanie spakowany w kompilację Androida, aby pakiet SDK Firebase mógł zainicjować domyślną instancję 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. Sprawdź, czy zawiera AndroidManifest.xml, project.properties i res/values/google-services.xml.

Problem z użyciem pojedynczej wersji językowej podczas tworzenia aplikacji na Androida

Podczas tworzenia aplikacji na Androida możesz napotkać błąd kompilacji wynikający z posiadania pojedynczego pliku .dex. Jeśli Twój projekt jest skonfigurowany do korzystania z systemu kompilacji Gradle, komunikat o błędzie wygląda podobnie do tego.

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). W jednym pliku .dex można znaleźć tylko 65 536 metod. Kompilacja zakończy się niepowodzeniem, jeśli łączna liczba metod ze wszystkich bibliotek Androida w projekcie przekroczy ten limit.

W 2017 r. wprowadziliśmy w Unity Minification (minifikację), która używa ProGuard (lub innych narzędzi w niektórych wersjach Unity), aby wyciskać nieużywany kod, co może zmniejszyć łączną liczbę odwołań do metod w jednym pliku .dex. Tę opcję znajdziesz, klikając Ustawienia odtwarzacza > Android > Ustawienia publikowania > Zmniejsz. Te opcje mogą się różnić w zależności od wersji Unity, więc zapoznaj się z oficjalną dokumentacją Unity.

Jeśli liczba przywołanych metod nadal przekracza limit, możesz włączyć multidex. W Unity możesz to zrobić na kilka sposobów:

  • Jeśli włączona jest wartość Custom Gradle Template w kolumnie Player Settings, zmień mainTemplate.gradle.
  • Jeśli do utworzenia wyeksportowanego projektu używasz Androida Studio, zmodyfikuj plik build.gradle na poziomie modułu.

Więcej informacji można znaleźć w przewodniku użytkownika Multidex.

obsługa języka Java 8 i usunięcie cukru w kompilacjach na Androida w wersjach Unity 2017 i Unity 2018 (pakiet SDK Firebase Unity w wersji 8.0.0 lub nowszej)

W maju 2021 r. (Firebase BoM w wersji 28.0.0) usługa Firebase wyłączyła usuwanie odlustrzania we wszystkich swoich bibliotekach Androida (zobacz informacje o wersji). Podczas tworzenia aplikacji na Androida przy użyciu pakietu SDK Firebase Unity (8.0.0 lub nowszego) możesz zobaczyć taki 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 na Androida w wersjach Unity 2017 i Unity 2018. Nowsze wersje Unity dodają domyślnie blok compileOptions w plikach kompilacji Gradle. Aby naprawić ten błąd kompilacji w Unity 2017 i Unity 2018, wykonaj jedną z tych czynności:

  • Dodaj blok compileOptions do szablonu Gradle:

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

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • Możesz też zwiększyć wartość minSdkVersion w projekcie Androida do wartości 26 lub nowszej.

Zobacz też Rozwiązywanie problemów z Androidem – usuwanie odlustrzania błędów kompilacji.

Problemy z tworzeniem treści na iOS za pomocą Cocoapods

W przypadku kompilacji na iOS instalacja Cocoapoda może się nie udać z powodu błędu dotyczącego języka lub kodowania UTF-8. Istnieje obecnie kilka różnych sposobów na ominięcie tego problemu.

  • W terminalu bezpośrednio uruchom polecenie pod install i otwórz wynikowy plik xcworkspace.

  • Przywróć wersję Cocoapods do 1.10.2. Problem występuje tylko w wersji 1.11 i nowszych.

  • W polu ~/.bash_profile lub równoważnym dodaj export LANG=en_US.UTF-8

Jak zaktualizować wersję pakietów SDK Firebase Unity

Proces aktualizowania wersji pakietów SDK Firebase Unity zależy od sposobu ich początkowego zaimportowania. Oto 2 alternatywne metody importu:

  • Importuję pliki (.unitypackage) do katalogu Assets/ projektu
  • Importowanie za pomocą menedżera pakietów Unity (UPM)
    • Jest to zalecany sposób zarządzania pakietami w Unity w wersji 2018.4 i nowszych.
    • Korzystając z tej metody, ułatwisz sobie przyszłe aktualizacje wersji i usprawnisz swój katalog Assets/.

Do zarządzania wszystkimi pakietami Firebase w projekcie Unity należy używać tylko jednej metody importowania. Poniższe instrukcje pozwalają nie tylko zaktualizować wersję poszczególnych pakietów, ale także w razie potrzeby przenieść zarządzanie pakietami do UPM (zalecanej metody importowania).