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 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 > 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.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. 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 sekcjiPlayer Settings
jest włączona, zmień wartość parametrumainTemplate.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:- 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.Wróć do wersji Cocoapods 1.10.2. Problem występuje tylko w wersji 1.11 i nowszych.
W
~/.bash_profile
lub podobnym dokumencie 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. 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).