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

Zanim połączysz aplikację z emulatorem Cloud Storage for Firebase, zapoznaj się z całym procesem Firebase Local Emulator Suite oraz zainstaluj i skonfiguruj Local Emulator Suite oraz zapoznaj się z komandami CLI.

Wybieranie projektu Firebase

Firebase Local Emulator Suite emuluje usługi w pojedynczym projekcie Firebase.

Aby wybrać projekt, który ma być używany, przed uruchomieniem emulatorów uruchom w CLI polecenie firebase use w katalogu roboczym. Możesz też przekazać parametr --project do każdego polecenia emulatora.

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

Typ projektu Funkcje Używanie z emulatorami
Real

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

Prawdziwe projekty mają aktywne zasoby, takie jak instancje bazy danych, kontenery magazynu, funkcje lub inne zasoby skonfigurowane w danym projekcie Firebase.

Podczas pracy z prawdziwymi projektami Firebase możesz uruchamiać emulatory dla wszystkich lub wybranych obsługiwanych usług.

W przypadku usług, których nie emulujesz, aplikacje i kod będą wchodzić w interakcję z żywymi zasobami (np. instancją bazy danych, zasobnikiem magazynu, funkcją itp.).

Prezentacja

Demonstracyjny projekt Firebase nie ma rzeczywistej konfiguracji Firebase i żadnych zasobów w produkcji. Do tych projektów zwykle uzyskuje się dostęp za pomocą ćwiczeń z programowania lub innych samouczków.

Identyfikatory projektów demonstracyjnych mają prefiks demo-.

Podczas pracy z demonstracyjnymi projektami Firebase aplikacje i kod będą wchodzić w interakcje z emulatorami tylko. Jeśli aplikacja próbuje wchodzić w interakcję z zasobem, dla którego nie działa emulowany system, kod nie zadziała.

W miarę możliwości zalecamy korzystanie z 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 Firebase.
  • Większe bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła nieemulowane (produkcyjne) zasoby, nie ma możliwości zmiany danych, ich użycia ani rozliczenia.
  • lepsza obsługa trybu offline, ponieważ nie trzeba mieć dostępu do internetu, aby pobrać konfigurację pakietu SDK;

Przeprowadź testy aplikacji z użyciem emulatorów

Pakiety SDK na Androida i platformy Apple oraz pakiety SDK internetowe

Aby skonfigurować konfigurację w aplikacji lub przetestować klasy, które mają wchodzić w interakcję z emulatorem Cloud Storage for Firebase, wykonaj te czynności:

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 uruchamiane przez zdarzenia Cloud Storage for Firebase za pomocą emulatora, nie musisz nic konfigurować. Gdy emulatory Cloud Storage for FirebaseCloud Functions działają, współpracują ze sobą automatycznie.

Admin SDK s

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

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 FunctionsCloud Storage for Firebase. Zmienne środowiskowe zostaną automatycznie ustawione dla pakietu Admin SDK w pliku Cloud Storage for Firebase.

Jeśli chcesz, aby kod Admin SDK łączył się z wspólnym 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ć do initializeApp bezpośrednio lub ustawić zmienną środowiskową GCLOUD_PROJECT.

Pakiet Node.js Admin SDK
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 bieżącej instancji emulatora. Określ podstawowy zestaw danych do użycia w testach jednostkowych lub procesach ciągłej integracji, a potem wyeksportuj go, aby udostępnić go zespołowi.

firebase emulators:export ./dir

Podczas testów, po uruchomieniu emulatora, zaimportuj dane bazowe.

firebase emulators:start --import=./dir

Możesz zlecić emulatorowi eksportowanie danych po wyłączeniu, 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 importowania i eksportowania danych działają też z poleceniem firebase emulators:exec. Więcej informacji znajdziesz w przewodniku po poleceniach emulatora.

Różnice między emulatorem Cloud Storage for Firebase a wersją produkcyjną

W przypadku testowania aplikacji klienckich emulator Cloud Storage for Firebase jest prawie idealnie dopasowany do wersji produkcyjnej pod względem interfejsu API Firebase. Wszystkie komendy Firebase powinny działać w ramach standardowych pakietów SDK Firebase (na platformach internetowych, Androida i Apple).

W przypadku testowania aplikacji po stronie serwera występują pewne ograniczenia. Pakiety SDK Firebase Admin korzystają z interfejsu API Google Cloud, ale nie wszystkie punkty końcowe tego interfejsu są emulowane. Zasadniczo wszystko, co można zrobić w pakietach SDK klienta (przesyłanie i usuwanie plików, pobieranie i ustawianie metadanych), jest też dostępne w pakietach Admin SDK, ale nie wszystko poza tym. Wyjątki, które mogą być istotne, zostały wymienione poniżej.

Różnice w stosunku do Google Cloud Storage

Usługa Cloud Storage for Firebase, w tym emulator Storage, udostępnia podzbiór funkcji Google Cloud Storage (GCS) skupionych na obiektach Storage, które są bardzo przydatne podczas tworzenia aplikacji Firebase. Cloud Storage for Firebaseróżni się od GCS w następujący sposób:

  • Cloud Storage for Firebase nie obsługuje obecnie interfejsów API Bucket do tworzenia, wyświetlania, uzyskiwania ani 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.

Cloud IAM

Pakiet emulatorów Firebase nie próbuje odwzorowywać ani respektować żadnego zachowania związanego z IAM podczas działania. Emulatory przestrzegają dostarczonych reguł zabezpieczeń Firebase, ale w sytuacjach, w których zwykle używane są reguły IAM, np. do konfigurowania wywołań funkcji Cloud Functions przez konto usługi i w ten sposób uprawnień, emulator nie jest konfigurowalny i będzie używać konta dostępnego globalnie na Twoim komputerze dewelopera, podobnie jak w przypadku bezpośredniego uruchamiania skryptu lokalnego.

Powiadomienia Pub/Sub

Emulator Cloud Storage for Firebase nie integruje się z emulatorem Pub/Sub, więc nie obsługuje tworzenia kanałów ani powiadomień o zmianach obiektów w Cloud Storage. Zalecamy bezpośrednie korzystanie z Cloud Functions reguł w 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. Zespół Firebase planuje w przyszłości ulepszyć tę funkcję.

Co dalej?