Połącz aplikację i rozpocznij prototyp


Zanim zaczniesz korzystać z Firebase Local Emulator Suite, utwórz projekt Firebase, skonfiguruj środowisko programistyczne i wybierz oraz zainstaluj pakiety SDK Firebase dla swojej platformy zgodnie z odpowiednimi tematami Pierwsze kroki z Firebase na temat platformy: Apple, Android lub internet.

Tworzenie prototypu i testowanie

Local Emulator Suite zawiera kilka emulacji produktów, jak opisano w Wprowadzeniu do Firebase Local Emulator Suite. Możesz tworzyć prototypy i testować je za pomocą poszczególnych emulatorów lub ich kombinacji, w zależności od tego, których usług Firebase używasz w wersji produkcyjnej.

Interakcja między emulowanymi bazami danych i funkcjami Firebase
Emulatory baz danych i Cloud Functions w ramach pełnego Local Emulator Suite.

Aby w tym temacie przedstawić proces Local Emulator Suite, załóżmy, że pracujesz nad aplikacją, która korzysta z typowej kombinacji usług: bazy danych Firebase i funkcji Cloud Functions wywoływanych przez operacje wykonywane w tej bazie danych.

Po zainicjowaniu projektu Firebase lokalnie cykl programowania za pomocą pakietu Local Emulator Suite składa się zwykle z 3 etapów:

  1. Twórz prototypy funkcji za pomocą emulatorów i Emulator Suite UI.

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

  3. Automatyzuj testy za pomocą emulatorów i skryptów niestandardowych.

Inicjowanie projektu Firebase lokalnie

Upewnij się, że zainstalowałeś/zainstalowałaś interfejs wiersza poleceń lub zaktualizowałeś/zaktualizowałaś go do najnowszej wersji.

curl -sL firebase.tools | bash

Jeśli nie zrobiono tego jeszcze wcześniej, zainicjuj bieżący katalog roboczy jako projekt Firebase, postępując zgodnie z instrukcjami wyświetlanymi na ekranie. Podczas konfigurowania użyj opcji Cloud Functions i opcji Cloud Firestore lub Realtime Database:

firebase init

Katalog projektu będzie teraz zawierać pliki konfiguracji Firebase, plik definicji bazy danych Firebase Security Rules, katalog functions z kodem funkcji w chmurze oraz inne pliki pomocnicze.

Interaktywne prototypowanie

Local Emulator Suite umożliwia szybkie tworzenie prototypów nowych funkcji, a wbudowany interfejs użytkownika jest jednym z najprzydatniejszych narzędzi do prototypowania. To trochę tak, jakby konsola Firebase działała lokalnie.

Za pomocą Emulator Suite UI możesz wielokrotnie modyfikować projekt bazy danych, testować różne przepływy danych z użyciem funkcji w chmurze, oceniać zmiany w regułach zabezpieczeń, sprawdzać dzienniki, aby potwierdzić działanie usług backendowych, i wykonywać inne czynności. Jeśli chcesz zacząć od nowa, po prostu opróżnij bazę danych i zacznij od nowa z nowym pomysłem na projekt.

Wszystkie te funkcje są dostępne, gdy uruchamiasz Local Emulator Suite:

firebase emulators:start

Aby stworzyć prototyp hipotetycznej aplikacji, skonfigurujmy i przetestujmy podstawową funkcję w chmurze, aby modyfikować wpisy tekstowe w bazie danych, a także ją utworzyć i wypełnić w funkcji Emulator Suite UI, aby ją uruchomić.

  1. Aby utworzyć funkcję w chmurze, która będzie wywoływana przez zapisy w bazie danych, zmodyfikuj plik functions/index.js w katalogu projektu. Zastąp zawartość istniejącego pliku tym fragmentem kodu. Ta funkcja wykrywa zmiany w dokumentach w kolekcji messages, konwertuje zawartość pola original dokumentu na wielkie litery i zapisuje wynik w polu uppercase dokumentu.
  2.   const functions = require('firebase-functions/v1');
    
      exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
          .onCreate((snap, context) => {
            const original = snap.data().original;
            console.log('Uppercasing', context.params.documentId, original);
            const uppercase = original.toUpperCase();
            return snap.ref.set({uppercase}, {merge: true});
          });
      
  3. Uruchom Local Emulator Suite za pomocą firebase emulators:start. Uruchamiają się emulatory Cloud Functions i bazy danych, które są automatycznie skonfigurowane pod kątem współpracy.
  4. Interfejs możesz wyświetlić w przeglądarce pod adresem http://localhost:4000. Port 4000 jest domyślnym portem interfejsu użytkownika, ale sprawdź komunikaty terminala wygenerowane przez interfejs wiersza poleceń Firebase. Zapisz stan dostępnych emulatorów. W naszym przypadku uruchomione będą emulatory Cloud Functions i Cloud Firestore.
    Mój obraz
  5. W interfejsie na karcie Firestore > Dane kliknij Rozpocznij kolekcję i postępuj zgodnie z instrukcjami, aby utworzyć nowy dokument w kolekcji messages z nazwą pola original i wartością test. To uruchamia naszą funkcję w chmurze. Zauważ, że wkrótce pojawi się nowe pole uppercase wypełnione ciągiem znaków „TEST”.
    Mój obraz Moje zdjęcie
  6. Na karcie Firestore > Żądania możesz sprawdzać żądania wysyłane do emulowanej bazy danych, w tym wszystkie Firebase Security Rulesoceny wykonane w ramach realizacji tych żądań.
  7. Na karcie Dzienniki sprawdź, czy podczas aktualizowania bazy danych nie wystąpiły błędy.

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

Połącz aplikację z emulatorami

Gdy wykonasz już większość prac związanych z tworzeniem interaktywnych prototypów i wybierzesz odpowiedni projekt, możesz dodać do aplikacji kod dostępu do bazy danych za pomocą odpowiedniego pakietu SDK. Nadal będziesz używać karty bazy danych, a w przypadku funkcji – karty DziennikiEmulator Suite UI, aby sprawdzić, czy aplikacja działa prawidłowo.

Pamiętaj, że Local Emulator Suite to narzędzie do lokalnego tworzenia aplikacji. Zapisywanie danych w bazach danych produkcyjnych nie uruchamia funkcji, których prototypy tworzysz lokalnie.

Aby przełączyć się na zapisywanie danych w aplikacji w bazie danych, musisz skierować klasy testowe lub konfigurację w aplikacji na Cloud Firestoreemulator.

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

Automatyzowanie testów za pomocą skryptów niestandardowych

Oto ostatni ogólny krok przepływu pracy. Gdy prototyp funkcji w aplikacji będzie wyglądał obiecująco na wszystkich platformach, możesz przejść do ostatecznej implementacji i testowania. W przypadku testowania jednostkowego i procesów CI możesz uruchamiać emulatory, uruchamiać testy skryptowe i zamykać emulatory w ramach jednego wywołania za pomocą polecenia exec:

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

szczegółowo zapoznać się z poszczególnymi emulatorami,

Teraz, gdy już wiesz, jak wygląda podstawowy proces po stronie klienta, możesz zapoznać się ze szczegółami dotyczącymi poszczególnych emulatorów w pakiecie, w tym z informacjami o tym, jak ich używać do tworzenia aplikacji po stronie serwera:

Co dalej?

Przeczytaj tematy dotyczące konkretnych emulatorów, do których linki znajdują się powyżej. Następnie: