Użyj wygenerowanych pakietów SDK na Androida

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

W connector.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.

W innych przypadkach, jeśli używasz emulatora Data Connect z usługi za pomocą interfejsu wiersza poleceń Firebase, możesz ustawić zegarek z aktualizacjami .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