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

На этой странице представлены советы и способы устранения проблем, связанных с 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:

  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 перейдите в «Активы» > «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 создает сетевые соединения TLS, используя сетевой стек .NET. Функциональность TLS не работает в Unity 2017.2 при использовании .NET 4.6, что приводит к сбою плагина базы данных реального времени в редакторах и на рабочем столе.

Обхода этой проблемы не существует, поэтому вам необходимо использовать другую версию 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:

    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 (UPM)
    • Это рекомендуемый способ управления пакетами в Unity 2018.4+.
    • Используйте этот метод, чтобы упростить обновление будущих версий и очистить каталог Assets/ .

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