Risoluzione dei problemi e; Domande frequenti su Unity e Firebase

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

Hai altre sfide o non vedi il tuo problema descritto di seguito? Assicurati di consultare le domande frequenti principali di Firebase per ulteriori domande frequenti su Firebase o specifiche del prodotto.

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

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

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

Se importi un plug-in Firebase che non è compatibile con la versione .NET abilitata nel tuo progetto, vedrai errori di compilazione di alcuni tipi nel framework .NET implementati da Parse SDK.

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

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

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

  1. Rimuovi o disabilita le seguenti DLL per tutte le piattaforme:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. Abilita 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 su Asset > Play Services Resolver > Gestore versione > Aggiorna per abilitare le DLL corrette per il tuo progetto.

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

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

Pertanto, Firebase Unity SDK versione 5.4.0 e successive fornisce DLL di inoltro dei tipi che inoltrano i tipi Parse (ad esempio, l'implementazione Parse di System.Threading.Tasks.Task ) al framework .NET. Sfortunatamente, 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 provoca 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 di .NET 4.x IL2CPP in Unity 2017.1, quindi è necessario eseguire l'aggiornamento a Unity 2017.2 o versione successiva per utilizzare .NET 4.x nei progetti compilati con IL2CPP.

Rete Unity 2017.2

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

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

File di configurazione Android Firebase mancante in Unity 2020

Per supportare le versioni di Unity che non hanno la possibilità di personalizzare la build Gradle, lo strumento editor Firebase genera Assets/Plugins/Android/Firebase/res/values/google-services.xml come risorsa Android da inserire in un pacchetto Build Android, in modo che l'SDK di Firebase possa utilizzarlo per inizializzare l'istanza FirebaseApp predefinita.

In Unity 2020, tutte le risorse Android devono trovarsi in directory con 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 creazione dell'app Android

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

Cannot fit requested classes in a single dex file.

I file eseguibili Dalvik ( .dex ) vengono utilizzati per contenere una serie di definizioni di classi e i relativi dati aggiuntivi associati per le applicazioni Android ( .apk ). Un singolo file dex è limitato a fare riferimento a 65.536 metodi. La compilazione fallirà se il numero totale di metodi di tutte le librerie Android nel tuo progetto supera questo limite.

Unity ha introdotto Minification nel 2017.2, che utilizza Proguard (o altri strumenti in alcune versioni di Unity) per eliminare il codice inutilizzato, riducendo così il numero totale di metodi a cui si fa riferimento in un singolo file dex. L'opzione è disponibile in Impostazioni lettore > Android > Impostazioni di pubblicazione > Minimizza . Le opzioni potrebbero differire a seconda della versione di Unity, quindi fare riferimento alla documentazione ufficiale di Unity.

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

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

Maggiori dettagli possono essere trovati nella guida utente multidex .

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

Nel maggio 2021 (Firebase BoM v28.0.0), Firebase ha disabilitato il desugaring per tutte le sue librerie Android (vedi nota di rilascio ). Quando crei un'app Android con Firebase Unity SDK (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 Android in Unity 2017 e Unity 2018. Le versioni più recenti di Unity aggiungono il blocco compileOptions per impostazione predefinita nei file di build di Gradle. Per correggere questo errore di compilazione in Unity 2017 e Unity 2018, effettuare una delle seguenti operazioni:

  • Aggiungi un blocco compileOptions al tuo modello Gradle:

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

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • In alternativa, aumenta la minSdkVersion per il tuo progetto Android a 26 o superiore.

Vedi anche Risoluzione dei problemi Android: rimozione degli errori di compilazione .

Problemi durante la creazione per iOS con Cocoapods

Durante la creazione per iOS, l'installazione di Cocoapod potrebbe non riuscire con un errore relativo alle impostazioni locali della lingua o alla codifica UTF-8. Attualmente esistono diversi modi per aggirare il problema.

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

  • Downgrade della versione di Cocoapods alla 1.10.2. Il problema esiste solo nella versione 1.11 e successive.

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

Come aggiornare la versione degli SDK Firebase Unity

Il processo di aggiornamento delle versioni degli SDK Firebase Unity dipende da come sono state inizialmente importate. Ecco i due metodi di importazione alternativi:

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

Nel tuo progetto Unity, dovresti utilizzare un solo metodo di importazione per gestire tutti i tuoi pacchetti Firebase. Le istruzioni seguenti possono essere utilizzate non solo per aggiornare la versione dei singoli pacchetti, ma anche, se necessario, per migrare la gestione dei pacchetti su UPM (il metodo di importazione consigliato).