Na tej stronie znajdziesz porady i sposoby rozwiązywania 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 Unity 2017.x i nowszych
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 wersją .NET 3.x lub 4.x w katalogach dotnet3
i 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 ramach .NET, które są implementowane przez pakiet programistyczny Parse.
Aby rozwiązać problem z kompilacją, jeśli używasz .NET 3.x:
- Usuń lub wyłącz te biblioteki DLL na wszystkich platformach:
Parse/Plugins/dotNet45/Unity.Compat.dll
Parse/Plugins/dotNet45/Unity.Tasks.dll
- 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:
- Usuń lub wyłącz te biblioteki DLL na wszystkich platformach:
Parse/Plugins/Unity.Compat.dll
Parse/Plugins/Unity.Tasks.dll
- 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 tych:
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 ani 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 zmienne środowiskowe AndroidManifest.xml
, project.properties
i res/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 sekcjiPlayer 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:- Użyj
Gradle
jako systemu kompilacji. - Włącz
Custom Gradle Template
w sekcjiPlayer Settings
. Dodaj te wiersze do pliku
mainTemplate.gradle
(lub na poziomie modułubuild.gradle
, jeśli eksportujesz projekt do Android Studio):android { compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } }
- Użyj
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.
W
~/.bash_profile
lub podobnym programie dodajexport 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 kataloguAssets/
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).