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 i sprawdź jego polecenia 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 Korzystanie z emulatorów
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 dowolnego lub wszystkich obsługiwanych produktów.

W przypadku usług, których nie emulujesz, aplikacje i kod będą wchodzić w interakcję z żywym zasobem (instancją bazy danych, zasobnikiem usługi Google Cloud Storage, funkcją itp.).

Prezentacja

Demonstracyjny projekt Firebase nie ma rzeczywistej konfiguracji Firebase ani ż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 są używane tylko w emulatorach. 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 będzie możliwości zmiany danych, ich użycia ani rozliczenia.
  • lepsza obsługa trybu offline, ponieważ do pobrania konfiguracji pakietu SDK nie jest potrzebny dostęp do internetu;

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:

// 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)
// 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);
Storage.storage().useEmulator(withHost: "127.0.0.1", port: 9199)
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);
} 
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 funkcji initializeApp bezpośrednio lub ustawić zmienną środowiskową GCLOUD_PROJECT.

admin.initializeApp({ projectId: "your-project-id" });
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. Określ podstawowy zestaw danych do użycia 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

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 emulacja Cloud Storage for Firebase jest niemal idealnie zgodna z wersją produkcyjną w zakresie 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 uwzględniać podczas działania żadnych zachowań związanych z IAM. Emulatory przestrzegają dostarczonych reguł zabezpieczeń Firebase, ale w sytuacjach, w których zwykle używane są reguły IAM, np. do konfigurowania wywołań kont usług Cloud Functions i odpowiednich uprawnień, emulator nie jest konfigurowalny i będzie używać konta dostępnego globalnie na Twoim urządzeniu 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 zamierza w przyszłości ulepszać tę funkcję.

Co dalej?