Pakiety SDK klienta Firebase Data Connect umożliwiają wywoływanie zapytań po stronie serwera oraz mutacji bezpośrednio w aplikacji Firebase. Niestandardowy pakiet SDK klienta generuje się w podczas projektowania schematów, zapytań i mutacji wdrażanych w Data Connect. Następnie integrujesz metody z tego pakietu SDK z logiką klienta.
Jak już wspomnieliśmy w innym miejscu, Data Connect zapytania i mutacje nie są przesyłane przez kod klienta i wykonywane na serwera. Zamiast tego po wdrożeniu operacje Data Connect są przechowywane na serwerze, podobnie jak w przypadku Cloud Functions. Oznacza to, że musisz wdrożyć odpowiednie zmiany po stronie klienta, które zapobiegają awariom dotychczasowych użytkowników (na przykład w przypadku starszych aplikacji wersji).
Dlatego Data Connect udostępnia środowisko programistyczne i narzędzia, które umożliwiają tworzenie prototypów schematów, zapytań i mutacji wdrożonych na serwerze. Podczas tworzenia prototypu automatycznie generuje też zestawy SDK po stronie klienta.
Gdy wprowadzisz aktualizacje w aplikacjach usługi i klienta, będzie można wdrożyć aktualizacje po stronie serwera i klienta.
Generowanie pakietu SDK Swift
Podobnie jak w przypadku większości projektów Firebase, praca nad kodem klienta Firebase Data Connect odbywa się w lokalnym katalogu projektu. Zarówno Rozszerzenie Data Connect VS Code oraz interfejs wiersza poleceń Firebase są ważnymi elementami lokalnymi narzędzi do generowania kodu klienta i zarządzania nim.
Opcje generowania pakietu SDK są powiązane z kilkoma wpisami w dataconnect.yaml
wygenerowany po zainicjowaniu projektu.
Inicjowanie generowania pakietu SDK
Wconnector.yaml
dodaj pakiety outputDir
, package
oraz (w przypadku internetowego pakietu SDK)
packageJsonDir
connectorId: "movies"
generate:
swiftSdk:
outputDir: "../movies-generated"
package: "Movies"
outputDir
określa, gdzie ma być zapisany wygenerowany pakiet SDK. Jeśli nie określono tego folderu, jako domyślny katalog wyjściowy będzie używany folder oprogramowania sprzęgającego.
package
określa nazwę pakietu, który zostanie wygenerowany. Generator
utworzy folder o nazwie pakietu, który zawiera Package.swift
i wygenerował kod.
observablePublisher
(opcjonalnie) określa wydawcę Observable, którego należy użyć w odniesieniach zapytania. Możliwe wartości to observableMacro
(iOS 17 lub nowszy) oraz
observableObject
(starszy system – iOS 17). Jeśli nie podasz żadnej wartości, domyślną wartością będzie observableMacro
.
Aktualizowanie pakietów SDK podczas prototypowania
Jeśli tworzysz interaktywne prototypy za pomocą rozszerzenia Data Connect VS Code
i jego emulatorze Data Connect pliki źródłowe SDK są automatycznie
generowanych i aktualizowanych podczas modyfikowania .gql
plików definiujących schematy i zapytania
i mutacje. Może to być przydatna funkcja w przypadku procesów (ponownego) wczytywania na gorąco.
.gql
i zainstalować pakiet SDK
.
Możesz też użyć interfejsu wiersza poleceń, aby wygenerować pakiety SDK za każdym razem, gdy zmienisz pliki .gql:
firebase dataconnect:sdk:generate --watch
Generowanie pakietów SDK na potrzeby integracji i wersji produkcyjnych
W niektórych sytuacjach, na przykład w przypadku przygotowywania źródeł projektu do przesłania do testów CI, trzeba może wywołać interfejs wiersza poleceń Firebase w celu wykonania aktualizacji zbiorczej.
W takich przypadkach użyj firebase dataconnect:sdk:generate
.
Konfigurowanie kodu klienta
Aby skonfigurować kod klienta pod kątem korzystania z Data Connect i wygenerowanego pakietu SDK, wykonaj standardowe instrukcje konfiguracji Firebase.
Następnie otwórz obszar roboczy aplikacji za pomocą Xcode.
Na górnym pasku nawigacyjnym wybierz Plik > Dodaj zależności pakietu > Dodaj
Local i wybierz folder zawierający wygenerowany plik
Package.swift
plik źródłowy.
Inicjowanie pakietu Data Connect SDK na iOS
Zainicjuj instancję Data Connect, korzystając z informacji użytych do skonfigurowania usługi Data Connect (wszystkie dostępne w konsoli Firebase, na karcie Data Connect).
Pobieranie instancji oprogramowania sprzęgającego
Kod dla Twojego łącznika zostanie wygenerowany przez emulator Data Connect. Jeśli nazwa łącznika to movies
, a pakiet to movies
, zgodnie z definicją w pliku connector.yaml
, pobierz obiekt łącznika, wywołując:
let connector = DataConnect.moviesConnector
Uruchomione zapytania i mutacje
Obiekt oprogramowania sprzęgającego umożliwia uruchamianie zapytań i mutacji zdefiniowanych w Kod źródłowy GraphQL. Załóżmy, że oprogramowanie sprzęgające ma zdefiniowane te operacje:
mutation createMovie($title: String!, $releaseYear: Int!, $genre: String!, $rating: Int!) {
movie_insert(data: {
title: $title
releaseYear: $releaseYear
genre: $genre
rating: $rating
})
}
query getMovieByKey($key: Movie_Key!) {
movie(key: $key) { id title }
}
query listMoviesByGenre($genre: String!) {
movies(where: {genre: {eq: $genre}}) {
id
title
}
}
Następnie możesz utworzyć film w ten sposób:
let mutationResult = try await connector.createMovieMutation.execute(
title: "Empire Strikes Back",
releaseYear: 1980,
genre: "Sci-Fi",
rating: 5)
print("Movie ID: \(mutationResult.data.movie_insert.id)")
Aby pobrać film, należy użyć odwołania do zapytania. Wszystkie odwołania do zapytań to wydawcy Observable. W zależności od skonfigurowanego wydawcy (patrz connector.yaml)
,
obsługują makro @Observable
(iOS w wersji 17 lub nowszej) lub implementują makro
Protokół ObservableObject
. Jeśli nie określisz żadnej wartości, domyślnie zostanie użyte makro @Observable
obsługiwane w iOS 17 i nowszych.
W widoku SwiftUI możesz powiązać wyniki zapytania za pomocą opublikowanej metody data
zmienną odsyłania zapytania i wywołanie metody execute()
zapytania, aby zaktualizować
dane. Zmienna data
będzie pasować do kształtu danych, które zostały zdefiniowane
w definicji zapytania GQL.
Wszystkie pobrane wyniki są zgodne z protokołem Decodable
. Jeśli w wywołaniu GQL uwzględnisz klucz podstawowy obiektu, obiekty będą też Identifiable
, co pozwoli Ci używać ich w iteracjach.
struct ListMovieView: View {
@StateObject private var queryRef = connector.listMoviesByGenreQuery.ref(genre: "Sci-Fi")
var body: some View {
VStack {
Button {
Task {
do {
try await refresh()
} catch {
print("Failed to refresh: \(error)")
}
}
} label: {
Text("Refresh")
}
// use the query results in a view
ForEach(queryRef.data?.movies ?? [], id: \.self.id) { movie in
Text(movie.title)
}
}
}
@MainActor
func refresh() async throws {
_ = try await queryRef.execute()
}
}
Zapytania obsługują również wykonywanie jednorazowych zadań.
let resultData = try await DataConnect.moviesConnector.listMoviesByGenreQuery.execute(genre: "Sci-Fi")
Twórz prototypy i testuj swoją aplikację na iOS
Użyj klienta, aby użyć lokalnego emulatora
Możesz użyć emulatora Data Connect, korzystając z rozszerzenia Data Connect w VS Code lub z poziomu wiersza poleceń.
W obu przypadkach instrumentowanie aplikacji w celu połączenia z emulatorem jest takie samo.
let connector = DataConnect.moviesConnector
// Connect to the emulator on "127.0.0.1:9399"
connector.useEmulator()
// (alternatively) if you're running your emulator on non-default port:
connector.useEmulator(port: 9999)
// Make calls from your app
Typy danych w Data Connect pakietach SDK
Serwer Data Connect reprezentuje typowe i niestandardowe typy danych GraphQL. Są one widoczne w pakiecie SDK w ten sposób.
Typ Data Connect | Swift |
---|---|
Ciąg znaków | Ciąg znaków |
Liczba całkowita | Liczba całkowita |
Liczba zmiennoprzecinkowa | Podwójne |
Wartość logiczna | Wartość logiczna |
UUID | UUID |
Data | FirebaseDataConnect.LocalDate |
Sygnatura czasowa | FirebaseCore.Timestamp |
Int64 | Int64 |
Dowolna | FirebaseDataConnect.AnyValue |