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.

Vous avez d'autres défis ou vous ne voyez pas votre problème décrit ci-dessous ? Assurez-vous de consulter la FAQ principale de Firebase pour plus de FAQ pan-Firebase ou spécifiques au 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 build expérimentale dans Unity 2017 et versions ultérieures. Les plugins Firebase utilisent des composants du SDK Parse pour fournir certaines classes .NET 4.x dans les versions antérieures de .NET.

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

Si vous importez un plugin Firebase qui est 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 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 > Play Services Resolver > Version Handler > Update pour activer les DLL appropriées 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 build expérimentale dans Unity 2017 et versions ultérieures. Les plugins 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 et ultérieure du SDK Firebase Unity fournit des DLL de transfert de type qui transfèrent les types Parse (par exemple, l'implémentation Parse de System.Threading.Tasks.Task ) au framework .NET. Malheureusement, IL2CPP (un transpileur qui convertit C# en C++) qui est livré dans Unity 2017.1.x ne traite pas correctement les DLL de transfert de type, ce qui entraîne des erreurs de construction qui ressemblent à ce qui suit :

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 disponible pour les erreurs de build .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 des projets compilés avec IL2CPP.

Mise en réseau 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 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'y a pas de 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

Afin de prendre en charge les versions d'Unity qui n'ont pas la possibilité de personnaliser la version 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 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 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 .

Un problème avec single dex lors de la création d'une application Android

Lors de la construction d'une application Android, vous pouvez rencontrer un échec de construction lié à la présence d'un seul fichier dex. Le message d'erreur ressemble à ce qui suit, si votre projet est configuré pour utiliser le système de génération Gradle.

Cannot fit requested classes in a single dex file.

Les fichiers Dalvik Executable ( .dex ) sont utilisés pour contenir un ensemble de définitions de classes et leurs données complémentaires 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.

Unity a introduit Minification en 2017.2, qui utilise Proguard (ou d'autres outils dans certaines versions de 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. L'option se trouve dans Paramètres du lecteur > Android > Paramètres de publication > Minify . Les options peuvent différer selon la version 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 consiste à activer multidex . Il existe plusieurs façons d'y parvenir dans Unity :

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

Plus de détails peuvent être trouvés dans le guide de l'utilisateur multidex .

Prise en charge et suppression de Java 8 pour les builds 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), Firebase a désactivé le désucrage pour toutes ses bibliothèques Android (voir la 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 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 affecte les builds Android dans Unity 2017 et Unity 2018 uniquement. Les versions plus récentes de Unity ajoutent le bloc compileOptions 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 :

  • Ajoutez un bloc compileOptions à votre modèle de progression :

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

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

Voir aussi Dépannage Android - Désucrage des échecs de build .

Problèmes lors de la construction pour iOS avec Cocoapods

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

  • Depuis le terminal, exécutez pod install directement et ouvrez le fichier xcworkspace résultant.

  • Rétrogradez la version de Cocoapods à 1.10.2. Le problème existe uniquement dans la version 1.11 et plus récente.

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

Comment mettre à jour la version des SDK Firebase Unity

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

  • Importation de fichiers .unitypackage sous le répertoire Assets/ de votre projet
  • Importation à l'aide du gestionnaire de packages Unity (UPM)
    • Il s'agit de la méthode recommandée pour gérer les packages dans Unity 2018.4+.
    • 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 des packages individuels, mais également, si nécessaire, pour migrer la gestion des packages vers UPM (la méthode d'importation recommandée).