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:
- Rimuovi o disabilita le seguenti DLL per tutte le piattaforme:
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
- 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:
- Rimuovi o disabilita le seguenti DLL per tutte le piattaforme:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
- 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
inPlayer Settings
è abilitato, modificamainTemplate.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:- Usa
Gradle
come sistema di compilazione. - Abilita
Custom Gradle Template
inPlayer Settings
. Aggiungi le seguenti righe a
mainTemplate.gradle
(obuild.gradle
a livello di modulo se esporti un progetto per Android Studio):android { compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } }
- Usa
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, aggiungiexport 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 directoryAssets/
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).
Se i pacchetti Firebase si trovano nella directory Assets/
, hai due opzioni per aggiornare la versione dell'SDK:
Opzione 1 (consigliata) : migrazione all'utilizzo di UPM (disponibile in Unity 2018.4+)
- Segui le istruzioni fornite da Firebase per eseguire la migrazione della gestione dei pacchetti a UPM .
- Sebbene questo metodo richieda una configurazione iniziale maggiore rispetto a continuare a utilizzare il flusso di lavoro
.unitypackage
, si ripaga con la facilità dei successivi aggiornamenti della versione dell'SDK.
Opzione 2 : continuare a utilizzare i file
.unitypackage
per importarli nella directoryAssets/
Importa ciascuno dei pacchetti per la versione aggiornata.
Se scarichi firebase_unity_sdk.zip dal sito Web Firebase, assicurati di importare tutti
.unitypackages
dalla cartelladotnet
corretta.- Se usi Unity 2019 o versioni successive, importa dalla cartella
dotnet4
. - In caso contrario, seleziona Versione runtime di scripting in Impostazioni lettore e, se è impostato su ".NET 3.x", importa dalla cartella
dotnet3
.
- Se usi Unity 2019 o versioni successive, importa dalla cartella
La sovrascrittura delle versioni del pacchetto precedentemente importate dovrebbe essere gestita automaticamente dal Gestore delle dipendenze esterno (che viene incluso automaticamente quando importi Firebase
.unitypackages
).Tuttavia, se e SOLO se questo processo automatico fallisce, dovrai eliminare manualmente le seguenti cartelle e quindi riprovare il passaggio di importazione precedente.
-
Assets/Editor Default Resources/Firebase
-
Assets/ExternalDependencyManager
-
Assets/Firebase
-
Assets/Parse
-
Assets/Plugins/iOS/Firebase
-
Se i pacchetti Firebase sono gestiti da UPM, importa la versione più recente dell'SDK come .tgz
. Questa importazione sovrascriverà automaticamente la versione precedente.