Połącz aplikację z emulatorem bazy danych czasu rzeczywistego

Zanim połączysz aplikację z emulatorem Bazy danych czasu rzeczywistego, upewnij się, że znasz 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 korzystać z bazy danych czasu rzeczywistego, 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 database = Firebase.database
database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseDatabase database = FirebaseDatabase.getInstance();
database.useEmulator("10.0.2.2", 9000);
Swift
    // In almost all cases the ns (namespace) is your project ID.
let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")

Web

import { getDatabase, connectDatabaseEmulator } from "firebase/database";

const db = getDatabase();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  connectDatabaseEmulator(db, "127.0.0.1", 9000);
} 

Web

var db = firebase.database();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  db.useEmulator("127.0.0.1", 9000);
} 

Aby przetestować funkcje w Cloud Functions aktywowane przez zdarzenia Bazy danych czasu rzeczywistego za pomocą emulatora, nie jest wymagana dodatkowa konfiguracja. Gdy działają zarówno emulatory Bazy danych czasu rzeczywistego, jak i Cloud Functions, działają one automatycznie.

Pakiety Admin SDK

Pakiety Firebase Admin SDK automatycznie łączą się z emulatorem Bazy danych czasu rzeczywistego, gdy skonfigurowana jest zmienna środowiskowa FIREBASE_DATABASE_EMULATOR_HOST:

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

Jeśli Twój kod działa w ramach emulatora Cloud Functions, identyfikator projektu i inne konfiguracje zostaną automatycznie ustawione przy wywołaniu funkcji initializeApp.

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"

Czyszczenie bazy danych między testami

Aby wyczyścić bazę danych czasu rzeczywistego między działaniami, możesz wyczyścić odniesienie do bazy danych. Możesz użyć tej metody jako alternatywy dla zamknięcia procesu emulatora.

Kotlin+KTX
// With a DatabaseReference, write null to clear the database.
database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database.
database.getReference().setValue(null);
Swift
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Web

import { getDatabase, ref, set } from "firebase/database";

// With a database Reference, write null to clear the database.
const db = getDatabase();
set(ref(db), null);

Web

// With a database Reference, write null to clear the database.
firebase.database().ref().set(null);

Kod powinien oczywiście czekać na potwierdzenie zakończenia lub niepowodzenia czyszczenia przy użyciu funkcji asynchronicznego obsługi zdarzeń na platformie.

Po zaimplementowaniu takiego kroku możesz utworzyć sekwencję testów i aktywować funkcje, mając pewność, że stare dane zostaną trwale usunięte między uruchomieniami i będziesz korzystać z nowej konfiguracji podstawowej.

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.

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

Opracując prototyp i pętle testowe, możesz korzystać z narzędzi do wizualizacji i raportów dostępnych w Pakiecie emulatorów lokalnych.

Wizualizacja ocen reguł

Dodając reguły zabezpieczeń do prototypu, możesz je debugować za pomocą narzędzi Pakietu emulatorów lokalnych.

Po przeprowadzeniu zestawu testów możesz uzyskać dostęp do raportów zasięgu testów, które pokazują, jak zostały określone reguły. Aby pobrać raporty, wyślij w emulatorze zapytanie dotyczące ujawnionego punktu końcowego. W wersji przeznaczonej do wyświetlania w przeglądarce użyj tego adresu URL:

http://localhost:9000/.inspect/coverage?ns=<database_name>

Spowoduje to podział reguł na wyrażenia i wyrażenia podrzędne, po których możesz najechać kursorem myszy, aby uzyskać więcej informacji, w tym liczbę wykonań i zwróconych wartości. W przypadku nieprzetworzonej wersji JSON tych danych uwzględnij w zapytaniu ten adres URL:

http://localhost:9000/.inspect/coverage.json?ns=<database_name>

Co dalej?