Risoluzione dei problemi e domande frequenti per Unity e Firebase

Questa pagina offre suggerimenti e indicazioni per la risoluzione dei problemi specifici di Unity che potresti riscontrare durante l'utilizzo di Firebase.

Hai altri problemi o non trovi il tuo problema descritto di seguito? Assicurati di consultare le domande frequenti principali su Firebase per altre domande frequenti generali o specifiche per prodotto.

Compatibilità con .NET quando si utilizza Unity 2017.x e versioni successive

Firebase supporta .NET 4.x come opzione di compilazione sperimentale in Unity 2017 e versioni successive. I plug-in Firebase utilizzano componenti dell'SDK Parse per fornire alcune classi .NET 4.x nelle versioni precedenti di .NET.

Pertanto, la versione 5.4.0 e successive dell'SDK Firebase Unity fornisce plug-in compatibili con .NET 3.x o .NET 4.x nelle directory dotnet3 e dotnet4 dell'SDK Firebase Unity.

Se importi un plug-in Firebase incompatibile con la versione di .NET attivata nel progetto, visualizzerai errori di compilazione di alcuni tipi nel framework .NET implementati dall'SDK Parse.

Per risolvere l'errore di compilazione, se utilizzi .NET 3.x:

  1. Rimuovi o disattiva le seguenti DLL per tutte le piattaforme:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. Attiva le seguenti DLL per tutte le piattaforme:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

Per risolvere l'errore di compilazione, se utilizzi .NET 4.x:

  1. Rimuovi o disattiva le seguenti DLL per tutte le piattaforme:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. Attiva le seguenti DLL per tutte le piattaforme:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

Se importi un altro plug-in Firebase:

  • Nel progetto Unity, vai a Asset > Play Services Resolver > Version Handler > Update per attivare le DLL corrette per il progetto.

Compilazione IL2CPP di Unity 2017.1 nei progetti .NET 4.x

Firebase supporta .NET 4.x come opzione di compilazione sperimentale in Unity 2017 e versioni successive. I plug-in Firebase utilizzano componenti dell'SDK Parse per fornire alcune classi .NET 4.x nelle versioni precedenti di .NET.

Pertanto, la versione 5.4.0 e successive dell'SDK Firebase Unity fornisce DLL di inoltro dei tipi che inoltrano i tipi Parse (ad esempio, l'implementazione di Parse di System.Threading.Tasks.Task) al framework .NET. Purtroppo, IL2CPP (un transpiler che converte C# in C++) fornito in Unity 2017.1.x non elabora correttamente le DLL di inoltro dei tipi, il che genera errori di compilazione simili ai seguenti:

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

Al momento non è disponibile alcuna soluzione alternativa per gli errori di compilazione IL2CPP di .NET 4.x in Unity 2017.1, quindi devi eseguire l'upgrade a Unity 2017.2 o versioni successive per utilizzare .NET 4.x nei progetti compilati con IL2CPP.

Networking di Unity 2017.2

Firebase Realtime Database crea connessioni di rete TLS utilizzando lo stack di rete .NET. La funzionalità TLS non funziona in Unity 2017.2 quando si utilizza .NET 4.6, causando il fallimento del plug-in Realtime Database negli editor e sul computer.

Non esiste una soluzione alternativa a questo problema, quindi devi utilizzare una versione diversa di Unity, ad esempio la versione 2017.1 o 2017.3.

File di configurazione di Firebase per Android mancante in Unity 2020

Per supportare le versioni di Unity che non hanno la possibilità di personalizzare la compilazione Gradle, lo strumento di modifica di Firebase genera Assets/Plugins/Android/Firebase/res/values/google-services.xml come risorsa Android da includere in una compilazione Android, in modo che l'SDK Firebase possa utilizzarla per inizializzare l'istanza FirebaseApp predefinita.

In Unity 2020, tutte le risorse Android devono trovarsi in directory con un suffisso.androidlib. Se il tuo progetto utilizza un SDK Firebase che genera una directory Assets/Plugins/Android/Firebase, rinominala in Assets/Plugins/Android/Firebase.androidlib. Assicurati che contenga AndroidManifest.xml, project.properties e res/values/google-services.xml.

Un problema con il singolo dex durante la compilazione dell'app per Android

Durante la compilazione dell'app per Android, potresti riscontrare un errore di compilazione relativo alla presenza di un singolo file dex. Se il progetto è configurato per utilizzare il sistema di compilazione Gradle, il messaggio di errore è simile al seguente.

Cannot fit requested classes in a single dex file.

I file eseguibili Dalvik (.dex) vengono utilizzati per contenere un insieme di definizioni di classi e i relativi dati aggiuntivi associati per le applicazioni Android (.apk). Un singolo file dex è limitato al riferimento a 65.536 metodi. La compilazione non andrà a buon fine se il numero totale di metodi di tutte le librerie Android del progetto supera questo limite.

Unity ha introdotto la minimizzazione nella versione 2017.2, che utilizza Proguard (o altri strumenti in alcune versioni di Unity) per rimuovere il codice inutilizzato, il che può ridurre il numero totale di metodi a cui si fa riferimento in un singolo file dex. L'opzione è disponibile in Impostazioni player > Android > Impostazioni di pubblicazione > Minimizza. Le opzioni possono essere diverse in base alla versione di Unity, quindi consulta la documentazione ufficiale di Unity.

Se il numero di metodi a cui viene fatto riferimento supera ancora il limite, un'altra opzione è attivare multidex. In Unity esistono diversi modi per farlo:

  • Se Custom Gradle Template in Player Settings è attivato, modifica mainTemplate.gradle.
  • Se utilizzi Android Studio per compilare il progetto esportato, modifica il file build.gradle a livello di modulo.

Maggiori dettagli sono disponibili nella guida dell'utente di MultiDex.

Supporto di Java 8 e desugaring per le build Android in Unity 2017 e Unity 2018 (SDK Firebase Unity 8.0.0 e versioni successive)

A maggio 2021 (versione 28.0.0 della distinta base di Firebase), Firebase ha disattivato il desugaring per tutte le sue librerie Android (vedi la release note). Quando crei un'app per Android con l'SDK Firebase Unity (8.0.0 e versioni successive), potresti visualizzare il seguente errore di compilazione:

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

Questa modifica interessa solo le build per Android in Unity 2017 e Unity 2018. Le versioni più recenti di Unity aggiungono il blocco compileOptions per impostazione predefinita nei file di compilazione di Gradle. Per correggere questo errore di compilazione in Unity 2017 e Unity 2018, esegui una delle seguenti operazioni:

  • Aggiungi un blocco compileOptions al modello gradle:

    1. Utilizza Gradle come sistema di compilazione.
    2. Attiva Custom Gradle Template in Player Settings.
    3. Aggiungi le seguenti righe a mainTemplate.gradle (o a build.gradle a livello di modulo se esporti un progetto per Android Studio):

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • In alternativa, aumenta il valore minSdkVersion del progetto Android a 26 o versioni successive.

Consulta anche Risoluzione dei problemi relativi ad Android: errori di compilazione di desugaring.

Problemi durante la compilazione per iOS con Cocoapods

Durante la compilazione per iOS, l'installazione di Cocoapod potrebbe non riuscire con un errore relativo alle impostazioni internazionali o alla codifica UTF-8. Al momento esistono diversi modi per ovviare al problema.

  • Dal terminale, esegui direttamente pod install e apri il file xcworkspace risultante.

  • Esegui il downgrade della versione di CocoaPods alla 1.10.2. Il problema si verifica solo nella versione 1.11 e successive.

  • In ~/.bash_profile o equivalente, aggiungi export LANG=en_US.UTF-8

Come aggiornare la versione degli SDK Firebase Unity

La procedura per aggiornare le versioni degli SDK Firebase Unity dipende da come sono stati inizialmente importati. Ecco i due metodi di importazione alternativi:

  • Importare i file .unitypackage nella directory Assets/ del progetto
  • Importazione utilizzando Unity Package Manager (UPM)
    • Questo è il modo consigliato per gestire i pacchetti in Unity 2018.4 e versioni successive.
    • Utilizza questo metodo per semplificare gli aggiornamenti delle versioni future e rendere più ordinata la Assets/ directory.

Nel progetto Unity, devi utilizzare un solo metodo di importazione per gestire tutti i pacchetti Firebase. Le istruzioni riportate di seguito possono essere utilizzate non solo per aggiornare la versione dei singoli pacchetti, ma anche, se necessario, per eseguire la migrazione della gestione dei pacchetti a UPM (il metodo di importazione consigliato).