Połącz swoją aplikację z Cloud Storage dla emulatora Firebase

Przed podłączeniem aplikacji do emulatora Cloud Storage for Firebase upewnij się, że rozumiesz ogólny przepływ pracy w pakiecie Firebase Local Emulator Suite oraz że instalujesz i konfigurujesz pakiet Local Emulator Suite oraz przeglądasz jego polecenia CLI .

Wybierz projekt Firebase

Pakiet Firebase Local Emulator Suite emuluje produkty dla pojedynczego projektu Firebase.

Aby wybrać projekt do użycia, przed uruchomieniem emulatorów, w CLI uruchom firebase use w swoim katalogu roboczym. Możesz też przekazać flagę --project do każdego polecenia emulatora.

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

Typ projektu Cechy Używaj z emulatorami
Prawdziwy

Prawdziwy projekt Firebase to taki, który utworzyłeś i skonfigurowałeś (najprawdopodobniej za pomocą konsoli Firebase).

Prawdziwe projekty mają aktywne zasoby, takie jak instancje baz danych, zasobniki pamięci, funkcje lub inne zasoby skonfigurowane dla tego projektu Firebase.

Pracując z prawdziwymi projektami Firebase, możesz uruchomić emulatory dla dowolnego lub wszystkich obsługiwanych produktów.

W przypadku wszystkich produktów, których nie emulujesz, Twoje aplikacje i kod będą wchodzić w interakcję z aktywnym zasobem (instancją bazy danych, zasobnikiem pamięci, funkcją itp.).

Próbny

Projekt demonstracyjny Firebase nie ma prawdziwej konfiguracji Firebase ani aktywnych zasobów. Dostęp do tych projektów można zwykle uzyskać za pośrednictwem ćwiczeń z programowania lub innych samouczków.

Identyfikatory projektów demonstracyjnych mają przedrostek demo- .

Podczas pracy z projektami demonstracyjnymi Firebase Twoje aplikacje i kod wchodzą w interakcję wyłącznie z emulatorami. Jeśli aplikacja podejmie próbę interakcji z zasobem, dla którego nie działa emulator, wykonanie kodu zakończy się niepowodzeniem.

W miarę możliwości zalecamy korzystanie z projektów demonstracyjnych. Korzyści obejmują:

  • Łatwiejsza konfiguracja, ponieważ możesz uruchomić emulatory bez tworzenia projektu Firebase
  • Większe bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła nieemulowane zasoby (produkcyjne), nie ma szans na zmianę danych, wykorzystanie i rozliczenie
  • Lepsza obsługa w trybie offline, ponieważ nie ma potrzeby dostępu do Internetu, aby pobrać konfigurację SDK.

Instrumentuj swoją aplikację, aby komunikowała się z emulatorami

Platformy Android, Apple i internetowe pakiety SDK

Skonfiguruj konfigurację w aplikacji lub klasy testowe do interakcji z emulatorem Cloud Storage for Firebase w następujący sposób.

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

Do testowania funkcji Cloud uruchamianych przez zdarzenia Cloud Storage dla Firebase za pomocą emulatora nie jest wymagana żadna dodatkowa konfiguracja. Gdy działają emulatory Cloud Storage for Firebase i Cloud Functions, automatycznie współpracują.

Pakiety SDK administratora

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

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

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

Jeśli chcesz, aby Twój kod Admin SDK łączył się ze współdzielonym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który ustawiłeś za pomocą interfejsu CLI Firebase . Możesz przekazać identyfikator projektu do bezpośredniego initializeApp lub ustawić zmienną środowiskową GCLOUD_PROJECT .

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

Importuj i eksportuj dane

Baza danych i emulatory Cloud Storage for Firebase umożliwiają eksport danych z działającej instancji emulatora. Zdefiniuj bazowy zestaw danych do wykorzystania w testach jednostkowych lub przepływach pracy ciągłej integracji, a następnie wyeksportuj go w celu udostępnienia zespołowi.

firebase emulators:export ./dir

W testach przy uruchomieniu emulatora importuj dane bazowe.

firebase emulators:start --import=./dir

Możesz poinstruować emulator, aby eksportował dane po zamknięciu, określają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 importu i eksportu danych działają również z poleceniem firebase emulators:exec . Więcej informacji można znaleźć w dokumentacji poleceń emulatora .

Czym emulator Cloud Storage for Firebase różni się od wersji produkcyjnej

Do testowania aplikacji klienckich emulator Cloud Storage for Firebase dopasowuje się do produkcji niemal idealnie pod względem powierzchni interfejsu Firebase API. Oczekuje się, że wszystkie polecenia Firebase będą działać między zwykłymi pakietami SDK Firebase (platformy internetowe, Android i Apple).

W przypadku testowania aplikacji po stronie serwera istnieją ograniczenia. Zestawy SDK Firebase Admin korzystają z interfejsu Google Cloud API i nie wszystkie punkty końcowe tego interfejsu API są emulowane. Ogólnie rzecz biorąc, wszystko, co można zrobić za pomocą pakietów SDK klienta (przesyłanie lub usuwanie plików, pobieranie i ustawianie metadanych), jest również implementowane do użytku z zestawów Admin SDK, ale wszystko poza tym nie jest. Poniżej wymieniono godne uwagi wyłączenia.

Różnice w stosunku do Google Cloud Storage

Produkt Cloud Storage for Firebase, w tym emulator Storage, zapewnia podzbiór funkcji Google Cloud Storage (GCS) skupiający się na obiektach pamięci masowej, co jest bardzo przydatne przy tworzeniu aplikacji Firebase. Cloud Storage dla Firebase różni się od GCS pod następującymi względami:

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

IAM w chmurze

Pakiet emulatora Firebase nie próbuje replikować ani szanować żadnych zachowań związanych z uprawnieniami podczas działania. Emulatory są zgodne z dostarczonymi regułami bezpieczeństwa Firebase, ale w sytuacjach, w których normalnie byłyby używane uprawnienia IAM, na przykład w celu ustawienia konta usługi wywołującej Cloud Functions, a tym samym uprawnień, emulator nie jest konfigurowalny i będzie korzystał z konta dostępnego globalnie na komputerze programisty, podobnie do bezpośredniego uruchamiania lokalnego skryptu.

Powiadomienia Pub/Sub

Emulator Cloud Storage for Firebase nie integruje się z emulatorem Cloud Pub/Sub i dlatego nie obsługuje tworzenia kanałów/powiadomień w przypadku zmian obiektów pamięci masowej. Zalecamy bezpośrednie użycie wyzwalaczy Cloud Functions Storage.

Metadane na poziomie zasobnika

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

Co następne?