Catch up on everthing we announced at this year's Firebase Summit. Learn more

Collega la tua app all'emulatore Cloud Firestore

Prima di collegare la vostra applicazione per l'emulatore cloud FireStore, assicurarsi che si capisce il flusso di lavoro complessivo Firebase locale emulatore Suite , e che si installa e si configura l'emulatore Suite locale e rivedere i suoi comandi CLI .

Scegli un progetto Firebase

Firebase Local Emulator Suite emula i prodotti per un singolo progetto Firebase.

Per selezionare il progetto per l'uso, prima di iniziare gli emulatori, nella corsa CLI firebase use nella vostra directory di lavoro. In alternativa, è possibile passare l' --project bandiera per ogni comando emulatore.

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

Tipo di progetto Caratteristiche Utilizzare con emulatori
Vero

Un vero progetto Firebase è 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 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 sono emulando, le applicazioni e il codice potranno interagire con la risorsa dal vivo (istanza di database, benna di immagazzinaggio, funzione, ecc).

Dimostrazione

Un progetto Firebase demo ha alcuna reale configurazione Firebase e senza risorse dal vivo. Questi progetti sono generalmente accessibili tramite codelab o altri tutorial.

Progetto ID per demo progetti hanno la demo- prefisso.

Quando si lavora con progetti dimostrativi Firebase, le applicazioni e il codice interagiscono solo con emulatori. Se la tua app tenta di interagire con una risorsa per la quale non è in esecuzione un emulatore, il codice avrà esito negativo.

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

  • Configurazione più semplice, poiché puoi eseguire gli emulatori senza mai creare un progetto Firebase
  • Maggiore sicurezza, poiché se il tuo codice richiama accidentalmente risorse (di produzione) non emulate, non c'è possibilità di modifica dei dati, utilizzo e fatturazione
  • Migliore supporto offline, poiché non è necessario accedere a Internet per scaricare la configurazione dell'SDK.

Configura la tua app per parlare con gli emulatori

Android, piattaforme Apple e Web SDK

Configura la configurazione in-app o prova le classi per interagire con Cloud Firestore come segue.

Android
        // 10.0.2.2 is the special IP address to connect to the 'localhost' of
        // the host computer from an Android emulator.
        FirebaseFirestore firestore = FirebaseFirestore.getInstance();
        firestore.useEmulator("10.0.2.2", 8080);

        FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setPersistenceEnabled(false)
                .build();
        firestore.setFirestoreSettings(settings);
Swift
let settings = Firestore.firestore().settings
settings.host = "localhost:8080"
settings.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Versione web 9

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, 'localhost', 8080);

Versione web 8

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}
ragnatela
// Initialize your Web app as described in the Get started for Web
// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}

Nessuna messa a punto supplementare è necessario per testare le funzioni cloud attivati da eventi Firestore utilizzando l'emulatore. Quando gli emulatori Firestore e Cloud Functions sono entrambi in esecuzione, funzionano automaticamente insieme.

SDK di amministrazione

L'amministratore SDK Firebase connettersi automaticamente al emulatore cloud FireStore quando il FIRESTORE_EMULATOR_HOST è impostato variabile d'ambiente:

export FIRESTORE_EMULATOR_HOST="localhost:8080"

Se il codice è in esecuzione all'interno delle funzioni cloud emulatore l'ID del progetto e altre configurazioni saranno impostati automaticamente quando si chiama initalizeApp .

Quando ti connetti all'emulatore Cloud Firestore da qualsiasi altro ambiente, dovrai specificare un ID progetto. È possibile passare un ID progetto per initializeApp direttamente o impostare la GCLOUD_PROJECT variabile d'ambiente. Tieni presente che non è necessario utilizzare il tuo vero ID progetto Firebase; l'emulatore Nuvola FireStore accetterà qualsiasi ID del progetto, fintanto che ha un formato valido .

SDK di amministrazione di Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variabile d'ambiente
export GCLOUD_PROJECT="your-project-id"

Cancella il tuo database tra i test

Production Firestore non fornisce alcun metodo SDK della piattaforma per svuotare il database, ma l'emulatore Firestore fornisce un endpoint REST specifico per questo scopo, che può essere chiamato da un passaggio di configurazione/smontaggio del framework di test, da una classe di test o dalla shell (ad es. , con curl ) prima di una prova viene dato il via. È possibile utilizzare questo approccio come alternativa alla semplice chiusura del processo di emulazione.

In un metodo appropriato, eseguire un'operazione DELETE HTTP, fornendo il vostro Firebase ProjectID, ad esempio firestore-emulator-example , al seguente punto finale:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Naturalmente, il tuo codice dovrebbe attendere la conferma REST che il flush è terminato o non è riuscito.

Puoi eseguire questa operazione dalla shell:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Dopo aver implementato un passaggio come questo, puoi sequenziare i tuoi test e attivare le tue funzioni con la certezza che i vecchi dati verranno eliminati tra le esecuzioni e stai utilizzando una nuova configurazione di test di base.

Importa ed esporta dati

Gli emulatori di database e Cloud Storage consentono di esportare dati da un'istanza dell'emulatore in esecuzione. Definisci un set di dati di base da utilizzare nei tuoi unit test o nei flussi di lavoro di integrazione continua, quindi esportalo per essere condiviso tra il team.

firebase emulators:export ./dir

Nei test, all'avvio dell'emulatore, importare i dati di base.

firebase emulators:start --import=./dir

È possibile indicare l'emulatore per esportare i dati in arresto, specificando un percorso di esportazione o semplicemente utilizzando il percorso passato al --import bandiera.

firebase emulators:start --import=./dir --export-on-exit

Queste opzioni di importazione ed esportazione dei dati lavorare con i firebase emulators:exec comando. Per di più, fare riferimento al riferimento comando emulatore .

Visualizza attività Regole di sicurezza

Durante l'elaborazione di prototipi e cicli di test, è possibile utilizzare strumenti di visualizzazione e report forniti da Local Emulator Suite.

Usa il monitoraggio delle richieste

L'emulatore Cloud Firestore ti consente di visualizzare le richieste dei client nell'interfaccia utente di Emulator Suite, inclusa la traccia della valutazione per le regole di sicurezza Firebase.

Aprire la> scheda Richieste FireStore per visualizzare la sequenza di valutazione dettagliata per ogni richiesta.

Monitoraggio delle richieste dell'emulatore Firestore che mostra le valutazioni delle regole di sicurezza

Visualizza i report di valutazione delle regole

Quando aggiungi regole di sicurezza al tuo prototipo, puoi eseguirne il debug con gli strumenti di debug di Local Emulator Suite.

Dopo aver eseguito una serie di test, puoi accedere ai rapporti sulla copertura dei test che mostrano come è stata valutata ciascuna delle tue regole di sicurezza.

Per ottenere i report, eseguire una query su un endpoint esposto sull'emulatore mentre è in esecuzione. Per una versione compatibile con il browser, utilizzare il seguente URL:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

Ciò suddivide le regole in espressioni e sottoespressioni su cui è possibile passare il mouse per ulteriori informazioni, incluso il numero di valutazioni e valori restituiti. Per la versione JSON non elaborata di questi dati, includi il seguente URL nella query:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

Qui, la versione HTML del report evidenzia le valutazioni che generano errori non definiti e con valori nulli:

In che modo l'emulatore Cloud Firestore differisce dalla produzione

L'emulatore Cloud Firestore tenta di replicare fedelmente il comportamento del servizio di produzione con alcune notevoli limitazioni.

Transazioni

L'emulatore attualmente non implementa tutti i comportamenti di transazione visti in produzione. Quando si testano funzionalità che implicano più scritture simultanee su un documento, l'emulatore potrebbe essere lento nel completare le richieste di scrittura. In alcuni casi, il rilascio dei blocchi può richiedere fino a 30 secondi. Considerare di regolare i timeout del test di conseguenza, se necessario.

Indici

L'emulatore non tiene traccia degli indici composti e invece eseguirà qualsiasi query valida. Assicurati di testare la tua app su un'istanza Cloud Firestore reale per determinare di quali indici avrai bisogno.

limiti

L'emulatore non applica tutti i limiti imposti in produzione. Ad esempio, l'emulatore può consentire transazioni che verrebbero rifiutate come troppo grandi dal servizio di produzione. Assicurati di familiarità con i limiti documentati e che si progetta la vostra applicazione per evitare in modo proattivo loro.

E dopo?