Устранение неполадок и усиление; Часто задаваемые вопросы по Unity и Firebase

На этой странице приведены советы и рекомендации по устранению неполадок, характерных для Unity, с которыми вы можете столкнуться при использовании Firebase.

У вас есть другие проблемы или вы не видите свою проблему в списке ниже? Обязательно ознакомьтесь с основным разделом FAQ Firebase, чтобы узнать больше FAQ по 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, которые реализованы Parse SDK.

Чтобы устранить ошибку компиляции, если вы используете .NET 3.x:

  1. Удалите или отключите следующие библиотеки DLL для всех платформ:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. Включите следующие библиотеки DLL для всех платформ:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

Чтобы устранить ошибку компиляции, если вы используете .NET 4.x:

  1. Удалите или отключите следующие библиотеки DLL для всех платформ:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. Включите следующие библиотеки DLL для всех платформ:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

Если вы импортируете другой плагин Firebase:

  • В проекте Unity перейдите в раздел Assets > Play Services Resolver > Version Handler > Update , чтобы включить нужные библиотеки 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 Framework. К сожалению, 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 .

Проблема с одним dex при сборке приложения для Android

При сборке приложения Android вы можете столкнуться с ошибкой сборки, связанной с наличием одного файла dex. Сообщение об ошибке выглядит примерно так, если ваш проект настроен на использование системы сборки Gradle.

Cannot fit requested classes in a single dex file.

Файлы Dalvik Executable ( .dex ) используются для хранения набора определений классов и связанных с ними дополнительных данных для приложений Android ( .apk ). Один файл dex ограничен ссылкой на 65 536 методов. Сборка завершится ошибкой, если общее количество методов из всех библиотек Android в вашем проекте превысит этот предел.

Unity представила Minification в 2017.2, которая использует Proguard (или другие инструменты в некоторых версиях Unity) для удаления неиспользуемого кода, что может сократить общее количество ссылочных методов в одном файле dex. Опцию можно найти в Player Settings > Android > Publishing Settings > Minify . Параметры могут отличаться в разных версиях 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 добавляют блок compileOptions по умолчанию в файлы сборки gradle. Чтобы исправить эту ошибку сборки в Unity 2017 и Unity 2018, выполните одно из следующих действий:

  • Добавьте блок compileOptions в ваш шаблон Gradle:

    1. Используйте Gradle в качестве системы сборки.
    2. Включите Custom Gradle Template в Player Settings .
    3. Добавьте следующие строки в 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 Package Manager (UPM)
    • Это рекомендуемый способ управления пакетами в Unity 2018.4+.
    • Используйте этот метод, чтобы упростить обновление будущих версий и сделать каталог Assets/ чище.

В вашем проекте Unity вам следует использовать только один метод импорта для управления всеми вашими пакетами Firebase. Инструкции ниже можно использовать не только для обновления версии отдельных пакетов, но и, при необходимости, для переноса управления пакетами в UPM (рекомендуемый метод импорта).