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 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 w pakiecie SDK Firebase Unity w wersji 5.4.0 lub nowszej znajdują się wtyczki zgodne z wersjami .NET 3.x i 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 na wszystkich platformach:
    • 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 lub nowszej udostępnia biblioteki DLL do przekazywania typów, które przekazują typy Parse (np. implementację System.Threading.Tasks.Task w Parse) do platformy .NET. Niestety IL2CPP (transpilator, który konwertuje C# na C++) zawarty w Unity 2017.1.x nie przetwarza prawidłowo bibliotek DLL przesyłających typy, co powoduje błędy kompilacji podobne do tego:

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

Obecnie nie ma żadnego obejścia błędów kompilacji IL2CPP w .NET 4.x w Unity 2017.1, więc aby używać.NET 4 .x w projektach kompilowanych za pomocą IL2CPP, musisz uaktualnić Unity do wersji 2017.2 lub nowszej.

Sieć w 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 umożliwiają dostosowywania kompilacji Gradle, narzędzie edytora Firebase generuje elementAssets/Plugins/Android/Firebase/res/values/google-services.xml jako zasób Androida, który zostanie zapakowany do kompilacji Androida, aby pakiet SDK Firebase mógł go użyć do zainicjowania domyślnego wystąpienia FirebaseApp.

W Unity 2020 wszystkie zasoby Androida muszą znajdować się w katalogach z sufiksem .androidlib. Jeśli Twój projekt używa pakietu SDK Firebase, który generuje katalog Assets/Plugins/Android/Firebase, zmień jego nazwę na Assets/Plugins/Android/Firebase.androidlib. Sprawdź, czy zawiera on 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 pomocniczych w przypadku aplikacji na Androida (.apk). Pojedynczy plik dex może zawierać odwołania do 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. Opcję znajdziesz w sekcji Ustawienia odtwarzacza > Android > Ustawienia publikacji > Kompresowanie. 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 znajdziesz w przewodniku użytkownika Multi-X.

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 dezastosowanie we wszystkich swoich bibliotekach na Androida (patrz notatki do wersji). Podczas kompilowania aplikacji na Androida za pomocą pakietu SDK Firebase 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 – błędy dezagregacji 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:

  • Importowanie plików .unitypackage w 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 temu ł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).