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

Przed połączeniem aplikacji z emulatorem Cloud Storage for Firebase upewnij się, że rozumiesz ogólny przepływ pracy Firebase Local Emulator Suite , że instalujesz i konfigurujesz Local Emulator Suite oraz przeglądasz jego polecenia CLI .

Wybierz projekt Firebase

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. Lub możesz 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 wszelkie inne zasoby skonfigurowane dla tego projektu Firebase.

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

W przypadku produktów, których nie emulujesz, Twoje aplikacje i kod będą wchodzić w interakcje z aktywnym zasobem (instancja bazy danych, zasobnik pamięci, funkcja itp.).

Próbny

Demonstracyjny projekt Firebase nie ma rzeczywistej konfiguracji Firebase ani aktywnych zasobów. Projekty te są zwykle dostępne za pośrednictwem laboratoriów kodów lub innych samouczków.

Identyfikatory projektów dla projektów demonstracyjnych mają przedrostek demo- .

Podczas pracy z demonstracyjnymi projektami Firebase aplikacje i kod współdziałają tylko z emulatorami . Jeśli Twoja aplikacja spróbuje wejść w interakcję z zasobem, dla którego nie działa emulator, ten kod zakończy się niepowodzeniem.

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

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

Przygotuj swoją aplikację do komunikowania się z emulatorami

Platformy Android, Apple i Web 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 for Firebase za pomocą emulatora nie jest wymagana żadna dodatkowa konfiguracja. Kiedy oba emulatory Cloud Storage for Firebase i Cloud Functions są uruchomione, automatycznie współpracują ze sobą.

Pakiety SDK administratora

Pakiety SDK Firebase Admin 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"

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ę z udostępnionym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który ustawiłeś za pomocą Firebase CLI . Możesz przekazać identyfikator projektu bezpośrednio do 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ą eksportowanie danych z działającej instancji emulatora. Zdefiniuj podstawowy zestaw danych do wykorzystania 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 podczas uruchamiania emulatora zaimportuj dane linii bazowej.

firebase emulators:start --import=./dir

Możesz poinstruować emulator, aby wyeksportował dane podczas zamykania, 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 . Aby uzyskać więcej informacji, zapoznaj się z dokumentacją poleceń emulatora .

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

W przypadku testowania aplikacji klienckich emulator Cloud Storage for Firebase prawie idealnie dopasowuje się do środowiska produkcyjnego 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. Pakiety SDK Firebase Admin korzystają z interfejsu Google Cloud API i nie wszystkie punkty końcowe tego interfejsu API są emulowane. Z reguły wszystko, co można zrobić z pakietów SDK klienta (przesyłanie lub usuwanie plików, pobieranie i ustawianie metadanych), jest również implementowane do użytku z pakietów Admin SDK, ale nic poza tym nie jest. Godne uwagi wyłączenia wymieniono poniżej.

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 w następujący sposób:

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

Uprawnienia w chmurze

Pakiet Firebase Emulator Suite nie próbuje replikować ani respektować żadnych zachowań związanych z IAM podczas uruchamiania. Emulatory są zgodne z podanymi Regułami bezpieczeństwa Firebase, ale w sytuacjach, w których IAM byłyby normalnie używane, na przykład do ustawiania konta usługi wywołującego Cloud Functions, a tym samym uprawnień, emulatora nie można konfigurować i użyje globalnie dostępnego konta na komputerze programisty, podobne do bezpośredniego uruchamiania lokalnego skryptu.

Powiadomienia Pub/Sub

Emulator Cloud Storage for Firebase nie integruje się z emulatorem Cloud Pub/Sub, a zatem nie obsługuje tworzenia kanałów/powiadomień o zmianach obiektów pamięci masowej. Zalecamy bezpośrednie używanie wyzwalaczy Cloud Functions Storage.

Metadane na poziomie zasobnika

Emulator Cloud Storage for 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ć to wsparcie.

Co następne?