Połącz aplikację i rozpocznij prototyp


Zanim zaczniesz korzystać z Firebase Local Emulator Suite, utwórz projekt Firebase, skonfiguruj środowisko programistyczne oraz wybierz i zainstaluj pakiety SDK Firebase dla swojej platformy zgodnie z instrukcjami w sekcji Pierwsze kroki z Firebase dotyczącymi platformy: Apple, Android lub internet.

Prototypowanie i testowanie

Local Emulator Suite zawiera kilka emulatorów usług, jak opisano w artykule Wprowadzenie do Firebase Local Emulator Suite. Możesz prototypować i testować za pomocą pojedynczych emulatorów oraz ich kombinacji, w zależności od tego, których usług Firebase używasz w środowisku produkcyjnym.

Interakcja między emulatorem bazy danych Firebase a emulatorem funkcji
Emulatory bazy danych i Cloud Functions wchodzące w skład pełnego Local Emulator Suite.

Aby przedstawić przepokój pracy z Local Emulator Suite, załóżmy że pracujesz nad aplikacją, która korzysta z typowej kombinacji usług: bazy danych Firebase i funkcji w chmurze aktywowanych przez operacje w tej bazie danych.

Po zainicjowaniu projektu Firebase lokalnie cykl programowania z użyciem Local Emulator Suite zwykle obejmuje 3 etapy:

  1. Interaktywne prototypowanie funkcji za pomocą emulatorów i Emulator Suite UI.

  2. Jeśli używasz emulatora bazy danych lub emulatora Cloud Functions, wykonaj jednorazowy krok, aby połączyć aplikację z emulatorami.

  3. Automatyzowanie testów za pomocą emulatorów i skryptów niestandardowych.

Lokalne inicjowanie projektu Firebase

Upewnij się, że zainstalujesz interfejs CLI lub zaktualizujesz go do najnowszej wersji.

curl -sL firebase.tools | bash

Jeśli jeszcze tego nie zrobisz, zainicjuj bieżący katalog roboczy jako projekt Firebase, postępując zgodnie z instrukcjami wyświetlanymi na ekranie, aby określić, że używasz Cloud Functions oraz Cloud Firestore lub Realtime Database:

firebase init

Katalog projektu będzie teraz zawierać pliki konfiguracyjne Firebase, a Firebase Security Rules plik definicji dla bazy danych, a functions katalog zawierający kod funkcji w chmurze oraz inne pliki pomocnicze.

Interaktywne prototypowanie

Local Emulator Suite został zaprojektowany tak, aby umożliwić szybkie prototypowanie nowych funkcji, a wbudowany interfejs użytkownika jest jednym z jego najbardziej przydatnych narzędzi do prototypowania. To trochę tak, jakby konsola Firebase działała lokalnie.

Za pomocą Emulator Suite UI możesz iteracyjnie projektować bazę danych, testować różne przepływy danych obejmujące funkcje w chmurze, oceniać zmiany reguł zabezpieczeń, sprawdzać logi, aby potwierdzić, jak działają usługi backendowe, i nie tylko. Jeśli chcesz zacząć od nowa, po prostu wyczyść bazę danych i zacznij od nowa z nowym pomysłem na projekt.

Wszystko to jest dostępne po uruchomieniu Local Emulator Suite za pomocą polecenia:

firebase emulators:start

Aby prototypować naszą hipotetyczną aplikację, skonfigurujmy i przetestujmy podstawową funkcję w chmurze która będzie modyfikować wpisy tekstowe w bazie danych, a następnie utwórzmy i wypełnijmy tę bazę danych w Emulator Suite UI aby ją aktywować.

  1. Utwórz funkcję w chmurze aktywowaną przez zapisy w bazie danych, edytując plik functions/index.js w katalogu projektu. Zastąp zawartość istniejącego pliku tym fragmentem kodu. Ta funkcja nasłuchuje zmian w węzłach w hierarchii messages, konwertuje zawartość właściwości original węzła na wielkie litery i zapisuje wynik we właściwości uppercase tego węzła.
  2.   const functions = require('firebase-functions/v1');
    
      exports.makeUppercase = functions.database.ref('/messages/{pushId}/original')
          .onCreate((snapshot, context) => {
            const original = snapshot.val();
            console.log('Uppercasing', context.params.pushId, original);
            const uppercase = original.toUpperCase();
            return snapshot.ref.parent.child('uppercase').set(uppercase);
          });
      
  3. Uruchom Local Emulator Suite za pomocą firebase emulators:start. Uruchomią się emulatory Cloud Functions i bazy danych emulatory, automatycznie skonfigurowane do współpracy.
  4. Wyświetl interfejs w przeglądarce pod adresem http://localhost:4000. Port 4000 jest domyślnym portem interfejsu, ale sprawdź komunikaty w terminalu generowane przez interfejs Firebase CLI. Zwróć uwagę na stan dostępnych emulatorów. W naszym przypadku będą działać emulatory Cloud Functions i Realtime Database.
    Moje zdjęcie
  5. W interfejsie na karcie Baza danych czasu rzeczywistego użyj elementów sterujących edytora treści bazy danych, aby utworzyć zestaw węzłów z węzłem messages zawierającym węzeł message1, który z kolei zawiera węzeł z kluczem ustawionym na original i wartością ustawioną na test. Spowoduje to aktywowanie naszej funkcji w chmurze. Zauważ, że wkrótce pojawi się nowa właściwość uppercase z wartością TEST.
    Moje zdjęcie Moje zdjęcie
  6. Sprawdź kartę Logi , aby potwierdzić, że podczas aktualizowania bazy danych funkcja nie napotkała błędów.

Możesz łatwo przełączać się między kodem funkcji w chmurze a interaktywnymi zmianami w bazie danych, aż uzyskasz oczekiwany przepływ danych, bez konieczności modyfikowania kodu dostępu do bazy danych w aplikacji, ponownego kompilowania i ponownego uruchamiania zestawów testów.

Łączenie aplikacji z emulatorami

Gdy osiągniesz postęp w interaktywnym prototypowaniu i zdecydujesz się na projekt, możesz dodać do aplikacji kod dostępu do bazy danych za pomocą odpowiedniego pakietu SDK. Aby potwierdzić, że aplikacja działa prawidłowo, nadal będziesz używać karty bazy danych, a w przypadku funkcji – karty Logi w Emulator Suite UI.

Pamiętaj, że Local Emulator Suite to narzędzie do programowania lokalnego. Zapisy w bazach danych produkcyjnych nie będą aktywować funkcji, które prototypujesz lokalnie.

Aby przełączyć się na zapisywanie danych w bazie danych przez aplikację, musisz skierować klasy testowe lub konfigurację w aplikacji na emulator Realtime Database.

Kotlin
// 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);
} 

Automatyzowanie testów za pomocą skryptów niestandardowych

Teraz przejdźmy do ostatniego kroku ogólnego przepływu pracy. Gdy prototypowanie funkcji w aplikacji zostanie zakończone i będzie ona wyglądać obiecująco na wszystkich platformach, możesz przejść do ostatecznej implementacji i testowania. W przypadku testów jednostkowych i przepływów pracy CI możesz uruchamiać emulatory, uruchamiać testy skryptowe i zamykać emulatory za pomocą jednego wywołania polecenia exec:

firebase emulators:exec "./testdir/test.sh"

Szczegółowe informacje o poszczególnych emulatorach

Teraz, gdy znasz już podstawowy przepływ pracy po stronie klienta, możesz przejść do szczegółów dotyczących poszczególnych emulatorów w pakiecie, w tym do informacji o tym, jak używać ich do programowania aplikacji po stronie serwera:

Co dalej?

Przeczytaj artykuły dotyczące poszczególnych emulatorów, do których linki znajdziesz powyżej. Następnie: