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

Zanim połączysz aplikację z emulatorem Cloud Storage dla Firebase, upewnij się, że rozumiesz cały przepływ pracy w Pakiecie emulatorów lokalnych Firebase oraz że zainstalujesz i skonfigurujesz Pakiet emulatorów lokalnych, a także zapoznasz się z poleceniami interfejsu wiersza poleceń.

Wybierz projekt Firebase

Pakiet emulatorów lokalnych Firebase emuluje usługi związane z jednym projektem Firebase.

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

Pakiet emulatorów lokalnych obsługuje emulację prawdziwych projektów Firebase i projektów prezentacyjnych.

Typ projektu Funkcje Używanie z emulatorami
Prawdziwe

Prawdziwy projekt Firebase to projekt utworzony i skonfigurowany przez Ciebie (najprawdopodobniej w konsoli Firebase).

Rzeczywiste projekty mają aktywne zasoby, takie jak instancje bazy danych, zasobniki na dane, funkcje lub inne zasoby skonfigurowane dla danego projektu Firebase.

Podczas pracy z prawdziwymi projektami Firebase możesz uruchomić emulatory dowolnej lub wszystkich obsługiwanych usług.

W przypadku usług, których nie emulujesz, aplikacje i kod będą wchodzić w interakcje z aktywnym zasobem (instancją bazy danych, zasobnikiem na dane, funkcją itp.).

Demonstracyjny

Projekt demonstracyjny Firebase nie ma rzeczywistej konfiguracji Firebase ani aktywnych zasobów. Dostęp do tych projektów uzyskuje się zwykle w ramach ćwiczeń z programowania lub innych samouczków.

Identyfikatory projektów demonstracyjnych mają prefiks demo-.

Jeśli pracujesz w projektach demonstracyjnych Firebase, Twoje aplikacje i kod wchodzą w interakcję tylko z emulatorami. Jeśli aplikacja spróbuje wejść w interakcję z zasobem, dla którego emulator nie jest uruchomiony, ten kod zakończy się niepowodzeniem.

Zalecamy, aby w miarę możliwości korzystać z projektów demonstracyjnych. W ten sposób możesz zapewnić im dostęp do tych korzyści:

  • Łatwiejsza konfiguracja, ponieważ emulatory można uruchamiać bez konieczności tworzenia projektu Firebase.
  • Silniejsze bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła zasoby nieemulowane (produkcyjne), nie ma szans na zmianę danych, ich wykorzystanie i płatności
  • Lepsza obsługa offline, ponieważ nie musisz łączyć się z internetem, aby pobrać konfigurację pakietu SDK.

Dostosuj aplikację do emulatorów

Platformy Android, Apple i internetowe pakiety SDK

Aby móc korzystać z emulatora Cloud Storage dla Firebase, skonfiguruj konfigurację w aplikacji lub klasy testowe w podany niżej 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);
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);
} 

Testowanie funkcji Cloud aktywowanych przez zdarzenia Cloud Storage dla Firebase za pomocą emulatora nie wymaga dodatkowej konfiguracji. Gdy działają emulatory Cloud Storage dla Firebase i Cloud Functions, są one automatycznie ze sobą współpracujące.

Pakiety Admin SDK

Pakiety Firebase Admin SDK automatycznie łączą się z emulatorem Cloud Storage dla Firebase po ustawieniu zmiennej środowiskowej FIREBASE_STORAGE_EMULATOR_HOST:

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

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

Jeśli chcesz, by Twój kod pakietu Admin SDK łączył się ze współdzielonym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który ustawiasz w interfejsie wiersza poleceń Firebase. Możesz przekazać identyfikator projektu bezpośrednio do usługi 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"

Importowanie i eksportowanie danych

Baza danych i emulatory Cloud Storage dla Firebase umożliwiają eksportowanie danych z działającej instancji emulatora. Zdefiniuj bazowy zbiór danych do wykorzystania w testach jednostkowych lub przepływach pracy w trybie ciągłej integracji, a następnie wyeksportuj je, aby udostępnić je członkom zespołu.

firebase emulators:export ./dir

Podczas uruchamiania emulatora zaimportuj dane podstawowe podczas testów.

firebase emulators:start --import=./dir

Możesz polecić emulatorowi eksportowanie danych po wyłączeniu, podając ścieżkę eksportu lub po prostu używając ścieżki przekazywanej do flagi --import.

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

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

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

Na potrzeby testowania aplikacji klienckich emulator Cloud Storage dla Firebase jest niemal idealnie dopasowywany do obszaru produkcyjnego pod względem powierzchni interfejsu Firebase API. Wszystkie polecenia Firebase powinny działać między zwykłymi pakietami SDK Firebase (na platformach internetowych, Android i Apple).

W przypadku testowania aplikacji po stronie serwera obowiązują pewne ograniczenia. Pakiety Firebase Admin SDK używają platformy Google Cloud API, a nie wszystkie punkty końcowe tego interfejsu API są emulowane. Zgodnie z zasadą wszystko, co można zrobić za pomocą pakietów SDK klienta (przesyłanie lub usuwanie plików, pobieranie i ustawianie metadanych), jest również wdrożone na potrzeby pakietów Admin SDK, ale nie jest to już możliwe. Poniżej znajduje się lista istotnych wykluczeń.

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

Usługa Cloud Storage dla Firebase, w tym emulator pamięci masowej, to podzbiór funkcji Google Cloud Storage (GCS), która koncentruje się na obiektach pamięci masowej, co jest bardzo przydatne przy tworzeniu aplikacji Firebase. Cloud Storage dla Firebase różni się od GCS pod kilkoma względami:

  • Cloud Storage dla Firebase nie obsługuje obecnie interfejsów API Bucket do tworzenia, wyświetlania, pobierania ani usuwania zasobników na dane.
  • Interfejs Google Cloud Storage Objects API obsługuje te metody: copy, delete, get, insert, list, patch, rewrite, update.

Cloud IAM

Pakiet emulatorów Firebase nie próbuje replikować ani nie przestrzegać żadnych działań związanych z uprawnieniami dotyczącymi uruchamiania. Emulatory przestrzegają podanych reguł zabezpieczeń Firebase, ale w sytuacjach, w których uprawnienia są zwykle używane, np. do skonfigurowania konta usługi Cloud Functions, a zatem uprawnień, emulatora nie można skonfigurować i używa on konta dostępnego globalnie na komputerze dewelopera, podobnie jak w przypadku bezpośredniego uruchomienia skryptu lokalnego.

Powiadomienia Pub/Sub

Emulator Cloud Storage dla Firebase nie integruje się z emulatorem Cloud Pub/Sub, więc nie obsługuje tworzenia kanałów ani powiadomień o zmianach obiektów pamięci masowej. Zalecamy bezpośrednie używanie aktywatorów 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 planuje z czasem ulepszyć tę funkcję.

Co dalej?