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:
- Dodaj Firebase do aplikacji na Androida.
- Skonfiguruj Data Connect jako zależność w Gradle.
- Dodaj wtyczkę Gradle do serializacji w Kotlinie i zależność Gradle.
Następnie:
- Opracuj schemat aplikacji.
Skonfiguruj generowanie pakietu SDK:
- Za pomocą przycisku Dodaj pakiet SDK do aplikacji w naszym rozszerzeniu Data Connect do VS Code
- Aktualizując
connector.yaml
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.yaml
pliku wygenerowanym podczas inicjowania projektu.
Inicjowanie generowania pakietu SDK
Wconnector.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.
.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 serviceId
i location
w dataconnect.yaml
oraz connectorId
w connector.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 |