Użyj wygenerowanych pakietów SDK na Androida

Firebase Data Connect pakiety SDK klienta 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 zintegruj metody z tego pakietu SDK z logiką klienta.

Jak już wspominaliśmy, warto pamiętać, że Data Connectzapytania i mutacje nie są przesyłane przez kod klienta i nie są wykonywane na serwerze. Zamiast tego po wdrożeniu operacje Data Connect są przechowywane na serwerze, tak jak Cloud Functions. Oznacza to, że musisz wdrożyć odpowiednie zmiany po stronie klienta, aby uniknąć problemów u dotychczasowych użytkowników (np. w starszych wersjach aplikacji).

Dlatego Data Connect udostępnia środowisko programistyczne i narzędzia, które umożliwiają tworzenie prototypów schematów, zapytań i mutacji wdrażanych na serwerze. Podczas tworzenia prototypu automatycznie generuje też pakiety SDK po stronie klienta.

Gdy wprowadzisz aktualizacje usługi i aplikacji klienckich, zarówno aktualizacje po stronie serwera, jak i po stronie klienta będą gotowe do wdrożenia.

Jak wygląda proces tworzenia aplikacji klienckiej?

Jeśli zapoznasz się z sekcją Pierwsze kroki, poznasz ogólny proces tworzenia aplikacji Data Connect. W tym przewodniku znajdziesz bardziej szczegółowe informacje o generowaniu pakietów SDK na Androida na podstawie schematu oraz o pracy z zapytaniami i mutacjami klienta.

Podsumowując, aby używać wygenerowanych pakietów Android SDK w aplikacjach klienckich, musisz wykonać te czynności wstępne:

  1. Dodaj Firebase do aplikacji na Androida.
  2. Skonfiguruj Data Connect jako zależność w Gradle.
  3. Dodaj wtyczkę Gradle do serializacji w Kotlinie i zależność Gradle.

Następnie:

  1. Opracuj schemat aplikacji.
  2. Skonfiguruj generowanie pakietu SDK:

  3. Zainicjuj kod klienta i zaimportuj biblioteki.

  4. Wdróż wywołania zapytań i mutacji.

  5. Skonfiguruj i używaj Data Connect emulatora oraz powtarzaj ten proces.

Generowanie pakietu SDK w Kotlinie

Podobnie jak w przypadku większości projektów Firebase, praca nad Firebase Data Connectkodem klienta odbywa się w lokalnym katalogu projektu. Zarówno rozszerzenie Data Connect VS Code, jak i Firebase CLI to ważne lokalne narzędzia do generowania kodu klienta i zarządzania nim.

Opcje generowania pakietu SDK są powiązane z kilkoma wpisami w dataconnect.yamlpliku wygenerowanym podczas inicjowania projektu.

Inicjowanie generowania pakietu SDK

connector.yaml dodaj outputDir, package i (w przypadku pakietu SDK na potrzeby internetu) packageJsonDir.
connectorId: movies
generate:
  kotlinSdk:
    outputDir: ../../../src/main/java/com/myapplication
    package: com.myapplication

Zastąp symbol outputDir ścieżką do katalogu, w którym zostanie umieszczony wygenerowany kod. Ścieżka ta jest względna w stosunku do katalogu zawierającego sam plik connector.yaml. Zastąp package instrukcją pakietu Kotlin, która ma być używana w wygenerowanych plikach, lub pomiń package, aby użyć domyślnego pakietu.

Aktualizowanie pakietów SDK podczas tworzenia prototypu

Jeśli tworzysz interaktywny prototyp za pomocą rozszerzenia Data Connect VS Code i jego Data Connect emulatora, pliki źródłowe pakietu SDK są automatycznie generowane i aktualizowane podczas modyfikowania plików .gql definiujących schematy, zapytania i mutacje. Może to być przydatna funkcja w przypadku procesów roboczych z szybkim ponownym wczytywaniem.

W innych przypadkach, jeśli używasz Data Connectemulatora z Firebase interfejsu CLI, możesz ustawić obserwowanie .gql aktualizacji, a także automatycznie aktualizować źródła pakietu SDK.

Możesz też użyć interfejsu wiersza poleceń, aby ponownie wygenerować pakiety SDK za każdym razem, gdy zmienią się 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 przeprowadzenia aktualizacji zbiorczej.

W takich przypadkach używaj firebase dataconnect:sdk:generate.

Konfigurowanie kodu klienta

Wprowadź Data Connect do kodu klienta.

Aby skonfigurować kod klienta do korzystania z Data Connect i wygenerowanego pakietu SDK, najpierw wykonaj standardowe instrukcje konfiguracji Firebase.

Następnie dodaj ten kod do sekcji plugins w pliku 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 dodaj ten kod do sekcji dependencies w pliku app/build.gradle.kts:

implementation(platform("com.google.firebase:firebase-bom:33.16.0"))
implementation("com.google.firebase:firebase-dataconnect")
implementation("com.google.firebase:firebase-auth") // Optional
implementation("com.google.firebase:firebase-appcheck") // Optional
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3") // Newer versions should work too
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1") // Newer versions should work too

Zainicjuj Data Connect pakiet Android SDK.

Zainicjuj instancję Data Connect, używając informacji, których użyto do skonfigurowania Data Connect (wszystkie są dostępne w konsoli Firebase na karcie Data Connect).

Obiekt ConnectorConfig

Pakiet SDK wymaga obiektu konfiguracji łącznika.

Ten obiekt jest generowany automatycznie na podstawie serviceIdlocationdataconnect.yaml oraz connectorIdconnector.yaml.

Pobieranie instancji oprogramowania sprzęgającego

Po skonfigurowaniu obiektu konfiguracji uzyskaj instancję Data Connect łącznika. Kod złącza zostanie wygenerowany przez emulator Data Connect. Jeśli nazwa łącznika to movies, a pakiet Kotlin to com.myapplication, zgodnie z informacjami podanymi w connector.yaml, pobierz obiekt łącznika, wywołując:

val connector = com.myapplication.MoviesConnector.instance

Używanie zapytań i mutacji z pakietu Android SDK

Za pomocą obiektu łącznika możesz uruchamiać zapytania i mutacje zdefiniowane 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ż zbierać Flow, które zwracają wynik tylko wtedy, gdy nowe wyniki zapytania są pobierane za pomocą wywołania 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

Konfigurowanie klientów do korzystania z lokalnego emulatora

Możesz użyć Data Connect emulatora, korzystając z rozszerzenia Data Connect VS Code lub interfejsu CLI.

Instrumentowanie aplikacji w celu połączenia z emulatorem jest takie samo w obu przypadkach.

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, zakomentuj wiersze służące do łączenia się z emulatorem.

Typy danych w pakietach SDK Data Connect

Data Connect Serwer reprezentuje standardowe i niestandardowe typy danych GraphQL. W pakiecie SDK są one reprezentowane w ten sposób:

Typ połączenia danych Kotlin
Ciąg znaków Ciąg znaków
Liczba całkowita Liczba całkowita (32-bitowa)
Liczba zmiennoprzecinkowa Double (liczba zmiennoprzecinkowa 64-bitowa)
Wartość logiczna Wartość logiczna
UUID java.util.UUID
Data com.google.firebase.dataconnect.LocalDate (do wersji 16.0.0-beta03 był to java.util.Date)
Sygnatura czasowa com.google.firebase.Timestamp
Int64 Liczba długa
Dowolna com.google.firebase.dataconnect.AnyValue