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 niektórych obsługiwanych usług. W przypadku usług, których nie emulujesz, Twoje aplikacje i kod będą wchodzić w interakcję z aktywnymi zasobami (instancjami baz danych, zasobnikami magazynu, funkcjami 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 |
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ż do pobrania konfiguracji pakietu SDK nie jest potrzebne połączenie z internetem;
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+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); }
Aby przetestować funkcje Cloud uruchamiane przez zdarzenia Cloud Storage for Firebase za pomocą emulatora, nie musisz nic konfigurować. Gdy emulatory Cloud Storage for Firebase i Cloud 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 Functions i Cloud 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
.
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 przepływach pracy ciągłej, 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 jego punkty końcowe 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ą te metody:
copy
,delete
,get
,insert
,list
,patch
,rewrite
,update
.
Cloud IAM
Pakiet emulatorów Firebase nie próbuje odwzorowywać ani respektować zachowania 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ń 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ń dotyczących zmian w obiektach Cloud Storage. Zalecamy bezpośrednie używanie 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 magazynu, konfiguracji CORS na poziomie zasobnika, etykiet ani zasad przechowywania. Zespół Firebase zamierza stopniowo ulepszać tę funkcję.
Co dalej?
- Aby uzyskać dostęp do wyselekcjonowanych filmów i szczegółowych przykładów, skorzystaj z playlisty szkoleń na temat emulatorów Firebase.
- Funkcja wywoływana jest typową integracją z Cloud Storage for Firebase. Więcej informacji o emulatorze Cloud Functions for Firebase znajdziesz w artykule Uruchamianie funkcji lokalnie.