Pakiety SDK klienta Firebase Data Connect umożliwiają wywoływanie zapytań i mutacji po stronie serwera bezpośrednio z aplikacji Firebase. Niestandardowy pakiet SDK klienta generujesz równolegle z projektowaniem schematów, zapytań i mutacji, które wdrażasz w usłudze Data Connect. Następnie integrujesz metody z tego pakietu SDK z logiką klienta.
Jak już wspomnieliśmy, Data Connectzapytania i mutacje nie są przesyłane przez kod klienta ani wykonywane na serwerze. 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.
Po powtórzeniu aktualizacji aplikacji usługi i klienta zarówno serwer, aktualizacje po stronie klienta są gotowe do wdrożenia.
Generowanie pakietu Kotlin SDK
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:
kotlinSdk:
outputDir: ../../../src/main/java/com/myapplication
package: com.myapplication
Zastąp outputDir
ścieżką katalogu, w którym został wygenerowany
zostanie umieszczony kod, ta ścieżka jest podawana względem katalogu zawierającego
connector.yaml
. Zastąp package
pakietem Kotlin
do użycia w wygenerowanych plikach lub pomiń package
, by użyć domyślnej
pakietu SDK.
Aktualizowanie pakietów SDK podczas prototypowania
Jeśli prototypowanie odbywa się interaktywnie za pomocą rozszerzenia Data Connect w VS Code i jego emulatora Data Connect, podczas modyfikowania plików .gql
definiujących schematy, zapytania i mutacje pliki źródłowe pakietu SDK są automatycznie generowane i aktualizowane. 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 przypadkach, np. podczas przygotowywania źródeł projektu do przesłania na potrzeby testów CI, możesz wywołać interfejs wiersza poleceń Firebase w celu zbiorczej aktualizacji.
W takich przypadkach należy użyć firebase dataconnect:sdk:generate
.
Skonfiguruj kod klienta
Umieść kod Data Connect w kodzie klienta
Aby skonfigurować kod klienta pod kątem używania pakietu Data Connect i wygenerowanego pakietu SDK, najpierw wykonaj standardowe instrukcje konfiguracji Firebase.
Następnie w sekcji plugins
dodaj ten kod
app/build.gradle.kts
:
// The Firebase team tests with version 1.8.22; however, other 1.8 versions,
// and all newer versions are expected work too.
kotlin("plugin.serialization") version "1.8.22" // MUST match the version of the Kotlin compiler
Następnie w sekcji dependencies
w pliku app/build.gradle.kts
dodaj:
implementation("com.google.firebase:firebase-dataconnect:16.0.0-beta01")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1")
implementation("com.google.firebase:firebase-auth:23.0.0") // Optional
implementation("com.google.firebase:firebase-appcheck:18.0.0") // Optional
Zainicjuj pakiet SDK Androida Data Connect
Zainicjuj instancję Data Connect, korzystając z Twoich informacji używane do skonfigurowania Data Connect (wszystkie są dostępne w konsoli Firebase, na karcie Połączenie danych).
Obiekt ConnectorConfig
Pakiet SDK wymaga obiektu konfiguracji oprogramowania sprzęgającego.
Ten obiekt jest automatycznie generowany na podstawie elementów serviceId
i location
w dataconnect.yaml
oraz elementu connectorId
w connector.yaml
.
Pobieranie instancji oprogramowania sprzęgającego
Po skonfigurowaniu obiektu konfiguracji pobierz Data Connect
instancji oprogramowania sprzęgającego. Kod dla oprogramowania sprzęgającego zostanie wygenerowany przez
Emulator Data Connect. Jeśli nazwa łącznika to movies
, a pakiet Kotlina to com.myapplication
, zgodnie z definicją w pliku connector.yaml
, pobierz obiekt łącznika, wywołując:
val connector = com.myapplication.MoviesConnector.instance
Wykonywanie zapytań i mutacji
Za pomocą obiektu łącznika możesz wykonywać zapytania i mutacje zgodnie z definicją w kodzie źródłowym 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
}
}
możesz utworzyć i pobrać film w ten sposób:
val connector = MoviesConnector.instance
val addMovieResult1 = connector.createMovie.execute(
title = "Empire Strikes Back",
releaseYear = 1980,
genre = "Sci-Fi",
rating = 5
)
val movie1 = connector.getMovieByKey.execute(addMovieResult1.data.key)
println("Empire Strikes Back: ${movie1.data.movie}")
Możesz też pobrać wiele filmów:
val connector = MoviesConnector.instance
val addMovieResult2 = connector.createMovie.execute(
title="Attack of the Clones",
releaseYear = 2002,
genre = "Sci-Fi",
rating = 5
)
val listMoviesResult = connector.listMoviesByGenre.execute(genre = "Sci-Fi")
println(listMoviesResult.data.movies)
Możesz też rejestrować właściwość Flow
, która zwróci wynik tylko wtedy, gdy nowe zapytanie
jest pobierany przy użyciu metody execute()
zapytania.
val connector = MoviesConnector.instance
connector.listMoviesByGenre.flow(genre = "Sci-Fi").collect { data ->
println(data.movies)
}
connector.createMovie.execute(
title="A New Hope",
releaseYear = 1977,
genre = "Sci-Fi",
rating = 5
)
connector.listMoviesByGenre.execute(genre = "Sci-Fi") // will cause the Flow to get notified
Tworzenie prototypu i testowanie aplikacji na Androida
Udostępnij klientom możliwość użycia lokalnego emulatora
Możesz użyć emulatora Data Connect zarówno z poziomu interfejsu z rozszerzenia Data Connect VS Code lub z interfejsu wiersza poleceń.
W obu scenariuszach instrumentacja aplikacji do łączenia się z emulatorem jest taka sama.
val connector = MoviesConnector.instance
// Connect to the emulator on "10.0.2.2:9399"
connector.dataConnect.useEmulator()
// (alternatively) if you're running your emulator on non-default port:
connector.dataConnect.useEmulator(port = 9999)
// Make calls from your app
Aby przełączyć się na zasoby produkcyjne, skomentuj wiersze połączenia z za pomocą emulatora.
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 | Kotlin |
---|---|
Ciąg znaków | Ciąg znaków |
Liczba całkowita | Int (32-bitowa) |
Liczba zmiennoprzecinkowa | podwójna (liczba zmiennoprzecinkowa 64-bitowa), |
Wartość logiczna | Wartość logiczna |
UUID | plik java.util.UUID |
Data | java.util.Date |
Sygnatura czasowa | com.google.firebase.Timestamp |
Int64 | Liczba długa |
Dowolna | com.google.firebase.dataconnect.AnyValue |