Firebase Data Connect クライアント SDK を使用すると、Firebase アプリからサーバーサイドのクエリと ミューテーションを直接呼び出すことができます。Data Connect サービスにデプロイするスキーマ、クエリ、ミューテーションを設計するのと 並行して、カスタム クライアント SDK を生成します。 Data Connect次に、この SDK のメソッドを クライアント ロジックに統合します。
他の場所でも説明したように、Data Connect クエリとミューテーションはクライアントコードによって送信され、 サーバーで実行されるわけではないことに注意してください。代わりに、デプロイされると、Data Connect オペレーションは サーバーに Cloud Functions のように保存されます。つまり、既存のユーザー(古いアプリ バージョンなど)に影響を与えないようにするには、対応する クライアントサイドの変更をデプロイする必要があります。
そのため、Data Connect には、サーバーにデプロイされたスキーマ、クエリ、ミューテーションのプロトタイプを作成できる開発環境と ツールが用意されています。 また、プロトタイプ作成時にクライアントサイド SDK が自動的に生成されます。
サービスとクライアント アプリの更新を繰り返すと、サーバーサイドと クライアントサイドの両方の更新をデプロイできるようになります。
クライアント開発ワークフローとは
スタートガイドに沿って進めた場合は、スタートガイドに沿って進めた場合は、 全体的な開発フローについて説明しました。Data Connectこの ガイドでは、スキーマから Android SDK を生成し、クライアントのクエリとミューテーションを操作する方法について詳しく説明します。
まとめると、生成された Android SDK をクライアント アプリで使用するには、 次の前提条件の手順を行います。
- Android アプリに Firebase を追加します。
- Gradle で Data Connect を依存関係として構成します。
- Kotlin シリアル化 Gradle プラグインと Gradle 依存関係を追加します。
その後の操作は次のとおりです。
- アプリのスキーマを開発します。
SDK の生成を設定します。
- Data Connect VS Code 拡張機能の [Add SDK to app] ボタンを使用する
- を更新する
connector.yaml
Data Connect エミュレータを設定して使用し、Data Connectエミュレータと 反復処理を行います。
Kotlin SDK を生成する
Firebase CLI を使用して、アプリに Data Connect 生成 SDK を設定します。
init コマンドは、現在のフォルダ内のすべてのアプリを検出し、生成された SDK を自動的にインストールします。
firebase init dataconnect:sdk
プロトタイプ作成中に SDK を更新する
Data Connect VS Code 拡張機能がインストールされている場合、生成された SDK は常に最新の状態に保たれます。
Data Connect VS Code 拡張機能を使用しない場合は、Firebase CLI を使用して、生成された SDK を最新の状態に保つことができます。
firebase dataconnect:sdk:generate --watchビルド パイプラインで SDK を生成する
Firebase CLI を使用して、CI/CD ビルドプロセスで Data Connect SDK を生成できます。
firebase dataconnect:sdk:generateクライアント コードを設定する
Data Connect をクライアント コードに組み込む
クライアント コードで Data Connect と生成された SDK を使用するように設定するには、まず Firebase の標準設定 の手順を行います。
次に、plugins セクションに 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
次に、dependencies セクションに
app/build.gradle.kts 以下を追加します。
implementation(platform("com.google.firebase:firebase-bom:34.10.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
Data Connect Android SDK を初期化する
Data Connect の設定に使用した情報(Firebase コンソールの [Data Connect] タブで確認できます)を使用して、インスタンスを初期化します。
ConnectorConfig オブジェクト
SDK にはコネクタ構成オブジェクトが必要です。
このオブジェクトは、serviceId と location を
dataconnect.yaml で、connectorId を connector.yaml で自動的に生成されます。
コネクタ インスタンスを取得する
構成オブジェクトを設定したら、Data Connect
コネクタ インスタンスを取得します。コネクタのコードは、
Data Connectエミュレータによって生成されます。コネクタ名が movies で
Kotlin パッケージが com.myapplication の場合は、connector.yaml で指定されているように、
次の呼び出しでコネクタ オブジェクトを取得します。
val connector = com.myapplication.MoviesConnector.instance
Android SDK のクエリとミューテーションを使用する
コネクタ オブジェクトを使用すると、 GraphQL ソースコードで定義されているクエリとミューテーションを実行できます。コネクタに次のオペレーションが定義されているとします。
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
}
}
次のようにして映画を作成して取得できます。
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}")
複数の映画を取得することもできます。
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)
クエリの execute() メソッドの呼び出しを使用して新しいクエリ
結果が取得された場合にのみ結果を生成する Flow を収集することもできます。
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
列挙フィールドの変更を処理する
アプリのスキーマには列挙を含めることができ、 GraphQL クエリでアクセスできます。
アプリのデザインが変更されると、サポートされている新しい列挙値を追加できます。たとえば、
アプリケーションのライフサイクルの後半で、
FULLSCREEN 値を AspectRatio 列挙に追加するとします。
Data Connect ワークフローでは、ローカル開発ツールを使用して クエリと SDK を更新できます。
ただし、更新されたバージョンのクライアントをリリースする前に、デプロイ済みの古い クライアントが破損する可能性があります。
復元力のある実装例
生成された SDK では、不明な値の処理が強制されます。これは、顧客のコードで
EnumValue オブジェクトをアンラップする必要があるためです。このオブジェクトは、既知の列挙値の場合は EnumValue.Known、不明な値の場合は EnumValue.Unknown になります。
val result = connector.listMoviesByAspectRatio.execute(AspectRatio.WIDESCREEN)
val encounteredAspectRatios = mutableSetOf<String>()
result.data.movies
.mapNotNull { it.otherAspectRatios }
.forEach { otherAspectRatios ->
otherAspectRatios
.filterNot { it.value == AspectRatio.WIDESCREEN }
.forEach {
when (it) {
is EnumValue.Known -> encounteredAspectRatios.add(it.value.name)
is EnumValue.Unknown ->
encounteredAspectRatios.add("[unknown ratio: ${it.stringValue}]")
}
}
}
println(
"Widescreen movies also include additional aspect ratios: " +
encounteredAspectRatios.sorted().joinToString()
)
Android アプリのプロトタイプを作成してテストする
ローカル エミュレータを使用するようにクライアントをインストルメントする
Data Connect エミュレータは、 Data Connect VS Code 拡張機能または CLI から使用できます。
エミュレータに接続するようにアプリをインストルメントする方法は、どちらのシナリオでも同じです。
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
本番環境リソースに切り替えるには、エミュレータに接続するための 行をコメントアウトします。
Data Connect SDK のデータ型
Data Connect サーバーは、一般的な GraphQL データ 型とカスタム GraphQL データ型を表します。これらは SDK で次のように表されます。
| Data Connect の型 | Kotlin |
|---|---|
| 文字列 | 文字列 |
| Int | Int(32 ビット整数) |
| 浮動小数点数 | Double(64 ビット浮動小数点数) |
| ブール値 | ブール値 |
| UUID | java.util.UUID |
| 日付 | com.google.firebase.dataconnect.LocalDate(16.0.0-beta03 までは java.util.Date) |
| タイムスタンプ | com.google.firebase.Timestamp |
| Int64 | Long |
| すべて | com.google.firebase.dataconnect.AnyValue |