Dépannage et FAQ pour Unity et Firebase

Cette page propose des conseils et un dépannage pour les problèmes spécifiques à Unity que vous pourriez rencontrer lors de l'utilisation de Firebase.

Avez-vous d'autres défis ou ne voyez-vous pas votre problème décrit ci-dessous ? Assurez - vous de consulter la principale Firebase FAQ pour la FAQ plus pan-Firebase ou par produit.

Compatibilité .NET lors de l'utilisation de Unity 2017.x et versions ultérieures

Firebase prend en charge .NET 4.x en tant qu'option de construction expérimentale dans Unity 2017 et versions ultérieures. Plugins Firebase utilisent des composants du SDK Parse pour fournir certaines classes 4.x .NET dans les versions antérieures de .NET.

Par conséquent, l'unité Firebase SDK version 5.4.0 et plus tard fournir des plugins qui sont compatibles avec des 3.x .NET ou 4.x dans dotnet3 et dotnet4 répertoires de l'unité Firebase SDK.

Si vous importez un plug-in Firebase incompatible avec la version .NET activée dans votre projet, vous verrez des erreurs de compilation de certains types dans le framework .NET qui sont implémentés par le SDK Parse.

Pour résoudre l'erreur de compilation, si vous utilisez .NET 3.x :

  1. Supprimez ou désactivez les DLL suivantes pour toutes les plateformes :
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. Activez les DLL suivantes pour toutes les plateformes :
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

Pour résoudre l'erreur de compilation, si vous utilisez .NET 4.x :

  1. Supprimez ou désactivez les DLL suivantes pour toutes les plateformes :
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. Activez les DLL suivantes pour toutes les plateformes :
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

Si vous importez un autre plug-in Firebase :

  • Dans votre projet Unity, accédez à des actifs> Services Play résolveur> Version Handler> Mise à jour pour activer les DLL correctes pour votre projet.

Compilation Unity 2017.1 IL2CPP dans les projets .NET 4.x

Firebase prend en charge .NET 4.x en tant qu'option de construction expérimentale dans Unity 2017 et versions ultérieures. Plugins Firebase utilisent des composants du SDK Parse pour fournir certaines classes 4.x .NET dans les versions antérieures de .NET.

Par conséquent, l'unité Firebase SDK version 5.4.0 et fournit plus tard DLL de transfert de type qui acheminent les types Parse (par exemple, la mise en œuvre de Parse System.Threading.Tasks.Task ) au framework .NET. Malheureusement, IL2CPP (un transpileur qui convertit C# en C++) fourni dans Unity 2017.1.x ne traite pas correctement les DLL de transfert de type, ce qui entraîne des erreurs de génération semblables aux suivantes :

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

Aucune solution de contournement n'est actuellement disponible pour les erreurs de génération .NET 4.x IL2CPP dans Unity 2017.1, vous devez donc effectuer une mise à niveau vers Unity 2017.2 ou une version ultérieure pour utiliser .NET 4.x dans les projets compilés avec IL2CPP.

Réseau Unity 2017.2

Firebase Realtime Database crée des connexions réseau TLS à l'aide de la pile de mise en réseau .NET. La fonctionnalité TLS est interrompue dans Unity 2017.2 lors de l'utilisation de .NET 4.6, ce qui entraîne l'échec du plug-in Realtime Database dans les éditeurs et sur le bureau.

Il n'existe aucune solution de contournement pour ce problème, vous devez donc utiliser une version différente de Unity, par exemple la version 2017.1 ou 2017.3.

Fichier de configuration Android Firebase manquant dans Unity 2020

Pour les versions de support de l' unité qui n'ont pas la possibilité de personnaliser la construction Gradle, l'outil éditeur Firebase génère des Assets/Plugins/Android/Firebase/res/values/google-services.xml comme une ressource Android à emballer dans un Version Android, afin que le SDK Firebase puisse l'utiliser pour initialiser l'instance FirebaseApp par défaut.

Dans Unity 2020, toutes les ressources Android doivent être dans des répertoires avec un .androidlib suffixe. Si votre projet utilise un SDK Firebase qui génère un Assets/Plugins/Android/Firebase répertoire, renommez- Assets/Plugins/Android/Firebase.androidlib . Assurez - vous qu'il contient AndroidManifest.xml , project.properties et res/values/google-services.xml .

Un problème avec le dex unique lors de la création de l'application Android

Lors de la création d'une application Android, vous pouvez rencontrer un échec de génération lié au fait d'avoir un seul fichier dex. Le message d'erreur ressemble au suivant, si votre projet est configuré pour utiliser le système de génération Gradle.

Cannot fit requested classes in a single dex file.

Dalvik Executable ( .dex Les fichiers) sont utilisés pour maintenir un ensemble de définitions de classe et leurs données auxiliaires associées pour les applications Android ( .apk ). Un seul fichier dex est limité à la référence à 65 536 méthodes. La construction échouera si le nombre total de méthodes de toutes les bibliothèques Android de votre projet dépasse cette limite.

L' unité introduit Minification dans 2017,2, qui utilise Proguard (ou d' autres outils dans certaines versions de l' unité) pour dépouiller le code utilisé, ce qui peut réduire le nombre total de méthodes référencées dans un seul fichier dex. L'option peut être trouvée dans Paramètres du lecteur> Android> Edition Paramètres> rapetisser. Les options peuvent différer selon les différentes versions de Unity, reportez-vous donc à la documentation officielle de Unity.

Si le nombre de méthodes référencées dépasse toujours la limite, une autre option est de permettre multidex . Il existe plusieurs façons d'y parvenir dans Unity :

  • Si Custom Gradle Template sous Player Settings est activé, modifier mainTemplate.gradle .
  • Si vous utilisez Android Studio pour construire le projet exporté, modifier au niveau du module build.gradle fichier.

Plus de détails se trouvent dans le guide de l' utilisateur multidex .

Prise en charge et désagréage de Java 8 pour les versions Android dans Unity 2017 et Unity 2018 (Firebase Unity SDK 8.0.0 et versions ultérieures)

En mai 2021 (Firebase BoM v28.0.0), désucrage désactivé Firebase pour toutes ses bibliothèques Android (voir note de version ). Lors de la création d'une application Android avec le SDK Firebase Unity (8.0.0 et versions ultérieures), l'erreur de génération suivante peut s'afficher :

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

Ce changement affecte les builds Android dans Unity 2017 et Unity 2018 uniquement. Les nouvelles versions de Unity ajouter le compileOptions bloc par défaut dans les fichiers de construction Gradle. Pour corriger cette erreur de génération dans Unity 2017 et Unity 2018, effectuez l'une des opérations suivantes :

  • Ajouter un compileOptions bloc à votre modèle gradle:

    1. Utilisez Gradle comme le système de construction.
    2. Activer Custom Gradle Template sous Player Settings du Player Settings .
    3. Ajoutez les lignes suivantes à mainTemplate.gradle (ou niveau du module build.gradle si l' exportation d' un projet pour Android Studio):

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • Vous pouvez également augmenter le minSdkVersion pour votre projet Android à 26 ou plus.

Voir aussi dépannage Android - les échecs de construction désucrage .