Generierte Android-SDKs verwenden

Mit Firebase Data Connect-Client-SDKs kannst du deine serverseitigen Abfragen aufrufen und Mutationen direkt in einer Firebase-App erstellt werden. Sie generieren ein benutzerdefiniertes Client-SDK in während Sie die Schemas, Abfragen und Mutationen Data Connect-Dienst. 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. Das bedeutet, dass Sie entsprechende clientseitige Änderungen vornehmen müssen, 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 serverseitig bereitgestellte Schemas, Abfragen und Mutationen prototypisieren können. Außerdem werden clientseitige SDKs automatisch generiert, während Sie den Prototyp erstellen.

Wenn Sie Ihre Dienst- und Client-Apps aktualisiert haben, clientseitige Updates bereitgestellt werden können.

Kotlin-SDK generieren

Wie bei den meisten Firebase-Projekten erfolgt die Arbeit am Firebase Data Connect-Clientcode in einem lokalen Projektverzeichnis. Sowohl die VS Code-Erweiterung für Data Connect 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üge im connector.yaml Folgendes hinzu: outputDir, package und (für das Web SDK) packageJsonDir.
connectorId: movies
generate:
  kotlinSdk:
    outputDir: ../../../src/main/java/com/myapplication
    package: com.myapplication

Ersetzen Sie outputDir durch den Pfad zum Verzeichnis, in das der generierte Code abgelegt werden soll. Dieser Pfad ist relativ zum Verzeichnis, das die Datei connector.yaml selbst enthält. Ersetzen Sie package durch das Kotlin-Paket in den generierten Dateien zu verwenden, oder lassen Sie package weg, um eine Standard- Paket.

SDKs beim Prototyping 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 .gql-Dateien ändern, in denen Schemas, Abfragen und Mutationen definiert werden. Dies kann bei Hot-Loading-Workflows nützlich 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 Befehlszeile verwenden, um SDKs bei jeder Änderung von GQL-Dateien neu zu generieren:

firebase dataconnect:sdk:generate --watch

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

In einigen Fällen, z. B. bei der Vorbereitung von Projektquellen für CI-Tests, 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 Ihren Clientcode einbinden

Wenn Sie Ihren Clientcode so einrichten möchten, dass er Data Connect und das generierte SDK verwendet, folgen Sie zuerst der standardmäßigen Firebase-Einrichtungsanleitung.

Fügen Sie dann Folgendes in den Abschnitt plugins ein: 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

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

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

Data Connect Android SDK initialisieren

Initiieren Sie Ihre Data Connect-Instanz mit den Informationen, die Sie zum Einrichten von Data Connect verwendet haben. Diese finden Sie in der Firebase-Konsole auf dem Tab „Data Connect“.

ConnectorConfig-Objekt

Für das SDK ist ein Connector-Konfigurationsobjekt erforderlich.

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. Lautet der Name Ihres Connectors movies und der Wenn das Kotlin-Paket com.myapplication ist, wie in connector.yaml angegeben, gilt: rufen Sie das Connector-Objekt ab, indem Sie Folgendes aufrufen:

val connector = com.myapplication.MoviesConnector.instance

Abfragen und Mutationen ausführen

Mit dem Connector-Objekt können Sie Abfragen und Mutationen ausführen, wie in den GraphQL-Quellcode. 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
  }
}

können Sie wie folgt einen Film 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 eine Flow erfassen, die nur dann ein Ergebnis erzeugt, wenn eine neue Abfrage -Ergebnis wird mit einem Aufruf der execute()-Methode der Abfrage abgerufen.

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

Prototypen für Android-Apps 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

Kommentieren Sie Zeilen zur Verbindung mit der aus, um zu Produktionsressourcen zu wechseln. Emulator.

Datentypen in Data Connect-SDKs

Der Data Connect-Server stellt gängige und benutzerdefinierte GraphQL-Datentypen dar. Diese werden im SDK wie folgt dargestellt.

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