На этой странице представлены советы и способы устранения проблем, связанных с Unity, с которыми вы можете столкнуться при использовании Firebase.
У вас есть другие проблемы или вы не видите свою проблему, описанную ниже? Обязательно ознакомьтесь с основными часто задаваемыми вопросами по Firebase, чтобы получить дополнительные часто задаваемые вопросы по Firebase или конкретному продукту.
Совместимость .NET при использовании Unity 2017.x и более поздних версий.
Firebase поддерживает .NET 4.x в качестве экспериментального варианта сборки в Unity 2017 и более поздних версиях. Плагины Firebase используют компоненты Parse SDK для предоставления некоторых классов .NET 4.x в более ранних версиях .NET.
Таким образом, Firebase Unity SDK версии 5.4.0
и более поздних версий предоставляет плагины, совместимые с .NET 3.x или .NET 4.x, в каталогах dotnet3
и dotnet4
Firebase Unity SDK.
Если вы импортируете плагин Firebase, несовместимый с версией .NET, включенной в вашем проекте, вы увидите ошибки компиляции некоторых типов в .NET Framework, которые реализованы Parse SDK.
Чтобы устранить ошибку компиляции, если вы используете .NET 3.x:
- Удалите или отключите следующие библиотеки DLL для всех платформ:
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
- Включите следующие библиотеки DLL для всех платформ:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
Чтобы устранить ошибку компиляции, если вы используете .NET 4.x:
- Удалите или отключите следующие библиотеки DLL для всех платформ:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
- Включите следующие библиотеки DLL для всех платформ:
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
Если вы импортируете другой плагин Firebase:
- В своем проекте Unity перейдите в «Активы» > «Play Services Resolver» > «Обработчик версий» > «Обновить», чтобы включить правильные библиотеки DLL для вашего проекта.
Компиляция Unity 2017.1 IL2CPP в проектах .NET 4.x
Firebase поддерживает .NET 4.x в качестве экспериментального варианта сборки в Unity 2017 и более поздних версиях. Плагины Firebase используют компоненты Parse SDK для предоставления некоторых классов .NET 4.x в более ранних версиях .NET.
Таким образом, Firebase Unity SDK версии 5.4.0 и более поздних версий предоставляет библиотеки DLL пересылки типов, которые перенаправляют типы Parse (например, реализацию Parse System.Threading.Tasks.Task
) в платформу .NET. К сожалению, IL2CPP (транспилятор, преобразующий C# в C++), поставляемый в Unity 2017.1.x, неправильно обрабатывает библиотеки DLL пересылки типов, что приводит к ошибкам сборки, подобным следующим:
Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>
В настоящее время не существует обходного пути для ошибок сборки .NET 4.x IL2CPP в Unity 2017.1, поэтому вам необходимо выполнить обновление до Unity 2017.2 или более поздней версии, чтобы использовать .NET 4.x в проектах, скомпилированных с помощью IL2CPP.
Сеть Unity 2017.2
Firebase Realtime Database создает сетевые соединения TLS, используя сетевой стек .NET. Функциональность TLS не работает в Unity 2017.2 при использовании .NET 4.6, что приводит к сбою плагина Realtime Database в редакторах и на рабочем столе.
Обхода этой проблемы не существует, поэтому вам необходимо использовать другую версию Unity, например версию 2017.1 или 2017.3.
Отсутствует файл конфигурации Firebase Android в Unity 2020
Чтобы поддерживать версии Unity, в которых нет возможности настраивать сборку Gradle, инструмент редактора Firebase генерирует Assets/Plugins/Android/Firebase/res/values/google-services.xml
в качестве ресурса Android для упаковки в файл Сборка Android, чтобы Firebase SDK мог использовать ее для инициализации экземпляра FirebaseApp по умолчанию.
В Unity 2020 все ресурсы Android должны находиться в каталогах с суффиксом .androidlib
. Если ваш проект использует Firebase SDK, который создает каталог Assets/Plugins/Android/Firebase
, переименуйте его в Assets/Plugins/Android/Firebase.androidlib
. Убедитесь, что он содержит AndroidManifest.xml
, project.properties
и res/values/google-services.xml
.
Проблема с одним дексом при создании приложения для Android.
При создании приложения для Android вы можете столкнуться со сбоем сборки, связанным с наличием одного файла dex. Сообщение об ошибке выглядит примерно так, как показано ниже, если ваш проект настроен на использование системы сборки Gradle.
Cannot fit requested classes in a single dex file.
Исполняемые файлы Dalvik ( .dex
) используются для хранения набора определений классов и связанных с ними дополнительных данных для приложений Android ( .apk
). Один файл dex может содержать только 65 536 методов. Сборка завершится неудачно, если общее количество методов из всех библиотек Android в вашем проекте превысит этот предел.
Unity представила минификацию в 2017.2, которая использует Proguard (или другие инструменты в некоторых версиях Unity) для удаления неиспользуемого кода, что может уменьшить общее количество ссылочных методов в одном dex-файле. Эту опцию можно найти в «Настройки проигрывателя» > «Android» > «Настройки публикации» > «Свернуть» . Параметры могут отличаться в разных версиях Unity, поэтому обратитесь к официальной документации Unity.
Если количество ссылочных методов по-прежнему превышает лимит, другой вариант — включить multidex
. В Unity есть несколько способов добиться этого:
- Если в
Player Settings
включенCustom Gradle Template
, изменитеmainTemplate.gradle
. - Если вы используете Android Studio для сборки экспортированного проекта, измените файл
build.gradle
на уровне модуля.
Более подробную информацию можно найти в руководстве пользователя multidex .
Поддержка Java 8 и очистка сборок Android в Unity 2017 и Unity 2018 (Firebase Unity SDK 8.0.0 и выше)
В мае 2021 года (Firebase BoM v28.0.0) Firebase отключила удаление сахара для всех своих библиотек Android (см. примечания к выпуску ). При создании приложения Android с помощью Firebase Unity SDK (8.0.0 и выше) вы можете увидеть следующую ошибку сборки:
> Error while dexing.
The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle
Это изменение касается только сборок Android в Unity 2017 и Unity 2018. В более новых версиях Unity по умолчанию в файлы сборки Gradle добавляется блок compileOptions
. Чтобы исправить эту ошибку сборки в Unity 2017 и Unity 2018, выполните одно из следующих действий:
Добавьте блок
compileOptions
в шаблон Gradle:- Используйте
Gradle
в качестве системы сборки. - Включите
Custom Gradle Template
вPlayer Settings
. Добавьте следующие строки в
mainTemplate.gradle
(илиbuild.gradle
уровня модуля при экспорте проекта для Android Studio):android { compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } }
- Используйте
Либо увеличьте minSdkVersion для вашего проекта Android до 26 или выше.
См. также Устранение неполадок Android — устранение сбоев сборки .
Проблемы при сборке для iOS с помощью Cocoapods
При сборке для iOS установка Cocoapod может завершиться неудачей из-за ошибки языкового стандарта или кодировки UTF-8. В настоящее время существует несколько различных способов решения этой проблемы.
Из терминала запустите
pod install
напрямую и откройте полученный файл xcworkspace.Понизьте версию Cocoapods до 1.10.2. Проблема существует только в версии 1.11 и новее.
В вашем файле
~/.bash_profile
или его эквиваленте добавьтеexport LANG=en_US.UTF-8
Как обновить версию Firebase Unity SDK
Процесс обновления версий Firebase Unity SDK зависит от того, как они были изначально импортированы. Вот два альтернативных метода импорта:
- Импорт файлов
.unitypackage
в каталогAssets/
вашего проекта. - Импорт с помощью диспетчера пакетов Unity (UPM)
- Это рекомендуемый способ управления пакетами в Unity 2018.4+.
- Используйте этот метод, чтобы упростить обновление будущих версий и очистить каталог
Assets/
.
В вашем проекте Unity вам следует использовать только один метод импорта для управления всеми вашими пакетами Firebase. Приведенные ниже инструкции можно использовать не только для обновления версий отдельных пакетов, но и, при необходимости, для переноса управления пакетами в UPM (рекомендуемый метод импорта).
Если пакеты Firebase находятся в каталоге Assets/
, у вас есть два варианта обновления версии SDK:
Вариант 1 (рекомендуется) : перейти на использование UPM (доступно в Unity 2018.4+).
- Следуйте инструкциям Firebase, чтобы перенести управление пакетами в UPM .
- Хотя этот метод требует больше начальной настройки, чем дальнейшее использование рабочего процесса
.unitypackage
, он окупается простотой последующих обновлений версий SDK.
Вариант 2. Продолжайте использовать файлы
.unitypackage
для их импорта в каталогAssets/
Импортируйте каждый из пакетов для обновленной версии.
Если вы загружаете firebase_unity_sdk.zip с веб-сайта Firebase, убедитесь, что вы импортируете все
.unitypackages
из правильной папкиdotnet
.- Если вы используете Unity 2019 или более позднюю версию, импортируйте из папки
dotnet4
. - В противном случае выберите «Версия среды выполнения сценариев» в настройках проигрывателя и, если для нее установлено значение «.NET 3.x», импортируйте из папки
dotnet3
.
- Если вы используете Unity 2019 или более позднюю версию, импортируйте из папки
Перезапись ранее импортированных версий пакетов должна выполняться автоматически Диспетчером внешних зависимостей (который автоматически включается при импорте пакетов Firebase
.unitypackages
).Однако, если и ТОЛЬКО если этот автоматический процесс завершится неудачно, вам придется вручную удалить следующие папки, а затем повторить описанный выше шаг импорта еще раз.
-
Assets/Editor Default Resources/Firebase
-
Assets/ExternalDependencyManager
-
Assets/Firebase
-
Assets/Parse
-
Assets/Plugins/iOS/Firebase
-
Если пакеты Firebase управляются UPM, импортируйте новую версию SDK как файл .tgz
. Этот импорт автоматически перезапишет предыдущую версию.