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

Zanim połączysz aplikację z emulatorem Cloud Storage for Firebase, upewnij się, że rozumiesz ogólny przepływ pracy w Firebase Local Emulator Suite oraz że zainstalujesz i skonfigurujesz Local Emulator Suite i zapoznasz się z jego poleceniami interfejsu wiersza poleceń.

Wybierz projekt w Firebase

Firebase Local Emulator Suite emuluje produkty w ramach jednego projektu w Firebase.

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

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

Typ projektu Funkcje Używanie z emulatorami
real

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

Rzeczywiste projekty zawierają aktywne zasoby, takie jak instancje baz danych, zasobniki, funkcje lub inne zasoby skonfigurowane dla danego projektu Firebase.

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

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

Prezentacja

Projekt demonstracyjny Firebase nie ma rzeczywistej konfiguracji Firebase ani aktywnych zasobów. Dostęp do tych projektów można zwykle uzyskać za pomocą ćwiczeń w programowaniu lub innych samouczków.

Identyfikatory projektów demonstracyjnych mają prefiks demo-.

Podczas pracy z projektami w Firebase w wersji demonstracyjnej aplikacje i kod wchodzą w interakcje wyłącznie z emulatorami. Jeśli aplikacja spróbuje wejść w interakcję z zasobem, dla którego emulator nie jest uruchomiony, kod nie zadziała.

Zalecamy korzystanie z projektów demonstracyjnych, gdy tylko jest to możliwe. W ten sposób możesz zapewnić im dostęp do tych korzyści:

  • łatwiejsza konfiguracja, ponieważ emulatory można uruchamiać bez tworzenia projektu w Firebase;
  • Większe bezpieczeństwo, ponieważ jeśli kod przypadkowo wywoła nieemulowane zasoby (produkcyjne), nie ma możliwości zmiany danych, użycia ani naliczenia opłat.
  • Lepsza obsługa offline, ponieważ nie trzeba mieć dostępu do internetu, aby pobrać konfigurację pakietu SDK.

Instrumentowanie aplikacji pod kątem komunikacji z emulatorami

Pakiety SDK na Androida, platformy Apple i sieć

Skonfiguruj konfigurację w aplikacji lub klasy testowe, aby umożliwić interakcję z emulatorem Cloud Storage for Firebase w ten sposób.

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)
Unity
FirebaseStorage storage = FirebaseStorage.DefaultInstance;
// Connects to the Storage Emulator running on port 9199
storage.UseEmulator("127.0.0.1", 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 w Cloud Functions wywoływane przez zdarzenia Cloud Storage for Firebase za pomocą emulatora, nie musisz niczego konfigurować. Gdy emulatory Cloud Storage for Firebase i Cloud Functions są uruchomione, automatycznie współpracują ze sobą.

Admin SDK s

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

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

Pamiętaj, że emulator Cloud Functions automatycznie wykrywa 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 języku Cloud Storage for Firebase.

Jeśli chcesz, aby kod Admin SDK łączył się z emulatorem udostępnionym działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który został ustawiony za pomocą interfejsu wiersza poleceń Firebase. Możesz przekazać identyfikator projektu bezpośrednio do initializeApp lub ustawić zmienną środowiskową GCLOUD_PROJECT.

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 działającej instancji emulatora. Zdefiniuj podstawowy zestaw danych do użycia w testach jednostkowych lub przepływach pracy trybu 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 podstawowe.

firebase emulators:start --import=./dir

Możesz poinstruować emulator, aby eksportował dane podczas wyłączania, podają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 dokumentacji poleceń emulatora.

Różnice między emulatorem Cloud Storage for Firebase a środowiskiem produkcyjnym

W przypadku testowania aplikacji klienckich emulator Cloud Storage for Firebase niemal idealnie odpowiada środowisku produkcyjnemu pod względem obszaru interfejsu Firebase API. Wszystkie polecenia Firebase powinny działać między standardowymi pakietami SDK Firebase (platformy internetowe, Android i Apple).

W przypadku testowania aplikacji po stronie serwera obowiązują pewne ograniczenia. Pakiety Firebase Admin SDK korzystają z interfejsu API Google Cloud, a nie wszystkie punkty końcowe tego interfejsu API są emulowane. Zasadniczo wszystko, co można zrobić za pomocą pakietów SDK klienta (przesyłanie lub usuwanie plików, pobieranie i ustawianie metadanych), jest również zaimplementowane do użytku z pakietami Admin SDK, ale nic poza tym. Poniżej znajdziesz listę najważniejszych wykluczeń.

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

Usługa Cloud Storage for Firebase, w tym emulator Storage, udostępnia podzbiór funkcji Google Cloud Storage (GCS) skupiających się na obiektach pamięci masowej, które są bardzo przydatne podczas tworzenia aplikacji w Firebase. Cloud Storage for Firebase różni się od GCS pod tymi względami:

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

Cloud IAM

Pakiet emulatora Firebase nie próbuje replikować ani uwzględniać żadnych zachowań związanych z uprawnieniami podczas działania. Emulatory przestrzegają podanych reguł zabezpieczeń Firebase, ale w sytuacjach, w których zwykle używane są uprawnienia, np. do ustawiania konta usługi wywołującego funkcje w Cloud Functions, a tym samym uprawnień, emulatora nie można skonfigurować i będzie on używać konta dostępnego globalnie na komputerze używanym do programowania, podobnie jak w przypadku bezpośredniego uruchamiania skryptu lokalnego.

Powiadomienia Pub/Sub

Emulator Cloud Storage for Firebase nie jest zintegrowany z emulatorem Cloud Pub/Sub, dlatego nie obsługuje tworzenia kanałów ani powiadomień o zmianach obiektów w pamięci masowej. Zalecamy używanie aktywatorów Cloud Functions Storage bezpośrednio.

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ć tę obsługę.

Co dalej?