Preguntas frecuentes y solución de problemas de Unity y Firebase

En esta página, se ofrecen sugerencias y solución de problemas específicos de Unity que pueden ocurrir mientras usas Firebase.

¿Tienes otras dificultades o tu problema no se describe en esta página? Asegúrate de consultar las Preguntas frecuentes principales de Firebase para obtener más información general o específica sobre Firebase.

Compatibilidad de .NET con Unity 2017.x y versiones posteriores

En Unity 2017 y versiones posteriores, Firebase admite .NET 4.x como opción de compilación experimental. Los complementos de Firebase usan componentes del SDK de Parse para proporcionar algunas clases de .NET 4.x en versiones anteriores de .NET.

Por lo tanto, el SDK de Firebase Unity 5.4.0 y versiones posteriores proporcionan complementos compatibles con .NET 3.x o .NET 4.x en sus directorios dotnet3 y dotnet4 del SDK de Firebase Unity.

Cuando importes un complemento de Firebase que no sea compatible con la versión de .NET habilitada en tu proyecto, verás errores de compilación de algunos tipos en .NET Framework que implementa el SDK de Parse.

Sigue estos pasos para solucionar el error de compilación si usas .NET 3.x:

  1. Quita o inhabilita los siguientes DLL para todas las plataformas:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. Habilita los siguientes DLL para todas las plataformas:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

Sigue estos pasos para solucionar el error de compilación si usas .NET 4.x:

  1. Quita o inhabilita los siguientes DLL para todas las plataformas:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. Habilita los siguientes DLL para todas las plataformas:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

Si importas otro complemento de Firebase, haz lo siguiente:

  • En el proyecto de Unity, navega hasta Assets > Play Services Resolver > Version Handler > Update a fin de habilitar los DLL correctos del proyecto.

Compilación Unity 2017.1 IL2CPP en proyectos .NET 4.x

En Unity 2017 y versiones posteriores, Firebase admite .NET 4.x como opción de compilación experimental. Los complementos de Firebase usan componentes del SDK de Parse para proporcionar algunas clases de .NET 4.x en versiones anteriores de .NET.

Por lo tanto, el SDK de Firebase Unity en su versión 5.4.0, y sus versiones posteriores, proporciona DLL de desvío que reenvían los tipos Parse (por ejemplo, implementación Parse de System.Threading.Tasks.Task) al framework de .NET. Lamentablemente, el IL2CPP (transpilador que convierte C# en C++) que incluye Unity 2017.1.x no procesa correctamente los DLL de desvío de tipos, lo que genera errores de compilación como el siguiente:

Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>

Todavía no hay una solución alternativa para los errores de compilación de .NET 4.x IL2CPP en Unity 2017.1., por lo que debes actualizar a Unity 2017.2 o una versión posterior a fin de usar .NET 4.x en los proyectos compilados con IL2CPP.

Herramientas de redes de Unity 2017.2

Firebase Realtime Database crea conexiones de red TLS con la pila de herramientas de redes de .NET. La función TLS presenta errores en Unity 2017.2 cuando se usa .NET 4.6, lo que causa que el complemento de Realtime Database falle en editores y en computadoras de escritorio.

No hay una solución alternativa para este problema, por lo que debes usar una versión diferente de Unity, como 2017.1 o 2017.3.

Falta el archivo de configuración de Firebase para Android en Unity 2020

Con el fin de admitir las versiones de Unity que no tienen la capacidad de personalizar la compilación de Gradle, la herramienta del editor de Firebase genera Assets/Plugins/Android/Firebase/res/values/google-services.xml como un recurso de Android para empaquetarse en una compilación de Android; por lo tanto, el SDK de Firebase puede usarlo para inicializar la instancia predeterminada de FirebaseApp.

En Unity 2020, todos los recursos de Android deben estar en directorios con un sufijo .androidlib. Si el proyecto usa un SDK de Firebase que genera un directorio Assets/Plugins/Android/Firebase, cámbiale el nombre a Assets/Plugins/Android/Firebase.androidlib. Asegúrate de que contenga AndroidManifest.xml, project.properties y res/values/google-services.xml.

Problema relacionado con tener un solo archivo dex durante la compilación de apps para Android

Cuando compilas una app para Android, es posible que experimentes una falla de compilación relacionada con un archivo dex único. El mensaje de error es similar al siguiente, si el proyecto está configurado para usar el sistema de compilación de Gradle.

Cannot fit requested classes in a single dex file.

Los archivos Dalvik Executable (.dex) se usan para contener un conjunto de definiciones de clase y sus datos adjuntos asociados de aplicaciones para Android (.apk). Un solo archivo dex se limita a la referencia a 65,536 métodos. La compilación fallará si la cantidad total de métodos de todas las bibliotecas de Android de tu proyecto supera este límite.

Unity agregó la reducción en su versión 2017.2, que usa ProGuard (y otras herramientas en algunas versiones de Unity) para quitar el código que no se utiliza, lo que puede reducir la cantidad total de métodos de referencia en un solo archivo dex. Esta opción se encuentra en Player Settings > Android > Publishing Settings > Minify. Las opciones pueden variar en distintas versiones de Unity, así que consulta la documentación oficial de Unity.

Si la cantidad de métodos a los que se hace referencia aún excede el límite, otra opción es habilitar multidex. Hay muchas formas de lograrlo en Unity:

  • Si Custom Gradle Template en Player Settings está habilitado, modifica mainTemplate.gradle.
  • Si usas Android Studio para compilar el proyecto exportado, modifica el archivo build.gradle de nivel de módulo.

Puedes encontrar más información en la guía del usuario de multidex.

Compatibilidad y expansión de sintaxis de Java 8 para compilaciones de Android en Unity 2017 y 2018 (SDK de Firebase Unity 8.0.0 y versiones posteriores)

En mayo de 2021 (versión 28.0.0 de la BoM de Firebase), Firebase inhabilitó la expansión de sintaxis para todas sus bibliotecas de Android (consulta las notas de la versión). Cuando compiles una app para Android con el SDK de Firebase Unity (8.0.0 y versiones posteriores), es posible que veas el siguiente error:

> Error while dexing.
 The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle

Este cambio afecta solo las compilaciones de Android en Unity 2017 y 2018. Las versiones más recientes de Unity agregan el bloque compileOptions de forma predeterminada en los archivos de compilación de Gradle. Para corregir este error de compilación en Unity 2017 y 2018, realiza una de las siguientes acciones:

  • Agrega un bloque compileOptions a tu plantilla de Gradle:

    1. Usa Gradle como sistema de compilación.
    2. Habilita Custom Gradle Template en Player Settings.
    3. Agrega las siguientes líneas a mainTemplate.gradle (o nivel de módulo build.gradle si exportas un proyecto para Android Studio):

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • Como alternativa, aumenta la minSdkVersion de tu proyecto de Android a 26 o más.

Consulta también Solución de problemas de Android: errores de compilación relacionados con la expansión de sintaxis.

Problemas relacionados con la compilación para iOS con CocoaPods

Cuando realices compilaciones para iOS, es posible que falle la instalación de CocoaPods debido a un error relacionado con la configuración regional del idioma o la codificación UTF-8. Actualmente, existen varias formas de solucionar el problema.

  • Desde la terminal, ejecuta pod install directamente y abre el archivo xcworkspace resultante.

  • Cambia la versión de CocoaPods a la 1.10.2. El problema solo existe en la versión 1.11 y en las posteriores.

  • En tu ~/.bash_profile o equivalente, agrega export LANG=en_US.UTF-8.

Cómo actualizar la versión de los SDK de Firebase Unity

El proceso para actualizar las versiones de los SDK de Firebase Unity depende de cómo se importaron inicialmente. A continuación, se muestran los dos métodos de importación alternativos:

  • Importa archivos .unitypackage en el directorio Assets/ de tu proyecto
  • Importa con Unity Package Manager (UPM)
    • Esta es la forma recomendada de administrar paquetes en Unity 2018.4+.
    • Usa este método para facilitar las futuras actualizaciones de versiones y limpiar tu directorio Assets/.

En tu proyecto de Unity, solo debes usar un método de importación para administrar todos tus paquetes de Firebase. Las siguientes instrucciones no solo pueden usarse para actualizar la versión de paquetes individuales, sino también para migrar la administración de paquetes a UPM (el método de importación recomendado) si es necesario.