Ta strona zawiera wskazówki i rozwiązania problemów związanych z Unity, które możesz napotkać podczas korzystania z Firebase.
Masz inne wyzwania lub nie widzisz swojego problemu opisanego poniżej? Zapoznaj się z głównymi często zadawanymi pytaniami dotyczącymi Firebase, aby uzyskać więcej często zadawanych pytań dotyczących Firebase lub produktów.
Zgodność z platformą .NET podczas korzystania z aparatu Unity 2017.x i nowszych
Firebase obsługuje .NET 4.x jako eksperymentalną opcję kompilacji w Unity 2017 i nowszych. Wtyczki Firebase wykorzystują komponenty zestawu Parse SDK , aby udostępniać niektóre klasy platformy .NET 4.x we wcześniejszych wersjach platformy .NET.
W związku z tym zestaw SDK Firebase Unity w wersji 5.4.0
i nowszych udostępnia wtyczki zgodne z platformą .NET 3.x lub .NET 4.x w katalogach dotnet3
i dotnet4
zestawu Firebase Unity SDK.
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 środowisku .NET, które są implementowane przez Parse SDK.
Aby rozwiązać błąd kompilacji, jeśli używasz platformy .NET 3.x:
- Usuń lub wyłącz następujące biblioteki DLL dla wszystkich platform:
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
- Włącz następujące biblioteki DLL dla wszystkich platform:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
Aby rozwiązać błąd kompilacji, jeśli używasz platformy .NET 4.x:
- Usuń lub wyłącz następujące biblioteki DLL dla wszystkich platform:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
- Włącz następujące 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 przejdź do opcji Zasoby > Narzędzie do rozpoznawania usług Play > Moduł obsługi wersji > Aktualizuj , aby włączyć odpowiednie biblioteki DLL dla swojego projektu.
Kompilacja Unity 2017.1 IL2CPP w projektach .NET 4.x
Firebase obsługuje .NET 4.x jako eksperymentalną opcję kompilacji w Unity 2017 i nowszych. Wtyczki Firebase wykorzystują komponenty zestawu Parse SDK , aby udostępniać niektóre klasy platformy .NET 4.x we wcześniejszych wersjach platformy .NET.
W związku z tym zestaw Firebase Unity SDK w wersji 5.4.0 i nowszych udostępnia biblioteki DLL przekazujące typy, które przekazują typy analizy (na przykład Parse implementacja System.Threading.Tasks.Task
) do platformy .NET. Niestety, IL2CPP (transpiler, który konwertuje język C# na C++), który jest dostarczany w Unity 2017.1.x, nie przetwarza prawidłowo bibliotek DLL przekazujących typy, co skutkuje błędami kompilacji podobnymi do następujących:
Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>
Obecnie nie ma dostępnego obejścia dla błędów kompilacji programu .NET 4.x IL2CPP w środowisku Unity 2017.1, dlatego należy przeprowadzić uaktualnienie do aparatu Unity 2017.2 lub nowszego, aby używać programu .NET 4.x w projektach skompilowanych z IL2CPP.
Sieć Unity 2017.2
Baza danych czasu rzeczywistego Firebase tworzy połączenia sieciowe TLS przy użyciu stosu sieciowego .NET. Funkcjonalność TLS jest zepsuta w Unity 2017.2 podczas korzystania z platformy .NET 4.6, co powoduje awarię wtyczki bazy danych czasu rzeczywistego w edytorach i na komputerze.
Nie ma obejścia tego problemu, więc musisz użyć innej wersji Unity, na przykład wersji 2017.1 lub 2017.3.
Brak pliku konfiguracyjnego Firebase Android w Unity 2020
Aby obsługiwać wersje Unity, które nie mają możliwości dostosowywania kompilacji Gradle, narzędzie edytora Firebase generuje Assets/Plugins/Android/Firebase/res/values/google-services.xml
jako zasób Androida do spakowania w Kompilacja Androida, dzięki czemu zestaw Firebase SDK może jej użyć do zainicjowania domyślnej instancji FirebaseApp.
W Unity 2020 wszystkie zasoby systemu Android muszą znajdować się w katalogach z sufiksem .androidlib
. Jeśli Twój projekt korzysta z pakietu Firebase SDK, który generuje katalog Assets/Plugins/Android/Firebase
, zmień jego nazwę na Assets/Plugins/Android/Firebase.androidlib
. Upewnij się, że zawiera AndroidManifest.xml
, project.properties
i res/values/google-services.xml
.
Problem z pojedynczym dexem podczas budowania aplikacji na Androida
Podczas tworzenia aplikacji na Androida możesz napotkać błąd kompilacji związany z posiadaniem jednego pliku dex. Komunikat o błędzie wygląda podobnie do poniższego, jeśli twój projekt jest skonfigurowany do korzystania z systemu kompilacji Gradle.
Cannot fit requested classes in a single dex file.
Pliki Dalvik Executable ( .dex
) służą do przechowywania zestawu definicji klas i powiązanych z nimi danych pomocniczych dla aplikacji na Androida ( .apk
). Pojedynczy plik dex jest ograniczony do odniesienia do 65 536 metod. Kompilacja zakończy się niepowodzeniem, jeśli łączna liczba metod ze wszystkich bibliotek systemu Android w Twoim projekcie przekroczy ten limit.
Unity wprowadziło Minification w 2017.2, które wykorzystuje Proguard (lub inne narzędzia w niektórych wersjach Unity) do usuwania nieużywanego kodu, co może zmniejszyć całkowitą liczbę metod, do których się odwołuje, w jednym pliku dex. Opcję można znaleźć w Ustawieniach odtwarzacza > Android > Ustawienia publikowania > Minify . Opcje mogą się różnić w różnych wersjach Unity, więc zapoznaj się z oficjalną dokumentacją Unity.
Jeśli liczba przywoływanych metod nadal przekracza limit, inną opcją jest włączenie multidex
. Istnieje wiele sposobów osiągnięcia tego w Unity:
- Jeśli
Custom Gradle Template
wPlayer Settings
jest włączony, zmodyfikujmainTemplate.gradle
. - Jeśli używasz Android Studio do kompilowania wyeksportowanego projektu, zmodyfikuj plik
build.gradle
na poziomie modułu.
Więcej szczegółów można znaleźć w instrukcji obsługi multidexu .
Obsługa Java 8 i usuwanie cukrów dla kompilacji Androida w Unity 2017 i Unity 2018 (Firebase Unity SDK 8.0.0 i nowsze)
W maju 2021 r. (Firebase BoM v28.0.0) Firebase wyłączył usuwanie cukru we wszystkich swoich bibliotekach Androida (zobacz informacje o wersji ). Podczas tworzenia aplikacji na Androida za pomocą pakietu Firebase Unity SDK (8.0.0 lub nowszego) może zostać wyświetlony następujący 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 kompilacji systemu Android w Unity 2017 i Unity 2018. Nowsze wersje Unity domyślnie dodają blok compileOptions
w plikach kompilacji gradle. Aby naprawić ten błąd kompilacji w Unity 2017 i Unity 2018, wykonaj jedną z następujących czynności:
Dodaj blok
compileOptions
do swojego szablonu ocen:- Użyj
Gradle
jako systemu kompilacji. - Włącz
Custom Gradle Template
wPlayer Settings
. Dodaj następujące wiersze do
mainTemplate.gradle
(lubbuild.gradle
na poziomie modułu, jeśli eksportujesz projekt do Android Studio):android { compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } }
- Użyj
Ewentualnie zwiększ minSdkVersion dla swojego projektu Android do 26 lub więcej.
Zobacz także Rozwiązywanie problemów z systemem Android — usuwanie błędów kompilacji .
Problemy podczas budowania na iOS z Cocoapods
Podczas kompilowania dla systemu iOS instalacja Cocoapod może zakończyć się niepowodzeniem z powodu błędu dotyczącego ustawień regionalnych języka lub kodowania UTF-8. Obecnie istnieje kilka różnych sposobów obejścia tego problemu.
Z terminala uruchom bezpośrednio
pod install
i otwórz wynikowy plik xcworkspace.Zmień wersję Cocoapods na 1.10.2. Problem występuje tylko w wersji 1.11 i nowszych.
W swoim
~/.bash_profile
lub odpowiedniku dodajexport LANG=en_US.UTF-8
Jak zaktualizować wersję pakietów SDK Firebase Unity
Proces aktualizacji wersji pakietów SDK Firebase Unity zależy od tego, jak zostały one pierwotnie zaimportowane. Oto dwie alternatywne metody importu:
- Importowanie plików
.unitypackage
do kataloguAssets/
projektu - Importowanie za pomocą Unity Package Manager (UPM)
- Jest to zalecany sposób zarządzania pakietami w Unity 2018.4+.
- Użyj tej metody, aby ułatwić przyszłe aktualizacje wersji i wyczyścić
Assets/
katalog.
W swoim projekcie Unity powinieneś używać tylko jednej metody importu do zarządzania wszystkimi pakietami Firebase. Poniższe instrukcje mogą posłużyć nie tylko do aktualizacji wersji poszczególnych pakietów, ale także w razie potrzeby do migracji zarządzania pakietami do UPM (zalecana metoda importu).
Jeśli pakiety Firebase znajdują się w katalogu Assets/
, masz dwie opcje aktualizacji wersji SDK:
Opcja 1 (zalecana) : migracja do używania UPM (dostępna w Unity 2018.4+)
- Postępuj zgodnie z instrukcjami dostarczonymi przez Firebase, aby przeprowadzić migrację zarządzania pakietami do UPM .
- Chociaż ta metoda wymaga bardziej wstępnej konfiguracji niż dalsze korzystanie z przepływu pracy
.unitypackage
, opłaca się z łatwością kolejnych aktualizacji wersji SDK.
Opcja 2 : Kontynuuj używanie plików
.unitypackage
do importowania ich do kataloguAssets/
Zaimportuj każdy z pakietów dla zaktualizowanej wersji.
Jeśli pobierasz plik firebase_unity_sdk.zip z witryny sieci Web Firebase, upewnij się, że wszystkie
.unitypackages
zostały zaimportowane z odpowiedniego folderudotnet
.- Jeśli używasz aparatu Unity 2019 lub nowszego, zaimportuj z folderu
dotnet4
. - W przeciwnym razie wybierz opcję Scripting Runtime Version w Player Settings i jeśli jest ustawiona na ".NET 3.x", zaimportuj z folderu
dotnet3
.
- Jeśli używasz aparatu Unity 2019 lub nowszego, zaimportuj z folderu
Nadpisywanie wcześniej zaimportowanych wersji pakietów powinno być obsługiwane automatycznie przez Menedżera Zależności Zewnętrznych (który jest automatycznie dołączany podczas importowania
.unitypackages
Firebase).Jeśli jednak i TYLKO wtedy, gdy ten automatyczny proces się nie powiedzie, będziesz musiał ręcznie usunąć następujące foldery, a następnie ponownie spróbować wykonać powyższy krok importowania.
-
Assets/Editor Default Resources/Firebase
-
Assets/ExternalDependencyManager
-
Assets/Firebase
-
Assets/Parse
-
Assets/Plugins/iOS/Firebase
-
Jeśli pakiety Firebase są zarządzane przez firmę UPM, zaimportuj nowszą wersję pakietu SDK jako .tgz
. Ten import automatycznie zastąpi poprzednią wersję.