Łączenie aplikacji z emulatorem Cloud Firestore

Zanim połączysz aplikację z emulatorem Cloud Firestore, sprawdź, czy poznasz ogólny przepływ pracy w Firebase Local Emulator Suite, oraz musisz zainstalować i skonfigurować Local Emulator Suite i zapoznaj się z poleceniami interfejsu wiersza poleceń.

Wybierz projekt Firebase

Funkcja Firebase Local Emulator Suite emuluje produkty z jednego projektu Firebase.

Aby wybrać projekt do użycia, przed uruchomieniem emulatorów uruchom interfejs wiersza poleceń firebase use w katalogu roboczym. Możesz też przejść flagę --project poszczególnych emulatorów .

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

Typ projektu Funkcje Używanie z emulatorami
Prawdziwe

Prawdziwy projekt Firebase to projekt utworzony i skonfigurowany przez Ciebie (najprawdopodobniej za pomocą konsoli Firebase).

Prawdziwe projekty mają aktywne zasoby, takie jak instancje baz danych, miejsce na dane zasobników, funkcji lub innych zasobów utworzonych dla danej usługi Firebase w projektach AI.

Podczas pracy z prawdziwymi projektami Firebase możesz używać emulatorów dla lub wszystkich obsługiwanych usług.

W przypadku usług, których nie emulujesz, aplikacje i kod będą interakcja z zasobem aktywnym (instancją bazy danych, pamięcią masową) zasobnik, funkcja itp.).

Wersja demonstracyjna

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

Identyfikatory projektów demonstracyjnych mają prefiks demo-.

Podczas pracy z projektami demonstracyjnymi Firebase Twoje aplikacje i kod współdziałają tylko emulatory. Jeśli aplikacja próbuje wchodzić w interakcję z zasobem w przypadku których emulator nie jest uruchomiony, kod ten 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 Projekt Firebase
  • Silniejsze bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła nieemulowany (produkcyjnych), nie jest prawdopodobne, że nastąpi zmiana danych, jego użycia i rozliczeń
  • lepsza obsługa offline, ponieważ nie trzeba łączyć się z internetem, pobierz konfigurację pakietu SDK.
.

Dostosuj aplikację do emulatorów

Po uruchomieniu emulator Cloud Firestore tworzy domyślną bazę danych i o nazwie dla każdej konfiguracji firestore w firebase.json plik.

Nazwane bazy danych są też tworzone domyślnie w odpowiedzi na każdy pakiet SDK lub Wywołania interfejsu API REST do emulatora, które odwołują się do konkretnej bazy danych. Taka niejawnie utworzone bazy danych działają z otwartymi regułami.

Interaktywna praca z domyślnymi i nazwanymi bazami danych Emulator Suite UI, zaktualizuj adres URL na pasku adresu przeglądarki, wybierając domyślną lub nazwaną bazą danych.

  • Aby na przykład przeglądać dane w instancji domyślnej, zmień adres URL na localhost:4000/firestore/default/data
  • Aby przeglądać w instancji o nazwie ecommerce, zaktualizuj do localhost:4000/firestore/ecommerce/data

Platformy Android, Apple i internetowe pakiety SDK

Skonfiguruj konfigurację w aplikacji lub przetestuj zajęcia, z których możesz korzystać Cloud Firestore w następujący sposób. Pamiętaj, że w poniższych przykładach kod aplikacji łączy się z domyślną bazą danych projektu. Przykłady dotyczące dodatkowych Cloud Firestore baz danych poza domyślną bazą danych zapoznaj się z przewodnika obejmującego wiele baz danych.

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 firestore = Firebase.firestore
firestore.useEmulator("10.0.2.2", 8080)

firestore.firestoreSettings = firestoreSettings {
    isPersistenceEnabled = false
}
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFirestore firestore = FirebaseFirestore.getInstance();
firestore.useEmulator("10.0.2.2", 8080);

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
        .setPersistenceEnabled(false)
        .build();
firestore.setFirestoreSettings(settings);
Swift
let settings = Firestore.firestore().settings
settings.host = "127.0.0.1:8080"
settings.cacheSettings = MemoryCacheSettings()
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, '127.0.0.1', 8080);

Web

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("127.0.0.1", 8080);
}

Testowanie Cloud Functions nie wymaga dodatkowej konfiguracji wywoływane przez zdarzenia Firestore za pomocą emulatora. Gdy emulatory Firestore i Cloud Functions są jednocześnie automatycznie ze sobą współdziałają.

Admin SDK s

Urządzenia Firebase Admin SDK automatycznie łączą się z Cloud Firestore w emulatorze, gdy ustawiona jest zmienna środowiskowa FIRESTORE_EMULATOR_HOST:

export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"

Jeśli Twój kod działa w ramach emulatora Cloud Functions, identyfikator projektu i inne ustawienia są ustawiane automatycznie podczas wywoływania usługi initializeApp.

Jeśli chcesz, aby kod Admin SDK łączył się ze współdzielonym emulatorem działającym w w innym środowisku, musisz podać ten sam identyfikator projektu, który ustawiasz za pomocą interfejsu wiersza poleceń Firebase. Możesz przekazać identyfikator projektu bezpośrednio do initializeApp lub ustawić Zmienna środowiskowa GCLOUD_PROJECT.

Pakiet SDK administratora Node.js
admin.initializeApp({ projectId: "your-project-id" });
Zmienna środowiskowa
export GCLOUD_PROJECT="your-project-id"

Czyszczenie bazy danych między testami

Wersja produkcyjna Firestore nie udostępnia metody pakietu SDK platformy do opróżniania bazy danych, ale emulator Firestore zapewnia punkt końcowy REST przeznaczony specjalnie do tego celu, który może zostać wywołany z poziomu konfiguracji platformy testowej (tearDown), z klasy testowej lub z powłoki (np. curl), zanim test zostanie uruchomiony. Możesz użyć tej metody jako alternatywy dla zamknięcia procesu emulatora.

W odpowiedniej metodzie wykonaj operację HTTP DELETE, która dostarczy Identyfikator projektu Firebase, na przykład firestore-emulator-example, na: punkt końcowy:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Twój kod powinien oczywiście czekać na potwierdzenie REST o zakończeniu lub niepowodzeniu opróżniania.

Możesz wykonać tę operację z poziomu powłoki:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Po zaimplementowaniu takiego kroku możesz sekwencjonować testy i uruchamiać funkcji, mając pewność, że stare dane będą trwale usuwane między uruchomieniami że używasz nowej, podstawowej konfiguracji.

Importowanie i eksportowanie danych

Baza danych i emulatory usługi Cloud Storage for Firebase umożliwiają eksportowanie danych z działającej instancji emulatora. Zdefiniuj bazowy zbiór danych do użycia testów jednostkowych lub przepływów pracy w trybie ciągłej integracji, a następnie je wyeksportować, aby je udostępnić. w zespole.

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, określając eksportu lub po prostu za pomocą ścieżki przekazywanej do funkcji --import flaga.

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

Te opcje importu i eksportu danych działają z firebase emulators:exec. Więcej informacji: dokumentacja polecenia emulatora.

Wizualizacja aktywności związanej z regułami zabezpieczeń

Przy opracowaniu prototypu i pętli testowych możesz korzystać z narzędzi do wizualizacji. i raporty dostarczane przez Local Emulator Suite.

Używanie Monitora żądań

Emulator Cloud Firestore umożliwia wizualizację żądań klientów w Emulator Suite UI, w tym śledzenie oceny dla Firebase Security Rules.

Otwórz Firestore > Prośby, aby wyświetlić szczegółową ocenę. dla każdego żądania.

Monitor żądań emulatora Firestore pokazujący oceny reguł zabezpieczeń

Wizualizacja raportów oceny reguł

Dodając reguły zabezpieczeń do prototypu, możesz je debugować Local Emulator Suite narzędzia do debugowania.

Po przeprowadzeniu zestawu testów możesz uzyskać dostęp do testów raporty o zasięgu, które pokazują, jak została oceniona każda z Twoich reguł zabezpieczeń.

Aby uzyskać te raporty, wyślij w emulatorze zapytanie do ujawnionego punktu końcowego, podczas gdy jego uruchomienie. W przypadku wersji przeznaczonej do wyświetlania w przeglądarce użyj tego adresu URL:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

Reguły są dzielone na wyrażenia i podwyrażenia, najechanie kursorem myszy, aby uzyskać więcej informacji, w tym liczbę ocen i wartości . W przypadku nieprzetworzonej wersji JSON tych danych dołącz ten adres URL w zapytaniu:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

W tym przykładzie w wersji HTML raportu wyróżnione są oceny, które generują niezdefiniowane i błędy o wartości null:

Czym różni się emulator Cloud Firestore od wersji produkcyjnej

Emulator Cloud Firestore próbuje wiernie odtworzyć to działanie. z pewnymi ograniczeniami usługi produkcyjnej.

Obsługa wielu baz danych w przypadku usługi Cloud Firestore

Obecnie Emulator Suite UI obsługuje interaktywne tworzenie, edytowanie usuwania domyślnej bazy danych, wysyłania próśb o jej monitorowanie i wizualizację zabezpieczeń dla domyślnej bazy danych; a nie dodatkowych nazwanych baz danych.

Sam emulator tworzy jednak nazwaną bazę danych na podstawie w pliku firebase.json i domyślnie w odpowiedzi na pakiet SDK lub Wywołania interfejsu API REST.

Transakcje

Emulator nie implementuje obecnie wszystkich zachowań transakcji w wersji produkcyjnej. Gdy testujesz funkcje, które obejmują wiele jednoczesnych zapisów do jednego dokumentu, emulator może działać wolno zapisy żądań. W niektórych przypadkach odblokowanie może potrwać do 30 sekund. W razie potrzeby rozważ odpowiednie dostosowanie czasu oczekiwania testu.

Indeksy

Emulator nie śledzi indeksów złożonych i zamiast tego wykonuje wszystkie prawidłowe zapytanie. Przetestuj swoją aplikację za pomocą autentycznego środowiska Cloud Firestore w celu określenia, które indeksy będą potrzebne.

Limity

Emulator nie egzekwuje wszystkich limitów wymuszanych w środowisku produkcyjnym. Przykład: emulator może zezwolić na transakcje, które zostałyby odrzucone jako zbyt duże przez i usługę produkcyjną. Upewnij się, że znasz udokumentowane ograniczenia i pod kątem których została zaprojektowana aplikacja ich aktywne unikanie.

Co dalej?