Verbinden Sie Ihre App mit dem Cloud Storage für Firebase Emulator

Bevor Sie Ihre App mit dem Cloud Storage für Firebase-Emulator verbinden, stellen Sie sicher, dass Sie den gesamten Workflow der Firebase Local Emulator Suite verstehen , dass Sie die Local Emulator Suite installieren und konfigurieren und ihre CLI-Befehle überprüfen.

Wählen Sie ein Firebase-Projekt

Die Firebase Local Emulator Suite emuliert Produkte für ein einzelnes Firebase-Projekt.

Um das zu verwendende Projekt auszuwählen, führen Sie vor dem Starten der Emulatoren in der CLI firebase use in Ihrem Arbeitsverzeichnis aus. Alternativ können Sie das Flag --project an jeden Emulatorbefehl übergeben.

Die Local Emulator Suite unterstützt die Emulation echter Firebase-Projekte und Demoprojekte .

Projekttyp Merkmale Verwendung mit Emulatoren
Real

Ein echtes Firebase-Projekt ist eines, das Sie erstellt und konfiguriert haben (höchstwahrscheinlich über die Firebase-Konsole).

Echte Projekte verfügen über Live-Ressourcen wie Datenbankinstanzen, Speicher-Buckets, Funktionen oder jede andere Ressource, die Sie für dieses Firebase-Projekt einrichten.

Wenn Sie mit echten Firebase-Projekten arbeiten, können Sie Emulatoren für einige oder alle unterstützten Produkte ausführen.

Bei allen Produkten, die Sie nicht emulieren, interagieren Ihre Apps und Ihr Code mit der Live- Ressource (Datenbankinstanz, Speicher-Bucket, Funktion usw.).

Demo

Ein Demo-Firebase-Projekt hat keine echte Firebase-Konfiguration und keine Live-Ressourcen. Der Zugriff auf diese Projekte erfolgt normalerweise über Codelabs oder andere Tutorials.

Projekt-IDs für Demoprojekte haben das Präfix demo- .

Wenn Sie mit Firebase-Demoprojekten arbeiten, interagieren Ihre Apps und Ihr Code nur mit Emulatoren. Wenn Ihre App versucht, mit einer Ressource zu interagieren, für die kein Emulator ausgeführt wird, schlägt dieser Code fehl.

Wir empfehlen Ihnen, nach Möglichkeit Demoprojekte zu verwenden. Zu den Vorteilen gehören:

  • Einfachere Einrichtung, da Sie die Emulatoren ausführen können, ohne jemals ein Firebase-Projekt zu erstellen
  • Höhere Sicherheit, denn wenn Ihr Code versehentlich nicht emulierte (Produktions-)Ressourcen aufruft, besteht keine Chance auf Datenänderung, Nutzung und Abrechnung
  • Bessere Offline-Unterstützung, da zum Herunterladen Ihrer SDK-Konfiguration kein Zugriff auf das Internet erforderlich ist.

Instrumentieren Sie Ihre App, um mit den Emulatoren zu kommunizieren

Android-, Apple-Plattformen und Web-SDKs

Richten Sie Ihre In-App-Konfiguration oder Testklassen wie folgt für die Interaktion mit dem Cloud Storage for Firebase-Emulator ein.

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);
Schnell
Storage.storage().useEmulator(withHost: "127.0.0.1", port: 9199)

Web modular API

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 namespaced API

var storage = firebase.storage();
if (location.hostname === "localhost") {
  // Point to the Storage emulator running on localhost.
  storage.useEmulator("127.0.0.1", 9199);
} 

Es ist keine zusätzliche Einrichtung erforderlich, um Cloud-Funktionen , die durch Cloud Storage for Firebase-Ereignisse ausgelöst werden, mit dem Emulator zu testen. Wenn die Cloud Storage for Firebase- und Cloud Functions-Emulatoren beide ausgeführt werden, arbeiten sie automatisch zusammen.

Admin-SDKs

Die Firebase Admin SDKs stellen automatisch eine Verbindung zum Cloud Storage für Firebase-Emulator her, wenn die Umgebungsvariable FIREBASE_STORAGE_EMULATOR_HOST festgelegt ist:

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

Beachten Sie, dass der Cloud Functions-Emulator den Cloud Storage for Firebase-Emulator automatisch erkennt, sodass Sie diesen Schritt überspringen können, wenn Sie Integrationen zwischen Cloud Functions und Cloud Storage for Firebase-Emulatoren testen. Die Umgebungsvariable wird automatisch für das Admin SDK in Cloud Storage für Firebase festgelegt.

Wenn Sie möchten, dass Ihr Admin-SDK-Code eine Verbindung zu einem gemeinsam genutzten Emulator herstellt, der in einer anderen Umgebung ausgeführt wird, müssen Sie dieselbe Projekt-ID angeben, die Sie mit der Firebase-CLI festgelegt haben . Sie können eine Projekt-ID direkt an initializeApp übergeben oder die Umgebungsvariable GCLOUD_PROJECT festlegen.

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
Umgebungsvariable
export GCLOUD_PROJECT="your-project-id"

Daten importieren und exportieren

Mit den Datenbank- und Cloud Storage for Firebase-Emulatoren können Sie Daten aus einer laufenden Emulatorinstanz exportieren. Definieren Sie einen Basisdatensatz zur Verwendung in Ihren Unit-Tests oder Continuous-Integration-Workflows und exportieren Sie ihn dann zur gemeinsamen Nutzung im Team.

firebase emulators:export ./dir

Importieren Sie in Tests beim Start des Emulators die Basisdaten.

firebase emulators:start --import=./dir

Sie können den Emulator anweisen, Daten beim Herunterfahren zu exportieren, indem Sie entweder einen Exportpfad angeben oder einfach den an das Flag --import übergebenen Pfad verwenden.

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

Diese Datenimport- und -exportoptionen funktionieren auch mit dem Befehl firebase emulators:exec . Weitere Informationen finden Sie in der Emulator-Befehlsreferenz .

Wie sich der Cloud Storage for Firebase-Emulator von der Produktion unterscheidet

Zum Testen von Client-Apps passt sich der Cloud Storage for Firebase-Emulator im Hinblick auf die Firebase-API-Oberfläche nahezu perfekt an die Produktion an. Es wird erwartet, dass alle Firebase-Befehle zwischen den regulären Firebase-SDKs (Web-, Android- und Apple-Plattformen) funktionieren.

Beim Testen serverseitiger Apps bestehen Einschränkungen. Die Firebase Admin SDKs nutzen die Google Cloud API-Oberfläche und nicht alle Endpunkte dieser API werden emuliert. Als Faustregel gilt, dass alles, was über die Client-SDKs erledigt werden kann (Dateien hochladen oder löschen, Metadaten abrufen und festlegen), auch für die Verwendung über die Admin-SDKs implementiert ist, alles darüber hinausgehende jedoch nicht. Bemerkenswerte Ausschlüsse sind unten aufgeführt.

Unterschiede zum Google Cloud Storage

Das Cloud Storage for Firebase-Produkt, einschließlich des Storage-Emulators, bietet eine Teilmenge der Google Cloud Storage (GCS)-Funktionalität mit Schwerpunkt auf Speicherobjekten, die für die Entwicklung von Firebase-Apps sehr nützlich ist. Cloud Storage für Firebase unterscheidet sich von GCS in folgenden Punkten:

  • Cloud Storage für Firebase unterstützt derzeit keine Bucket APIs zum Erstellen, Auflisten, Abrufen oder Löschen von Speicher-Buckets.
  • Von der Google Cloud Storage Objects API werden die folgenden Methoden unterstützt: copy , delete , get , insert , list , patch , rewrite , update .

Cloud-IAM

Die Firebase Emulator Suite versucht nicht, IAM-bezogenes Verhalten bei der Ausführung zu reproduzieren oder zu respektieren. Emulatoren halten sich an die bereitgestellten Firebase-Sicherheitsregeln, aber in Situationen, in denen IAM normalerweise verwendet wird, beispielsweise zum Festlegen von Cloud Functions, die ein Dienstkonto und damit Berechtigungen aufrufen, ist der Emulator nicht konfigurierbar und verwendet das global verfügbare Konto auf Ihrem Entwicklercomputer. Ähnlich wie die direkte Ausführung eines lokalen Skripts.

Pub/Sub-Benachrichtigungen

Der Cloud Storage for Firebase-Emulator lässt sich nicht in den Cloud Pub/Sub-Emulator integrieren und unterstützt daher nicht das Erstellen von Kanälen/Benachrichtigungen für Speicherobjektänderungen. Wir empfehlen die direkte Verwendung von Cloud Functions Storage-Triggern.

Metadaten auf Bucket-Ebene

Der Cloud Storage for Firebase-Emulator unterstützt keine Konfiguration auf Bucket-Ebene, einschließlich Speicherklasse, CORS-Konfiguration auf Bucket-Ebene, Labels oder Aufbewahrungsrichtlinien. Firebase beabsichtigt, diese Unterstützung im Laufe der Zeit zu verbessern.

Was als nächstes?

  • Eine kuratierte Reihe von Videos und detaillierten Anleitungsbeispielen finden Sie in der Firebase Emulators Training Playlist .
  • Da ausgelöste Funktionen eine typische Integration mit Cloud Storage for Firebase sind, erfahren Sie mehr über den Cloud Functions for Firebase-Emulator unter Funktionen lokal ausführen .