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 > Moduł obsługi 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 zawiera 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 ona 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. Opcja znajduje się 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ść parametru 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 desugaring we wszystkich swoich bibliotekach na Androida (patrz informacje o 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.

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

  • ~/.bash_profile lub podobnym dokumencie 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. Z tych instrukcji możesz skorzystać nie tylko do aktualizowania wersji poszczególnych pakietów, ale też, w razie potrzeby, do przeniesienia zarządzania pakietami do UPM (zalecana metoda importowania).