Generierte Android-SDKs verwenden

Mit Firebase Data Connect-Client-SDKs können Sie Ihre serverseitigen Abfragen und Mutationen direkt über eine Firebase-App aufrufen. Sie generieren ein benutzerdefiniertes Client-SDK parallel, während Sie die Schemas, Abfragen und Mutationen entwerfen, die Sie in Ihrem Data Connect-Dienst bereitstellen. Anschließend integrieren Sie Methoden aus diesem SDK in Ihre Clientlogik.

Wie bereits erwähnt, werden Data Connect-Abfragen und ‑Mutationen nicht vom Clientcode gesendet und auf dem Server ausgeführt. Stattdessen werden Data Connect-Vorgänge bei der Bereitstellung wie Cloud Functions auf dem Server gespeichert. Sie müssen also entsprechende clientseitige Änderungen vornehmen, um Probleme für bestehende Nutzer zu vermeiden (z. B. bei älteren App-Versionen).

Deshalb bietet Data Connect eine Entwicklerumgebung und Tools, mit denen Sie Prototypen Ihrer serverseitig bereitgestellten Schemas, Abfragen und Mutationen erstellen können. Außerdem werden clientseitige SDKs automatisch generiert, während Sie den Prototyp erstellen.

Wenn Sie Updates für Ihre Dienst- und Client-Apps iteriert haben, können sowohl server- als auch clientseitige Updates bereitgestellt werden.

Wie funktioniert der Workflow für die Cliententwicklung?

Wenn Sie der Einstiegsanleitung gefolgt sind, haben Sie den gesamten Entwicklungsablauf für Data Connect kennengelernt. In diesem Leitfaden finden Sie ausführlichere Informationen zum Generieren von Android SDKs aus Ihrem Schema und zum Arbeiten mit Clientabfragen und ‑mutationen.

Zusammenfassend müssen Sie die folgenden Schritte ausführen, um generierte Android SDKs in Ihren Client-Apps zu verwenden:

  1. Fügen Sie Firebase Ihrer Android-App hinzu.
  2. Konfigurieren Sie Data Connect als Abhängigkeit in Gradle.
  3. Fügen Sie das Gradle-Plug-in für die Kotlin-Serialisierung und die Gradle-Abhängigkeit hinzu.

Gehen Sie anschließend so vor:

  1. Entwickeln Sie Ihr App-Schema.
  2. So richten Sie die SDK-Generierung ein:

  3. Ihren Clientcode initialisieren und Bibliotheken importieren

  4. Implementieren Sie Aufrufe von Abfragen und Mutationen.

  5. Richten Sie den Data Connect-Emulator ein und verwenden Sie ihn.

Kotlin-SDK generieren

Wie bei den meisten Firebase-Projekten erfolgt die Arbeit am Firebase Data Connect-Clientcode in einem lokalen Projektverzeichnis. Sowohl die Data Connect-VS Code-Erweiterung als auch die Firebase-Befehlszeile sind wichtige lokale Tools zum Generieren und Verwalten von Clientcode.

Die Optionen zur SDK-Generierung sind mit mehreren Einträgen in der dataconnect.yaml-Datei verknüpft, die beim Initialisieren Ihres Projekts generiert wurde.

SDK-Generierung initialisieren

Fügen Sie in Ihrer connector.yaml Ihre outputDir, package und (für das Web SDK) packageJsonDir hinzu.
connectorId: movies
generate:
  kotlinSdk:
    outputDir: ../../../src/main/java/com/myappliarcation
    package: com.myapplication

Ersetzen Sie outputDir durch den Pfad des Verzeichnisses, in das der generierte Code abgelegt werden soll. Dieser Pfad ist relativ zum Verzeichnis, das die connector.yaml-Datei selbst enthält. Ersetzen Sie package durch die Kotlin-Paketdeklaration, die in den generierten Dateien verwendet werden soll, oder lassen Sie package aus, um ein Standardpaket zu verwenden.

SDKs während des Prototypings aktualisieren

Wenn Sie mit der Data Connect-VS Code-Erweiterung und dem Data Connect-Emulator interaktiv Prototypen erstellen, werden SDK-Quelldateien automatisch generiert und aktualisiert, während Sie Data Connect-Dateien ändern, in denen Schemas, Abfragen und Mutationen definiert sind..gql Dies kann eine nützliche Funktion in Workflows für das Hot-Reloading (Neuladen) sein.

Wenn Sie in anderen Fällen den Data Connect-Emulator über die Firebase-Befehlszeile verwenden, können Sie .gql-Updates beobachten und SDK-Quellen automatisch aktualisieren lassen.

Alternativ können Sie die SDKs über die Befehlszeile neu generieren, wenn .gql-Dateien geändert werden:

firebase dataconnect:sdk:generate --watch

SDKs für die Integration und für Produktionsversionen generieren

In einigen Fällen, z. B. wenn Sie Projektquellen für CI-Tests vorbereiten, können Sie die Firebase CLI für ein Batch-Update aufrufen.

Verwenden Sie in diesen Fällen firebase dataconnect:sdk:generate.

Clientcode einrichten

Data Connect in den Clientcode einfügen

Wenn Sie Ihren Clientcode so einrichten möchten, dass er Data Connect und das generierte SDK verwendet, folgen Sie zuerst der Standardeinrichtungsanleitung für Firebase.

Fügen Sie dann Folgendes in den Abschnitt plugins in app/build.gradle.kts ein:

// 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

Fügen Sie dann Folgendes in den Abschnitt dependencies in app/build.gradle.kts ein:

implementation("com.google.firebase:firebase-dataconnect:16.0.0-beta03")
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.2.0") // Optional
implementation("com.google.firebase:firebase-appcheck:18.0.0") // Optional

Data Connect Android SDK initialisieren

Initiieren Sie Ihre Data Connect-Instanz mit den Informationen, die Sie zum Einrichten von Data Connect verwendet haben. Diese sind alle auf dem Tab „Data Connect“ der Firebase-Konsole verfügbar.

Das ConnectorConfig-Objekt

Das SDK erfordert ein Connector-Konfigurationsobjekt.

Dieses Objekt wird automatisch aus serviceId und location in dataconnect.yaml und connectorId in connector.yaml generiert.

Connector-Instanz abrufen

Nachdem Sie ein Konfigurationsobjekt eingerichtet haben, rufen Sie eine Data Connect-Connectorinstanz ab. Der Code für Ihren Connector wird vom Data Connect-Emulator generiert. Wenn der Name des Connectors movies und das Kotlin-Paket com.myapplication ist, wie in connector.yaml angegeben, rufen Sie das Connector-Objekt mit folgendem Aufruf ab:

val connector = com.myapplication.MoviesConnector.instance

Abfragen und Mutationen aus dem Android SDK verwenden

Mit dem Connector-Objekt können Sie Abfragen und Mutationen ausführen, wie im GraphQL-Quellcode definiert. Angenommen, für Ihren Connector sind die folgenden Vorgänge definiert:

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
  }
}

Dann können Sie einen Film so erstellen und abrufen:

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}")

Sie können auch mehrere Filme abrufen:

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)

Sie können auch einen Flow erfassen, der nur dann ein Ergebnis liefert, wenn ein neues Abfrageergebnis mit einem Aufruf der execute()-Methode der Abfrage abgerufen wird.

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

Prototyp Ihrer Android-Anwendung erstellen und testen

Clients für die Verwendung eines lokalen Emulators instrumentieren

Sie können den Data Connect-Emulator über die VS Code-Erweiterung „Data Connect“ oder über die Befehlszeile verwenden.

Die Instrumentierung der App für die Verbindung zum Emulator ist für beide Szenarien identisch.

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

Wenn Sie zu Produktionsressourcen wechseln möchten, kommentieren Sie die Zeilen für die Verbindung zum Emulator.

Datentypen in Data Connect-SDKs

Der Data Connect-Server stellt gängige und benutzerdefinierte GraphQL-Datentypen dar. Sie werden im SDK so dargestellt:

Data Connect-Typ Kotlin
String String
Integer Int (32-Bit-Ganzzahl)
Float Double (64-Bit-Gleitkommazahl)
Boolesch Boolesch
UUID java.util.UUID
Datum com.google.firebase.dataconnect.LocalDate (bis 16.0.0-beta03 java.util.Date)
Zeitstempel com.google.firebase.Timestamp
INT64 Lang
Beliebig com.google.firebase.dataconnect.AnyValue