App mit dem Cloud Storage for Firebase-Emulator verbinden

Bevor Sie Ihre App mit dem Cloud Storage for Firebase-Emulator verbinden, sollten Sie sich mit dem Firebase Local Emulator Suite-Workflow vertraut machen und Local Emulator Suite installieren und konfigurieren sowie die CLI-Befehle prüfen.

Firebase-Projekt auswählen

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

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

Local Emulator Suite unterstützt die Emulation von echten und Demo-Firebase-Projekten.

Projekttyp Funktionen Mit Emulatoren verwenden
Real

Ein echtes Firebase-Projekt ist ein Projekt, das Sie erstellt und konfiguriert haben, höchstwahrscheinlich über die Firebase Console.

Echte Projekte haben Liveressourcen wie Datenbankinstanzen, Speicher-Buckets, Funktionen oder andere Ressourcen, die Sie für dieses Firebase-Projekt eingerichtet haben.

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

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

Demo

Ein Firebase-Demoprojekt hat keine echte Firebase-Konfiguration und keine Liveressourcen. Normalerweise wird über Codelabs oder andere Tutorials auf diese Projekte zugegriffen.

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

Wenn Sie mit Demo-Firebase-Projekten 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 der Code fehl.

Wir empfehlen, nach Möglichkeit Demoprojekte zu verwenden. Die wichtigsten Vorteile:

  • Einfachere Einrichtung, da Sie die Emulatoren ausführen können, ohne ein Firebase-Projekt zu erstellen
  • Höhere Sicherheit, da bei versehentlichem Aufruf nicht emulierter (Produktions-)Ressourcen durch Ihren Code keine Daten geändert werden und es keine Nutzung und Abrechnung gibt
  • Bessere Offlineunterstützung, da kein Zugriff auf das Internet erforderlich ist, um die SDK-Konfiguration herunterzuladen.

App für die Kommunikation mit den Emulatoren instrumentieren

Android-, Apple-Plattformen und Web-SDKs

So richten Sie Ihre In-App-Konfiguration oder Testklassen ein, damit sie mit dem Cloud Storage for Firebase-Emulator interagieren:

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);
} 

Für den Test von Cloud-Funktionen, die durch Cloud Storage for Firebase-Ereignisse ausgelöst werden, ist keine zusätzliche Einrichtung erforderlich. Wenn die Cloud Storage for Firebase- und Cloud Functions-Emulatoren gleichzeitig ausgeführt werden, arbeiten sie automatisch zusammen.

Admin SDK Sek.

Die Firebase Admin SDK stellen automatisch eine Verbindung zum Cloud Storage for Firebase-Emulator her, wenn die Umgebungsvariable FIREBASE_STORAGE_EMULATOR_HOST festgelegt ist:

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

Der Cloud Functions-Emulator erkennt den Cloud Storage for Firebase-Emulator automatisch. Sie können diesen Schritt also überspringen, 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 for Firebase festgelegt.

Wenn Sie möchten, dass Ihr Admin SDK-Code eine Verbindung zu einem freigegebenen 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. Legen Sie einen Datenbestand als Referenz für Ihre Unit-Tests oder Continuous-Integration-Workflows fest und exportieren Sie ihn, um ihn für das Team freizugeben.

firebase emulators:export ./dir

Importieren Sie bei Tests beim Starten des Emulators die Baseline-Daten.

firebase emulators:start --import=./dir

Sie können den Emulator anweisen, beim Herunterfahren Daten zu exportieren. Geben Sie dazu entweder einen Exportpfad an oder verwenden Sie einfach den Pfad, der an das --import-Flag übergeben wird.

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

Diese Optionen für den Datenimport und ‑export funktionieren auch mit dem Befehl firebase emulators:exec. Weitere Informationen finden Sie in der Befehlsreferenz für den Emulator.

Unterschiede zwischen dem Cloud Storage for Firebase-Emulator und der Produktion

Beim Testen von Client-Apps entspricht der Cloud Storage for Firebase-Emulator in Bezug auf die Firebase API-Oberfläche fast genau der Produktion. Alle Firebase-Befehle sollten zwischen den regulären Firebase SDKs (Web, Android und Apple-Plattformen) funktionieren.

Beim Testen serverseitiger Apps gibt es Einschränkungen. Die Firebase Admin SDKs nutzen die Google Cloud API-Oberfläche. Nicht alle Endpunkte dieser API werden emuliert. Als Faustregel gilt: Alles, was über die Client-SDKs möglich ist (Dateien hochladen oder löschen, Metadaten abrufen und festlegen), kann auch über die Admin SDKs verwendet werden. Alles andere ist nicht möglich. Im Folgenden finden Sie einige Beispiele für ausgeschlossene Inhalte.

Unterschiede zu Google Cloud Storage

Das Cloud Storage for Firebase-Produkt, einschließlich des Speicheremulators, bietet eine Teilmenge der Funktionen von Google Cloud Storage (GCS), die sich auf Speicherobjekte konzentrieren und sehr nützlich für die Entwicklung von Firebase-Apps sind. Cloud Storage for Firebase unterscheidet sich in folgenden Punkten von GCS:

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

Cloud IAM

Die Firebase Emulator Suite versucht nicht, IAM-bezogenes Laufverhalten zu replizieren oder zu respektieren. Emulatoren halten sich an die bereitgestellten Firebase-Sicherheitsregeln. In Situationen, in denen normalerweise IAM verwendet würde, z. B. zum Festlegen des Dienstkontos und damit der Berechtigungen für Cloud Functions, ist der Emulator jedoch nicht konfigurierbar und verwendet das global verfügbare Konto auf Ihrem Entwicklercomputer, ähnlich wie beim direkten Ausführen eines lokalen Scripts.

Pub/Sub-Benachrichtigungen

Der Cloud Storage for Firebase-Emulator lässt sich nicht in den Cloud Pub/Sub-Emulator einbinden und unterstützt daher nicht das Erstellen von Kanälen/Benachrichtigungen für Änderungen an Speicherobjekten. Wir empfehlen, Cloud Functions-Speichertrigger direkt zu verwenden.

Metadaten auf Bucket-Ebene

Der Cloud Storage for Firebase-Emulator unterstützt keine Konfigurationen auf Bucket-Ebene, einschließlich Speicherklasse, CORS-Konfiguration auf Bucket-Ebene, Labels oder Aufbewahrungsrichtlinien. Firebase wird diesen Support im Laufe der Zeit verbessern.

Und jetzt?