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

Na tej stronie znajdziesz porady i rozwiązania problemów z Unity, które mogą wystąpić podczas korzystania z Firebase.

Masz inne problemy lub nie widzisz swojego problemu w poniższej liście? Aby dowiedzieć się więcej o Firebase lub poszczególnych usługach, zapoznaj się z najczęstszymi pytaniami dotyczącymi Firebase.

Zgodność z .NET w przypadku Unity 2017.x i późniejszych

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

Dlatego w pakiecie SDK Firebase Unity w wersji 5.4.0 lub nowszej znajdują się wtyczki zgodne z wersją .NET 3.x lub 4.x w katalogach dotnet3dotnet4 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 ramach .NET, które są implementowane przez pakiet programistyczny Parse.

Aby rozwiązać problem z kompilacją, 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 na wszystkich platformach:
    • 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 importujesz inną wtyczkę Firebase:

  • W projekcie Unity otwórz Zasoby > Rozwiązywanie usług Play > Obsługa wersji > Aktualizuj, aby włączyć odpowiednie pliki DLL w projekcie.

Kompilacja IL2CPP w wersji Unity 2017.1 w projektach .NET 4.x

Firebase obsługuje .NET 4.x jako opcję kompilacji eksperymentalnej w Unity 2017 i nowszych wersjach. W starszych wersjach .NET wtyczki Firebase korzystają z komponentów pakietu Parse SDK, aby udostępniać niektóre klasy .NET 4.x.

Dlatego pakiet SDK Firebase Unity w wersji 5.4.0 i nowszych udostępnia pakiety DLL służące do przekazywania typów, które przekazują typy analizy (np. implementacja analizy System.Threading.Tasks.Task) do platformy .NET. Niestety IL2CPP (transpilator, który konwertuje C# na C++) zawarty w Unity 2017.1.x nie przetwarza poprawnie bibliotek DLL przesyłających typy, co powoduje błędy kompilacji podobne do tych:

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

Firebase Realtime Database tworzy połączenia sieciowe TLS przy użyciu pakietu sieciowego .NET. Funkcja TLS jest uszkodzona w Unity 2017.2, gdy używasz .NET 4.6, co powoduje, że wtyczka Realtime Database nie działa w edytorach i na komputerze.

Nie ma sposobu na obejście tego problemu, więc musisz użyć innej wersji Unity, np. 2017.1 lub 2017.3.

Brak pliku konfiguracji 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 zmienne środowiskowe AndroidManifest.xml, project.propertiesres/values/google-services.xml.

Problem z single dex podczas kompilowania aplikacji na Androida

Podczas kompilowania aplikacji na Androida możesz napotkać błąd kompilacji związany z tym, że masz jeden plik dex. Jeśli Twój projekt jest skonfigurowany do korzystania z systemu kompilacji Gradle, komunikat o błędzie 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 wersji 2017.2 Unity wprowadziło minifikację, która wykorzystuje narzędzie Proguard (lub inne narzędzia w niektórych wersjach Unity) do usuwania nieużywanego kodu. Może to zmniejszyć łączną liczbę odwołujących się do siebie metod w pojedynczym pliku dex. Tę opcję znajdziesz, klikając Ustawienia odtwarzacza > Android > Ustawienia publikowania > Zmniejsz. Opcje mogą się różnić w zależności od wersji Unity, dlatego zapoznaj się z oficjalną dokumentacją Unity.

Jeśli liczba odwołań do metod nadal przekracza limit, możesz włączyć multidex. Można to zrobić na kilka sposobów:

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

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

Obsługa Java 8 i desugaring w przypadku kompilacji na Androida w Unity 2017 i Unity 2018 (pakiet SDK Firebase na Unity 8.0.0 lub nowszy)

W maju 2021 r. (wersja BOM Firebase 28.0.0) Firebase wyłączyła desugaring we wszystkich swoich bibliotekach na Androida (patrz notatki do wersji). Podczas kompilowania aplikacji na Androida za pomocą pakietu SDK Firebase dla Unity (w wersji 8.0.0 lub nowszej) możesz zobaczyć ten 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 wersji na Androida w Unity 2017 i Unity 2018. Nowsze wersje Unity domyślnie dodają blok compileOptions do plików 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 Custom Gradle Template w sekcji 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ść parametru minSdkVersion w projekcie na Androida do 26 lub wyższej.

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

Problemy z kompilacją na iOS za pomocą Cocoapods

Podczas kompilowania aplikacji na iOS instalacja Cocoapod może zakończyć się błędem dotyczącym ustawień języka lub kodowania UTF-8. Obecnie istnieje kilka różnych sposobów na obejście tego problemu.

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

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

  • ~/.bash_profile lub podobnym programie dodaj export LANG=en_US.UTF-8

Jak zaktualizować wersję pakietów SDK Firebase dla Unity

Proces aktualizacji wersji pakietów Firebase Unity SDK zależy od tego, jak zostały one zaimportowane. Oto 2 alternatywne metody importowania:

  • 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 lub nowszej.
    • Dzięki tej metodzie łatwiej będzie Ci aktualizować wersje, a katalog Assets/będzie czystszy.

W projekcie Unity do zarządzania wszystkimi pakietami Firebase należy używać tylko jednej metody importowania. Instrukcje te możesz wykorzystać nie tylko do aktualizowania wersji poszczególnych pakietów, ale też, w razie potrzeby, do przeniesienia zarządzania pakietami do UPM (zalecana metoda importowania).