Dépannage et questions fréquentes pour Unity et Firebase

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

Vous rencontrez d'autres difficultés ou vous ne trouvez pas votre problème ci-dessous ? N'hésitez pas à consulter les questions fréquentes principales sur Firebase pour en savoir plus sur Firebase ou sur des questions spécifiques à un produit.

Compatibilité .NET lorsque vous utilisez Unity 2017.x ou version ultérieure

Firebase est compatible avec .NET 4.x en tant qu'option de compilation expérimentale dans Unity 2017 et versions ultérieures. Les plug-ins Firebase utilisent des composants du SDK Parse pour fournir certaines classes .NET 4.x dans les versions antérieures de .NET.

Par conséquent, la version 5.4.0 du SDK Unity Firebase et les versions ultérieures fournissent des plug-ins compatibles avec .NET 3.x ou .NET 4.x dans les répertoires dotnet3 et dotnet4 du SDK Unity Firebase.

Si vous importez un plug-in Firebase incompatible avec la version .NET activée dans votre projet, des erreurs de compilation s'afficheront pour certains types du framework .NET 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 plates-formes :
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. Activez les DLL suivantes pour toutes les plates-formes :
    • 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 plates-formes :
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. Activez les DLL suivantes pour toutes les plates-formes :
    • 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 à Assets (Éléments) > Play Services Resolver (Résolveur de services Play) > Version Handler (Gestionnaire de version) > Update (Mettre à jour) pour activer les DLL appropriées pour votre projet.

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

Firebase est compatible avec .NET 4.x en tant qu'option de compilation expérimentale dans Unity 2017 et versions ultérieures. Les plug-ins Firebase utilisent des composants du SDK Parse pour fournir certaines classes .NET 4.x dans les versions antérieures de .NET.

Par conséquent, le SDK Unity Firebase version 5.4.0 et ultérieure fournit des DLL de transfert de type qui transfèrent les types Parse (par exemple, l'implémentation de System.Threading.Tasks.Task) vers le framework .NET. Malheureusement, IL2CPP (un transpilateur 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 compilation semblables aux suivantes:

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

Il n'existe actuellement aucune solution de contournement pour les erreurs de compilation IL2CPP .NET 4.x dans Unity 2017.1. Vous devez donc passer à Unity 2017.2 ou version ultérieure pour utiliser .NET 4.x dans les projets compilés avec IL2CPP.

Mise en réseau d'Unity 2017.2

Firebase Realtime Database crée des connexions réseau TLS à l'aide de la pile réseau .NET. La fonctionnalité TLS est défectueuse dans Unity 2017.2 lorsque vous utilisez .NET 4.6, ce qui entraîne l'échec du plug-in Realtime Database dans les éditeurs et sur ordinateur.

Il n'existe aucune solution de contournement pour ce problème. Vous devez donc utiliser une autre version d'Unity, par exemple la version 2017.1 ou 2017.3.

Fichier de configuration Firebase Android manquant dans Unity 2020

Pour prendre en charge les versions d'Unity qui ne peuvent pas personnaliser la compilation Gradle, l'outil d'édition Firebase génère Assets/Plugins/Android/Firebase/res/values/google-services.xml en tant que ressource Android à empaqueter dans une compilation 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 se trouver dans des répertoires avec un suffixe .androidlib. Si votre projet utilise un SDK Firebase qui génère un répertoire Assets/Plugins/Android/Firebase, renommez-le en Assets/Plugins/Android/Firebase.androidlib. Assurez-vous qu'il contient AndroidManifest.xml, project.properties et res/values/google-services.xml.

Problème lié à un seul dex lors de la compilation d'une application Android

Lors de la compilation d'une application Android, vous pouvez rencontrer une erreur de compilation liée à la présence d'un seul fichier DEX. Le message d'erreur ressemble à celui-ci si votre projet est configuré pour utiliser le système de compilation Gradle.

Cannot fit requested classes in a single dex file.

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

Unity a introduit la minification en 2017.2. Elle utilise Proguard (ou d'autres outils dans certaines versions d'Unity) pour supprimer le code inutilisé, ce qui peut réduire le nombre total de méthodes référencées dans un seul fichier DEX. Vous trouverez cette option dans Player Settings > Android > Publishing Settings > Minify (Paramètres du lecteur > Android > Paramètres de publication > Minification). Les options peuvent varier selon les versions d'Unity. Reportez-vous donc à la documentation officielle d'Unity.

Si le nombre de méthodes référencées dépasse toujours la limite, vous pouvez également activer multidex. Pour ce faire, plusieurs méthodes s'offrent à vous dans Unity:

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

Pour en savoir plus, consultez le guide de l'utilisateur de MultiDex.

Compatibilité avec Java 8 et désucrage pour les builds Android dans Unity 2017 et Unity 2018 (SDK Unity Firebase 8.0.0 et versions ultérieures)

En mai 2021 (version 28.0.0 de la nomenclature Firebase Android), Firebase a désactivé le désucrage pour toutes ses bibliothèques Android (voir les notes de version). Lorsque vous créez une application Android avec le SDK Firebase Unity (version 8.0.0 ou ultérieure), l'erreur de compilation 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 ne concerne que les builds Android dans Unity 2017 et Unity 2018. Les versions plus récentes d'Unity ajoutent le bloc compileOptions par défaut dans les fichiers de compilation Gradle. Pour résoudre cette erreur de compilation dans Unity 2017 et Unity 2018, effectuez l'une des opérations suivantes:

  • Ajoutez un bloc compileOptions à votre modèle Gradle:

    1. Utilisez Gradle comme système de compilation.
    2. Activez Custom Gradle Template sous Player Settings.
    3. Ajoutez les lignes suivantes à mainTemplate.gradle (ou build.gradle au niveau du module si vous exportez un projet pour Android Studio):

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • Vous pouvez également définir la valeur minSdkVersion de votre projet Android sur 26 ou version ultérieure.

Consultez également la section Dépannage Android : échecs de désugarisation de la compilation.

Problèmes lors de la compilation pour iOS avec Cocoapods

Lors de la compilation pour iOS, l'installation de Cocoapod peut échouer avec une erreur concernant les paramètres régionaux de la langue ou l'encodage UTF-8. Il existe actuellement plusieurs façons de contourner ce problème.

  • Dans le terminal, exécutez directement pod install, puis ouvrez le fichier xcworkspace généré.

  • Revenez à la version 1.10.2 de CocoaPods. Ce problème n'existe que dans les versions 1.11 et ultérieures.

  • Dans votre ~/.bash_profile ou équivalent, ajoutez export LANG=en_US.UTF-8.

Mettre à jour la version des SDK Unity Firebase

La procédure de mise à jour des versions des SDK Unity Firebase dépend de la manière dont ils ont été importés initialement. Voici les deux autres méthodes d'importation:

  • Importer des fichiers .unitypackage dans le répertoire Assets/ de votre projet
  • Importer à l'aide du gestionnaire de paquets Unity (UPM)
    • Il s'agit de la méthode recommandée pour gérer les packages dans Unity 2018.4 et versions ultérieures.
    • Utilisez cette méthode pour faciliter les futures mises à jour de version et nettoyer votre répertoire Assets/.

Dans votre projet Unity, vous ne devez utiliser qu'une seule méthode d'importation pour gérer tous vos packages Firebase. Les instructions ci-dessous peuvent être utilisées non seulement pour mettre à jour la version de packages individuels, mais aussi, si nécessaire, pour migrer la gestion des packages vers UPM (méthode d'importation recommandée).