Prima di connettere l'app all'emulatore Cloud Storage for Firebase, assicurati di comprendere il workflow generale Firebase Local Emulator Suite, di installare e configurare il Local Emulator Suite e di esaminare i relativi comandi CLI.
Scegliere un progetto Firebase
Il Firebase Local Emulator Suite emula i prodotti per un singolo progetto Firebase.
Per selezionare il progetto da utilizzare, prima di avviare gli emulatori, esegui firebase use nella CLI nella directory di lavoro. In alternativa, puoi passare
il --project flag a ogni comando dell'emulatore.
Local Emulator Suite supporta l'emulazione di progetti Firebase reali e progetti demo.
| Tipo di progetto | Funzionalità | Utilizzo con gli emulatori |
|---|---|---|
| Reale |
Un progetto Firebase reale è un progetto che hai creato e configurato (molto probabilmente tramite la Firebase console). I progetti reali hanno risorse live, come istanze di database, bucket di archiviazione, funzioni o qualsiasi altra risorsa configurata per quel progetto Firebase. |
Quando lavori con progetti Firebase reali, puoi eseguire emulatori per uno o tutti i prodotti supportati. Per tutti i prodotti che non stai emulando, le tue app e il tuo codice interagiranno con la risorsa live (istanza di database, bucket di archiviazione, funzione e così via). |
| Demo |
Un progetto Firebase demo non ha una configurazione Firebase reale e non ha risorse live. In genere, si accede a questi progetti tramite codelab o altri tutorial. Gli ID progetto per i progetti demo hanno il prefisso |
Quando lavori con progetti Firebase demo, le tue app e il tuo codice interagiscono con gli emulatori solo. Se la tua app tenta di interagire con una risorsa per cui non è in esecuzione un emulatore, il codice non verrà eseguito. |
Ti consigliamo di utilizzare i progetti demo, se possibile. I vantaggi includono:
- Configurazione più semplice, poiché puoi eseguire gli emulatori senza dover creare un progetto Firebase
- Maggiore sicurezza, poiché se il codice richiama accidentalmente risorse non emulate (di produzione), non c'è alcuna possibilità di modifica dei dati, utilizzo e fatturazione
- Migliore supporto offline, poiché non è necessario accedere a internet per scaricare la configurazione dell'SDK.
Strumentare l'app per comunicare con gli emulatori
SDK per Android, piattaforme Apple e web
Configura le classi di test o la configurazione in-app per interagire con l'emulatore Cloud Storage for Firebase come segue.
Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val storage = Firebase.storage storage.useEmulator("10.0.2.2", 9199)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseStorage storage = FirebaseStorage.getInstance(); storage.useEmulator("10.0.2.2", 9199);
Swift
Storage.storage().useEmulator(withHost: "127.0.0.1", port: 9199)
Web
const { getStorage, connectStorageEmulator } = require("firebase/storage"); const storage = getStorage(); if (location.hostname === "localhost") { // Point to the Storage emulator running on localhost. connectStorageEmulator(storage, "127.0.0.1", 9199); }
Web
var storage = firebase.storage(); if (location.hostname === "localhost") { // Point to the Storage emulator running on localhost. storage.useEmulator("127.0.0.1", 9199); }
Non è necessaria alcuna configurazione aggiuntiva per testare le Cloud Functions attivate dagli eventi Cloud Storage for Firebase utilizzando l'emulatore. Quando gli emulatori Cloud Storage for Firebase e Cloud Functions sono entrambi in esecuzione, funzionano automaticamente insieme.
Admin SDKs
Gli Firebase Admin SDK si connettono automaticamente all'Cloud Storage for Firebase
emulatore quando è impostata la variabile di ambiente FIREBASE_STORAGE_EMULATOR_HOST:
export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"
Tieni presente che l'emulatore Cloud Functions riconosce automaticamente l'emulatore Cloud Storage for Firebase, quindi puoi saltare questo passaggio quando testi le integrazioni tra Cloud Functions e Cloud Storage for Firebase emulatori. La variabile di ambiente verrà impostata automaticamente per l'SDK Admin in Cloud Storage for Firebase.
Se vuoi che il codice Admin SDK si connetta a un emulatore condiviso in esecuzione in un altro ambiente, devi specificare lo stesso ID progetto che hai impostato utilizzando l'interfaccia a riga di comando di Firebase.
Puoi passare un ID progetto direttamente a initializeApp o impostare la variabile di ambiente GCLOUD_PROJECT.
SDK Admin Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variabile di ambiente
export GCLOUD_PROJECT="your-project-id"
Importazione ed esportazione di dati
Gli emulatori di database e Cloud Storage for Firebase ti consentono di esportare i dati da un'istanza dell'emulatore in esecuzione. Definisci un insieme di dati di base da utilizzare nei test delle unità o nei workflow di integrazione continua, quindi esportalo per condividerlo con il team.
firebase emulators:export ./dirNei test, all'avvio dell'emulatore, importa i dati di base.
firebase emulators:start --import=./dirPuoi indicare all'emulatore di esportare i dati all'arresto, specificando un percorso di esportazione o semplicemente utilizzando il percorso passato al flag --import.
firebase emulators:start --import=./dir --export-on-exitQueste opzioni di importazione ed esportazione dei dati funzionano anche con il comando firebase emulators:exec. Per saperne di più, consulta il
riferimento ai comandi dell'emulatore.
Differenze tra l'emulatore Cloud Storage for Firebase e la produzione
Per il test delle app client, l'Cloud Storage for Firebase emulatore si allinea a produzione quasi perfettamente per quanto riguarda la superficie dell'API Firebase. È previsto che tutti i comandi Firebase funzionino tra gli SDK Firebase standard (piattaforme web, Android e Apple).
Per il test delle app lato server, esistono limitazioni. Gli SDK Admin di Firebase utilizzano la superficie dell'API Google Cloud e non tutti gli endpoint di questa API vengono emulati. In generale, tutto ciò che può essere fatto dagli SDK client (caricamento o eliminazione di file, recupero e impostazione di metadati) viene implementato anche per l'utilizzo dagli SDK Admin, ma non tutto il resto. Di seguito sono elencate le esclusioni più importanti.
Differenze rispetto a Google Cloud Storage
Il prodotto Cloud Storage for Firebase, incluso l'emulatore di Storage, fornisce un sottoinsieme delle funzionalità di Google Cloud Storage (GCS) incentrato sugli oggetti di archiviazione molto utile per lo sviluppo di app Firebase. Cloud Storage for Firebase differisce da GCS nei seguenti modi:
- Cloud Storage for Firebase al momento non supporta le API
Bucketper la creazione, l'elenco, il recupero o l'eliminazione dei bucket di archiviazione. - Dall'API Objects di Google Cloud Storage,
sono supportati i seguenti metodi:
copy,delete,get,insert,list,patch,rewrite,update.
Cloud IAM
Firebase Emulator Suite non tenta di replicare o rispettare alcun comportamento correlato a IAM per l'esecuzione. Gli emulatori rispettano le regole di sicurezza di Firebase fornite, ma nelle situazioni in cui normalmente viene utilizzato IAM, ad esempio per impostare il service account di chiamata di Cloud Functions e quindi le autorizzazioni, l'emulatore non è configurabile e utilizzerà l'account disponibile a livello globale sulla macchina dello sviluppatore, in modo simile all'esecuzione diretta di uno script locale.
Notifiche Pub/Sub
L'Cloud Storage for Firebase emulatore non si integra con l'emulatore Cloud Pub/Sub e pertanto non supporta la creazione di canali/notifiche per le modifiche degli oggetti di archiviazione. Ti consigliamo di utilizzare Cloud Functions direttamente i trigger di Storage.
Metadati a livello di bucket
L'Cloud Storage for Firebase emulatore non supporta alcuna configurazione a livello di bucket inclusi la classe di archiviazione, la configurazione CORS a livello di bucket, le etichette, o i criteri di conservazione. Firebase intende migliorare questo supporto nel tempo.
Cosa devo fare adesso?
- Per una serie di video e esempi pratici dettagliati, segui la playlist di formazione su Firebase Emulators.
- Poiché le funzioni attivate sono un'integrazione tipica con Cloud Storage for Firebase, scopri di più sull'emulatore Cloud Functions for Firebase in Eseguire le funzioni in locale.