Dépannage et amp; 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 difficultés ou votre problème ne figure pas 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 construction 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, le SDK Firebase Unity version 5.4.0 et ultérieure fournit des plugins compatibles avec .NET 3.x ou .NET 4.x dans les répertoires dotnet3 et dotnet4 du SDK Firebase Unity.

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 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 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 plugin Firebase :

  • Dans votre projet Unity, accédez à Actifs > 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 construction 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, le SDK Firebase Unity version 5.4.0 et versions ultérieures fournit des DLL de transfert de type qui transmettent les types d'analyse (par exemple, l'implémentation Parse de System.Threading.Tasks.Task ) au 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 construction ressemblant à 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 génération .NET 4.x IL2CPP dans Unity 2017.1. Vous devez donc effectuer une mise à niveau vers Unity 2017.2 ou 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'existe aucune solution de contournement à ce problème, vous devez donc utiliser une version différente d'Unity, par exemple la version 2017.1 ou 2017.3.

Fichier de configuration Firebase Android 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 à regrouper 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 portant le 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 création 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 au suivant, si votre projet est configuré pour utiliser le système de build 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 classe 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 les différentes 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, 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 désucrage 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é la désucération 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

Cette modification affecte uniquement les versions 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 build Gradle. Pour corriger cette erreur de build 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 construction.
    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 augmenter la valeur minSdkVersion de votre projet Android à 26 ou plus.

Voir également Dépannage Android - suppression des échecs de build .

Problèmes lors de la création pour iOS avec Cocoapods

Lors de la création pour iOS, l'installation de Cocoapod peut échouer avec une erreur concernant les paramètres régionaux de langue ou l'encodage UTF-8. Il existe actuellement plusieurs manières différentes 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 vers 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 dans le répertoire Assets/ de votre projet
  • Importation à l'aide d' Unity Package Manager (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 mises à jour des versions futures et pour 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 également, si nécessaire, pour migrer la gestion des packages vers UPM (la méthode d'importation recommandée).