Ta strona zawiera wskazówki i sposoby rozwiązywania problemów specyficznych dla Unity, które możesz napotkać podczas korzystania z Firebase.
Masz inne wyzwania lub nie widzisz swojego problemu opisanego poniżej? Pamiętaj, aby zapoznać się z głównymi często zadawanymi pytaniami dotyczącymi Firebase, aby uzyskać więcej często zadawanych pytań dotyczących Firebase lub konkretnych produktów.
Zgodność z platformą .NET podczas korzystania z Unity 2017.x i nowszych
Firebase obsługuje platformę .NET 4.x jako opcję kompilacji eksperymentalnej w Unity 2017 i nowszych wersjach. Wtyczki Firebase wykorzystują komponenty zestawu SDK Parse do udostępniania niektórych klas .NET 4.x we wcześniejszych wersjach .NET.
Dlatego pakiet Firebase Unity SDK 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
pakietu 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 zestaw SDK Parse.
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 zaimportujesz inną wtyczkę Firebase:
- W projekcie Unity przejdź do Zasoby > Narzędzie do rozpoznawania usług Play > Obsługa wersji > Aktualizuj , aby włączyć prawidłowe biblioteki DLL dla swojego projektu.
Kompilacja Unity 2017.1 IL2CPP w projektach .NET 4.x
Firebase obsługuje platformę .NET 4.x jako opcję kompilacji eksperymentalnej w Unity 2017 i nowszych wersjach. Wtyczki Firebase wykorzystują komponenty zestawu SDK Parse do udostępniania niektórych klas .NET 4.x we wcześniejszych wersjach .NET.
Dlatego zestaw SDK Firebase Unity w wersji 5.4.0 i nowszych udostępnia biblioteki DLL przekazywania typów, które przekazują typy analizy (na przykład implementacja analizy System.Threading.Tasks.Task
) do platformy .NET. Niestety, IL2CPP (transpiler konwertujący C# na C++) dostarczony w Unity 2017.1.x nie przetwarza poprawnie bibliotek DLL przekazujących typy, co powoduje błędy kompilacji podobne do następujących:
Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>
Obecnie nie jest dostępne obejście błędów kompilacji IL2CPP platformy .NET 4.x w Unity 2017.1, dlatego należy dokonać aktualizacji do wersji Unity 2017.2 lub nowszej, aby używać platformy .NET 4.x w projektach skompilowanych przy użyciu IL2CPP.
Sieć Unity 2017.2
Baza danych Firebase Realtime Database tworzy połączenia sieciowe TLS przy użyciu stosu sieciowego .NET. Funkcja TLS jest uszkodzona w Unity 2017.2 podczas korzystania z platformy .NET 4.6, co powoduje awarię wtyczki Realtime Database w edytorach i na komputerze.
Nie ma obejścia tego problemu, dlatego 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, który ma zostać spakowany w Kompilacja systemu Android, dzięki czemu zestaw SDK Firebase może go użyć do zainicjowania domyślnej instancji FirebaseApp.
W Unity 2020 wszystkie zasoby Androida muszą znajdować się w katalogach z sufiksem .androidlib
. Jeśli Twój projekt korzysta z pakietu SDK Firebase, 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 indeksem podczas tworzenia aplikacji na Androida
Podczas tworzenia aplikacji na Androida może wystąpić błąd kompilacji związany z posiadaniem pojedynczego pliku dex. Komunikat o błędzie wygląda podobnie do poniższego, jeśli projekt jest skonfigurowany do korzystania z systemu kompilacji Gradle.
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 dodatkowych dla aplikacji na Androida ( .apk
). Pojedynczy plik dex jest ograniczony do odniesień do 65 536 metod. Kompilacja nie powiedzie się, jeśli łączna liczba metod ze wszystkich bibliotek systemu Android w projekcie przekroczy ten limit.
Unity wprowadziło Minifikację w wersji 2017.2, która wykorzystuje Proguard (lub inne narzędzia w niektórych wersjach Unity) do usuwania nieużywanego kodu, co może zmniejszyć całkowitą liczbę metod odniesienia w jednym pliku dex. Opcję tę można znaleźć w Ustawieniach odtwarzacza > Android > Ustawienia publikowania > Minify . Opcje mogą się różnić w różnych wersjach Unity, dlatego zapoznaj się z oficjalną dokumentacją Unity.
Jeśli liczba odwoływanych metod nadal przekracza limit, inną opcją jest włączenie multidex
. W Unity można to osiągnąć na wiele sposobów:
- Jeśli w
Player Settings
włączonoCustom Gradle Template
, zmodyfikujmainTemplate.gradle
. - Jeśli do zbudowania wyeksportowanego projektu używasz Android Studio, zmodyfikuj plik
build.gradle
na poziomie modułu.
Więcej szczegółów można znaleźć w podręczniku użytkownika multidex .
Obsługa Java 8 i usuwanie cukru 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 dla wszystkich swoich bibliotek Androida (zobacz informacje o wersji ). Podczas tworzenia aplikacji na Androida przy użyciu pakietu Firebase Unity SDK (8.0.0 i nowszego) może pojawić się 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 Androida w Unity 2017 i Unity 2018. Nowsze wersje Unity domyślnie dodają blok compileOptions
w plikach kompilacji stopniowej. Aby naprawić ten błąd kompilacji w Unity 2017 i Unity 2018, wykonaj jedną z następujących czynności:
Dodaj blok
compileOptions
do szablonu gradle:- Użyj
Gradle
jako systemu kompilacji. - Włącz
Custom Gradle Template
wPlayer Settings
. Dodaj następujące linie 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
Alternatywnie zwiększ wartość minSdkVersion dla swojego projektu na Androida do 26 lub nowszej.
Zobacz także Rozwiązywanie problemów z Androidem — usuwanie błędów kompilacji .
Problemy podczas tworzenia systemu iOS przy użyciu Cocoapodów
Podczas tworzenia oprogramowania 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 powstały plik xcworkspace.Zmień wersję Cocoapods na 1.10.2. Problem występuje tylko w wersji 1.11 i nowszych.
W swoim
~/.bash_profile
lub jego odpowiedniku dodajexport LANG=en_US.UTF-8
Jak zaktualizować wersję zestawów SDK Firebase Unity
Proces aktualizacji wersji pakietów SDK Firebase Unity zależy od sposobu, w jaki zostały one pierwotnie zaimportowane. Oto dwie alternatywne metody importu:
- Importowanie plików
.unitypackage
do kataloguAssets/
projektu - Importowanie za pomocą Menedżera pakietów Unity (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 oczyścić katalog
Assets/
katalog.
W projekcie Unity powinieneś używać tylko jednej metody importu do zarządzania wszystkimi pakietami Firebase. Poniższe instrukcje można wykorzystać 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 możliwości aktualizacji wersji SDK:
Opcja 1 (zalecana) : Przeprowadź migrację, aby używać UPM (dostępne w Unity 2018.4+)
- Postępuj zgodnie z instrukcjami Firebase, aby przeprowadzić migrację zarządzania pakietami do UPM .
- Chociaż ta metoda wymaga więcej wstępnej konfiguracji niż dalsze korzystanie z przepływu pracy
.unitypackage
, opłaca się w postaci łatwości kolejnych aktualizacji wersji SDK.
Opcja 2 : Kontynuuj używanie plików
.unitypackage
w celu zaimportowania ich do kataloguAssets/
Zaimportuj każdy z pakietów dla zaktualizowanej wersji.
Jeśli pobierasz plik firebase_unity_sdk.zip ze strony Firebase, pamiętaj, aby zaimportować wszystkie
.unitypackages
z prawidłowego folderudotnet
.- Jeśli używasz Unity 2019 lub nowszego, zaimportuj z folderu
dotnet4
. - W przeciwnym razie wybierz opcję Wersja środowiska wykonawczego skryptów w Ustawieniach odtwarzacza i jeśli jest ustawiona na „.NET 3.x”, zaimportuj z folderu
dotnet3
.
- Jeśli używasz Unity 2019 lub nowszego, zaimportuj z folderu
Nadpisywanie wcześniej zaimportowanych wersji pakietów powinno być obsługiwane automatycznie przez Zewnętrznego Menedżera Zależności (który jest automatycznie dołączany podczas importowania pakietów Firebase
.unitypackages
).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 pakietami Firebase zarządza UPM, zaimportuj nowszą wersję SDK jako .tgz
. Ten import automatycznie zastąpi poprzednią wersję.