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 creazione sperimentale in Unity 2017 e in un secondo momento. 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 tuo progetto Unity, vai a Asset > Risoluzione di Play Services > Gestore della versione > Aggiorna per abilitare 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 il tipo di inoltro DLL, generando errori di generazione che sono simili ai seguenti:

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

Non sono attualmente disponibili soluzioni alternative per gli errori di build IL2CPP .NET 4.x in Unity 2017.1, quindi è necessario eseguire l'upgrade a Unity 2017.2 o versione successiva per utilizzare .NET 4.x in di progetti compilati con IL2CPP.

Networking di Unity 2017.2

Firebase Realtime Database crea connessioni di rete TLS utilizzando la rete .NET stack. 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 su 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.

Manca il file di configurazione di Firebase per Android in Unity 2020

Per supportare versioni di Unity che non offrono la possibilità di personalizzare la build Gradle, lo strumento editor Firebase genera Assets/Plugins/Android/Firebase/res/values/google-services.xml come Android da pacchettizzare in una build Android, in modo che l'SDK Firebase possa usare per inizializzare l'istanza FirebaseApp predefinita.

In Unity 2020, tutte le risorse Android devono trovarsi in directory con un suffisso.androidlib. Se il progetto utilizza un SDK Firebase che genera 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 Single Dex durante la creazione dell'app per Android

Durante lo sviluppo di un'app per Android, potreste riscontrare errori di compilazione a causa 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 Dalvik Executable (.dex) vengono utilizzati per contenere un insieme di definizioni di classi e i relativi dati aggiuntivi associati per le app per Android (.apk). Un unico dex si limita a fare riferimento a 65.536 metodi. La build non riesce se il numero totale il numero di metodi di tutte le librerie Android nel tuo 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 variano a seconda della versione di Unity, quindi fai riferimento alla sezione documentazione.

Se il numero di metodi a cui viene fatto riferimento supera ancora il limite, un'altra opzione è attivare multidex. Esistono diversi modi per raggiungere questo obiettivo in Unity:

  • Se Custom Gradle Template in Player Settings è attivato, modifica mainTemplate.gradle.
  • Se usi Android Studio per creare il progetto esportato, modifica 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 (distinta base di Firebase v28.0.0), Firebase ha disattivato il desugaring per tutte le sue librerie Android (consulta la nota di rilascio). Quando crei un'app per Android con l'SDK Firebase Unity (8.0.0 e versioni successive), potresti visualizzare il seguente errore di build:

> 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 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 generazione in Unity 2017 e Unity 2018, procedi in uno dei seguenti modi:

  • Aggiungi un blocco compileOptions al modello di 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 livello di modulo build.gradle 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.

Vedi anche Risoluzione dei problemi di Android - Eliminazione degli errori di build.

Problemi durante la compilazione per iOS con Cocoapods

Quando sviluppi per iOS, l'installazione di Cocoapod potrebbe non riuscire e potrebbe restituire un errore relativo al lingua locale o 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 queste sono stati importati inizialmente. Ecco i due metodi di importazione alternativi:

  • Importare i file .unitypackage nella directory Assets/ del progetto
  • L'importazione viene eseguita utilizzando Gestore di pacchetti Unity (UPM)
    • Questo è il modo consigliato per gestire i pacchetti in Unity 2018.4 e versioni successive.
    • Utilizza questo metodo per semplificare gli aggiornamenti futuri della versione e il tuo Assets/ strumento di pulizia della 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 dei singoli pacchetti, ma anche, se necessario, per la migrazione la gestione dei contenuti in UPM (il metodo di importazione consigliato).