Collega la tua app all'emulatore Cloud Storage for Firebase

Prima di connettere l'app all'emulatore Cloud Storage for Firebase, assicurati di aver compreso il flusso di lavoro Firebase Local Emulator Suite generale, di installare e configurare Local Emulator Suite e di rivedere i relativi comandi CLI.

Scegli un progetto Firebase

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 directory di lavoro in CLI. In alternativa, puoi passare il flag --project a ogni comando dell'emulatore.

Local Emulator Suite supporta l'emulazione di progetti Firebase reali e demo.

Tipo di progetto Funzionalità Utilizzo con emulatori
Reale

Un progetto Firebase reale è quello che hai creato e configurato (molto probabilmente tramite la console Firebase).

I progetti reali hanno risorse attive, come istanze di database, bucket di archiviazione, funzioni o qualsiasi altra risorsa configurata per il progetto Firebase.

Quando lavori con progetti Firebase reali, puoi eseguire emulatori per uno o tutti i prodotti supportati.

Per tutti i prodotti non emulati, 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 dimostrativo non ha una configurazione Firebase reale e non ha risorse attive. In genere, si accede a questi progetti tramite codelab o altri tutorial.

Gli ID progetto dei progetti demo hanno il prefisso demo-.

Quando utilizzi progetti Firebase di prova, le tue app e il tuo codice interagiscono solo con gli emulatori. Se la tua app tenta di interagire con una risorsa per la quale non è in esecuzione un emulatore, il codice non andrà a buon fine.

Ti consigliamo di utilizzare progetti demo, se possibile. I vantaggi includono:

  • Configurazione più semplice, dato che puoi eseguire gli emulatori senza mai creare un progetto Firebase
  • Maggiore sicurezza, poiché se il codice richiama accidentalmente risorse non emulate (di produzione), non esiste la possibilità che i dati vengano modificati, utilizzo e fatturazione
  • Migliore assistenza offline, poiché non è necessario accedere a internet per scaricare la configurazione dell'SDK.

Strumenti per l'app per comunicare con gli emulatori

Piattaforme Android, Apple e SDK web

Configura la configurazione in-app o le classi di test per interagire con l'emulatoreCloud Storage for Firebase come segue.

Kotlin+KTX
// 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 funzioni Cloud attivate da eventi Cloud Storage for Firebase utilizzando l'emulatore. Quando gli emulatori Cloud Storage for Firebase e Cloud Functions sono in esecuzione, funzionano automaticamente insieme.

Admin SDK s

I Firebase Admin SDK si connettono automaticamente all'emulatore Cloud Storage for Firebase 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 è automaticamente consapevole dell'emulatore Cloud Storage for Firebase, quindi puoi saltare questo passaggio quando testi le integrazioni tra gli emulatori Cloud Functions e Cloud Storage for Firebase. 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 un altro ambiente, devi specificare lo stesso ID progetto impostato utilizzando Firebase CLI. Puoi passare un ID progetto direttamente a initializeApp o impostare la variabile di ambiente GCLOUD_PROJECT.

SDK Node.js Admin
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 di emulatore in esecuzione. Definisci un set di dati di riferimento da utilizzare nei test di unità o nei flussi di lavoro di integrazione continua, quindi esportalo per condividerlo con il team.

firebase emulators:export ./dir

Nei test, all'avvio dell'emulatore, importa i dati di riferimento.

firebase emulators:start --import=./dir

Puoi 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-exit

Queste 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 testare le app client, l'emulatore Cloud Storage for Firebase si allinea alla produzione quasi perfettamente per quanto riguarda la superficie dell'API Firebase. Tutti i comandi Firebase dovrebbero funzionare tra gli SDK Firebase standard (piattaforme web, Android e Apple).

Esistono limitazioni per i test delle app lato server. Gli SDK Firebase Admin fanno uso dell'API Google Cloud e non tutti gli endpoint di questa API sono emulati. Come regola generale, tutto ciò che può essere fatto dagli SDK client (caricamento o eliminazione di file, recupero e impostazione di metadati) è 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 archiviazione, fornisce un sottoinsieme di funzionalità di Google Cloud Storage (GCS) incentrate sugli oggetti di archiviazione molto utili per lo sviluppo di app Firebase. Cloud Storage for Firebase si differenzia da GCS nei seguenti modi:

  • Cloud Storage for Firebase al momento non supporta le API Bucket per la creazione, la visualizzazione, l'ottenimento o l'eliminazione di bucket di archiviazione.
  • Nell'API Google Cloud Storage Objects, 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 all'IAM per l'esecuzione. Gli emulatori rispettano le Regole di sicurezza di Firebase fornite, ma nelle situazioni in cui normalmente verrebbe utilizzato IAM, ad esempio per impostare l'account di servizio che richiama Cloud Functions e quindi le autorizzazioni, l'emulatore non è configurabile e utilizzerà l'account disponibile a livello globale sulla tua macchina dello sviluppatore, in modo simile all'esecuzione diretta di uno script locale.

Notifiche Pub/Sub

L'emulatore Cloud Storage for Firebase non si integra con l'emulatore CloudPub/Sub e, pertanto, non supporta la creazione di canali/notifiche per le modifiche degli oggetti di archiviazione. Ti consigliamo di utilizzare direttamente Cloud Functions trigger di archiviazione.

Metadati a livello di bucket

L'emulatore Cloud Storage for Firebase non supporta nessuna configurazione a livello di bucket, tra cui classe di archiviazione, configurazione CORS a livello di bucket, etichette o criteri di conservazione. Firebase intende migliorare questo tipo di assistenza nel tempo.

Che cosa succede ora?