Połącz aplikację z emulatorem Cloud Storage dla Firebase

Zanim połączysz aplikację z emulatorem Cloud Storage for Firebase, upewnij się że rozumiesz ogólny przepływ pracy Firebase Local Emulator Suite, oraz że zainstalujesz i skonfigurujesz Local Emulator Suite i zapoznasz się z jego poleceniami CLI.

Wybieranie projektu w Firebase

Firebase Local Emulator Suite emuluje produkty w jednym projekcie w Firebase.

Aby wybrać projekt, którego chcesz używać, przed uruchomieniem emulatorów wpisz w CLI polecenie firebase use w katalogu roboczym. Możesz też przekazać flagę --project do każdego polecenia emulatora.

Local Emulator Suite obsługuje emulację rzeczywistych projektów Firebase i demonstracyjnych projektów.

Typ projektu Funkcje Użycie z emulatorami
Rzeczywisty

Rzeczywisty projekt w Firebase to projekt, który został utworzony i skonfigurowany (najprawdopodobniej w Firebase konsoli).

Rzeczywiste projekty mają aktywne zasoby, takie jak instancje bazy danych, zasobniki pamięci masowej funkcje lub inne zasoby skonfigurowane w tym projekcie Firebase

Podczas pracy z rzeczywistymi projektami Firebase możesz uruchamiać emulatory dowolnych lub wszystkich obsługiwanych produktów.

W przypadku produktów, które nie są emulowane, Twoje aplikacje i kod będą wchodzić w interakcje z aktywnym zasobem (instancją bazy danych, zasobnikiem pamięci masowej, funkcją itp.).

Demonstracyjny

Demonstracyjny projekt w Firebase nie ma rzeczywistej konfiguracji Firebase ani aktywnych zasobów. Dostęp do tych projektów jest zwykle uzyskiwany za pomocą warsztatów programistycznych lub innych samouczków.

Identyfikatory projektów demonstracyjnych mają prefiks demo-.

Podczas pracy z demonstracyjnymi projektami Firebase Twoje aplikacje i kod wchodzą w interakcje z emulatorami tylko. Jeśli aplikacja spróbuje wejść w interakcję z zasobem dla którego nie jest uruchomiony emulator, kod się nie wykona.

Jeśli to możliwe, zalecamy używanie projektów demonstracyjnych. W ten sposób możesz zapewnić im dostęp do tych korzyści:

  • Łatwiejsza konfiguracja, ponieważ możesz uruchamiać emulatory bez tworzenia projektu w Firebase.
  • Większe bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła nieemulowane (produkcyjne) zasoby, nie będzie możliwości zmiany danych, użycia ani rozliczenia.
  • Lepsza obsługa offline, ponieważ nie musisz uzyskiwać dostępu do internetu, aby pobrać konfigurację pakietu SDK.
Cloud Functions

Instrumentowanie aplikacji do komunikacji z emulatorami

Pakiety SDK na Androida, platformy Apple i do aplikacji internetowych

Skonfiguruj ustawienia w aplikacji lub klasy testowe, aby wchodzić w interakcje z Cloud Storage for Firebase emulatorem w ten sposób.

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

Aby przetestować funkcje Cloud Functions wywoływane przez zdarzenia za pomocą emulatora, nie musisz wykonywać żadnych dodatkowych czynności.Cloud Storage for Firebase Gdy emulatory Cloud Storage for Firebase i Cloud Functions są uruchomione, automatycznie współpracują ze sobą.

Admin SDKs

Pakiety Firebase Admin SDK automatycznie łączą się z emulatorem Cloud Storage for Firebase , gdy ustawiona jest zmienna środowiskowa FIREBASE_STORAGE_EMULATOR_HOST:

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

Emulator Cloud Functions automatycznie wykrywa Cloud Storage for Firebase emulator, więc możesz pominąć ten krok podczas testowania integracji między Cloud Functions i Cloud Storage for Firebase emulatorami. Zmienna środowiskowa zostanie automatycznie ustawiona w przypadku pakietu Admin SDK w Cloud Storage for Firebase.

Jeśli chcesz, aby kod Admin SDK łączył się z udostępnionym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który został ustawiony za pomocą wiersza poleceń Firebase. Identyfikator projektu możesz przekazać bezpośrednio do initializeApp lub ustawić zmienną środowiskową GCLOUD_PROJECT.

Pakiet Admin SDK na Node.js
admin.initializeApp({ projectId: "your-project-id" });
Zmienna środowiskowa
export GCLOUD_PROJECT="your-project-id"

Importowanie i eksportowanie danych

Emulatory bazy danych i Cloud Storage for Firebase umożliwiają eksportowanie danych z uruchomionej instancji emulatora. Zdefiniuj podstawowy zestaw danych, który będzie używany w testach jednostkowych lub przepływach pracy ciągłej integracji, a następnie wyeksportuj go, aby udostępnić go zespołowi.

firebase emulators:export ./dir

W testach, po uruchomieniu emulatora, zaimportuj dane podstawowe.

firebase emulators:start --import=./dir

Możesz poinstruować emulator, aby eksportował dane po zamknięciu, podając ścieżkę eksportu lub po prostu używając ścieżki przekazanej do flagi --import.

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

Te opcje importowania i eksportowania danych działają też z poleceniem firebase emulators:exec. Więcej informacji znajdziesz w dokumentacji poleceń emulatora.

Różnice między emulatorem Cloud Storage for Firebase a środowiskiem produkcyjnym

W przypadku testowania aplikacji klienckich emulator Cloud Storage for Firebase jest niemal idealnie zgodny ze środowiskiem produkcyjnym pod względem obszaru interfejsu Firebase API. Wszystkie polecenia Firebase powinny działać w przypadku zwykłych pakietów Firebase SDK (do aplikacji internetowych, na Androida i platformy Apple).

W przypadku testowania aplikacji po stronie serwera istnieją ograniczenia. Pakiety Firebase Admin SDK korzystają z obszaru interfejsu Google Cloud API, a nie wszystkie punkty końcowe tego interfejsu są emulowane. Zasadniczo wszystko, co można zrobić za pomocą pakietów SDK klienta (przesyłanie lub usuwanie plików, pobieranie i ustawianie metadanych), jest też zaimplementowane do użytku w pakietach Admin SDK, ale nic więcej. Poniżej znajdziesz listę najważniejszych wykluczeń.

Różnice w porównaniu z Google Cloud Storage

Usługa Cloud Storage for Firebase w tym emulator Storage, udostępnia podzbiór funkcji Google Cloud Storage (GCS), które koncentrują się na obiektach pamięci masowej i są bardzo przydatne do tworzenia aplikacji Firebase. Cloud Storage for Firebase różni się od GCS w tych kwestiach:

  • Cloud Storage for Firebase nie obsługuje obecnie interfejsów API Bucket do tworzenia, wyświetlania, pobierania ani usuwania zasobników pamięci masowej.
  • Z interfejsu Google Cloud Storage Objects API obsługiwane są te metody: copy, delete, get, insert, list, patch, rewrite, update.

Cloud IAM

Pakiet emulatorów Firebase nie próbuje replikować ani respektować żadnych zachowań związanych z IAM. Emulatory przestrzegają podanych reguł zabezpieczeń Firebase, ale w sytuacjach, w których zwykle używa się IAM, np. do ustawienia konta usługi wywołującej Cloud Functions i tym samym uprawnień, emulator nie jest konfigurowalny i będzie używać ogólnodostępnego konta na komputerze dewelopera, podobnie jak w przypadku bezpośredniego uruchamiania skryptu lokalnego.

Powiadomienia Pub/Sub

Emulator Cloud Storage for Firebase nie jest zintegrowany z emulatorem Cloud Pub/Sub, dlatego nie obsługuje tworzenia kanałów ani powiadomień o zmianach obiektów pamięci masowej. Zalecamy bezpośrednie używanie Cloud Functions reguł Storage.

Metadane na poziomie zasobnika

Emulator Cloud Storage for Firebase nie obsługuje żadnej konfiguracji na poziomie zasobnika, w tym klasy pamięci masowej, konfiguracji CORS na poziomie zasobnika, etykiet ani zasad przechowywania. Firebase planuje z czasem poprawić tę obsługę.

Co dalej?

  • Wyselekcjonowany zestaw filmów i szczegółowych instrukcji z przykładami znajdziesz na playliście szkoleń na temat emulatorów Firebase: Firebase Emulators Training Playlist.
  • Funkcje wywoływane są typową integracją z Cloud Storage for Firebase, dowiedz się więcej o emulatorze Cloud Functions for Firebase w artykule Uruchamianie funkcji lokalnie.