Firebase SQL Connect 使用入门 (Android)

在本快速入门中,您将创建一个小型示例数据库并进行部署,然后从 Android 应用访问该数据库。

前提条件

如需完成本快速入门,您需要具备以下条件:

  • 安装了以下工具的环境:
    • 最新版本的 Android Studio
    • Firebase CLI。如果您已安装 NPM,请运行以下命令:
      npm install -g firebase-tools@latest
      否则,请参阅相关文档,了解安装说明。
  • Google 账号。

教程

教程

1. 创建新的 Android Studio 项目

在 Android Studio 中,使用 Empty Activity 模板创建一个新项目。

将项目命名为 Quickstart App,并将软件包名称设为 com.example.quickstartapp

Android Studio“新建项目”对话框

2. 将 Firebase 添加到您的 Android Studio 项目

将 Firebase 依赖项和 Kotlin 序列化插件添加到您的 build.gradle.kts 文件中。

QuickstartApp/build.gradle.kts
plugins {
  alias(libs.plugins.android.application) apply false
  alias(libs.plugins.kotlin.compose) apply false

  // Add this line.
  id("com.google.gms.google-services") version "4.5.0" apply false
}
QuickstartApp/app/build.gradle.kts
plugins {
  alias(libs.plugins.android.application)
  alias(libs.plugins.kotlin.compose)

  // Add these lines.
  kotlin("plugin.serialization") version libs.versions.kotlin
  id("com.google.gms.google-services")
}

// ...

dependencies {
  // ...

  // Add these lines.
  implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.11.0")
  implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.11.0")

  implementation(platform("com.google.firebase:firebase-bom:34.15.0"))
  implementation("com.google.firebase:firebase-dataconnect")
}

3. 初始化 Firebase 项目

切换到 Android Studio 项目目录,并在其中初始化 Firebase 项目。

cd ~/QuickstartApp
firebase login --reauth
firebase init dataconnect

出现提示时,请选择以下选项:

  • 创建新的 Firebase 项目。
  • 不使用 Gemini 创建架构(在本教程中,您将使用预构建的示例架构)。
  • 预配免费试用 Cloud SQL 实例和数据库。

接受所有其他提示的默认值。

接下来,在 Firebase 项目中注册您的 Android 应用。

firebase apps:create -a com.example.quickstartapp android android-quickstart
firebase apps:sdkconfig android -o app/google-services.json

4. 查看示例 GraphQL 定义

SQL Connect 中,您可以使用 GraphQL 定义所有数据库架构和操作。初始化项目时,Firebase CLI 会创建一些示例定义,帮助您入门。

dataconnect/schema/schema.gql(摘录)
type Movie @table {
  title: String!
  imageUrl: String!
  genre: String
}

type MovieMetadata @table {
  movie: Movie! @unique
  rating: Float
  releaseYear: Int
  description: String
}
dataconnect/example/queries.gql(摘录)
query ListMovies @auth(level: PUBLIC) {
  movies {
    id
    title
    imageUrl
    genre
  }
}

5. 部署架构和操作

无论何时对数据库架构、查询或突变进行更改,您都必须部署这些更改,才能使它们在数据库中生效。

firebase deploy --only dataconnect

6. 使用示例数据为数据库播种

此初始数据将为您提供在测试示例应用时可供查看的内容。请注意,在此步骤中,您正在执行任意 GraphQL,这对于管理任务是允许的。

firebase dataconnect:execute dataconnect/seed_data.gql

7. 生成 Android 客户端 SDK

此命令使用您的 GraphQL 定义生成专门针对您的数据库的 Android 客户端 SDK。您可以在客户端应用中使用此库来执行所有数据库操作。

您可以通过向 connector.yaml 添加定义,为多个平台生成库,包括适用于 iOS 的 Swift、适用于 Web 的 JavaScript 和 Flutter。

firebase dataconnect:sdk:generate
自动生成的 Android SDK(摘录)
public interface ExampleConnector : GeneratedConnector<ExampleConnector> {
  override val dataConnect: com.google.firebase.dataconnect.FirebaseDataConnect

  public val listMovies: ListMoviesQuery

  // ...
}

8. 编写示例 Android 客户端

app/src/main/java/com/example/quickstartapp/MainActivity.kt 的内容替换为这个简单的 Android 应用。

请注意,应用使用生成的 SDK 中的函数完成必要的数据库访问。

package com.example.quickstartapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import com.example.quickstartapp.ui.theme.QuickstartAppTheme
import com.google.firebase.dataconnect.generated.ExampleConnector
import com.google.firebase.dataconnect.generated.ListMoviesQuery
import com.google.firebase.dataconnect.generated.execute
import com.google.firebase.dataconnect.generated.instance

class MainActivity : ComponentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enableEdgeToEdge()
    setContent {
      QuickstartAppTheme() {
        Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
          var movies by remember {
            mutableStateOf(emptyList<ListMoviesQuery.Data.MoviesItem>())
          }
          LaunchedEffect(Unit) {
            // Queries need to be executed in a coroutine context
            try {
              movies = ExampleConnector.instance.listMovies.execute().data.movies
            } catch (e: Exception) {
              // TODO: Handle error, e.g., show a Toast or update a state variable to
              //   display an error message.
            }
          }
          LazyColumn(modifier = Modifier.padding(innerPadding)) {
            items(movies) { movie ->
              Text(text = movie.title)
            }
          }
        }
      }
    }
  }
}

9. 试用此应用

在 Android Studio 中运行示例应用,查看其运行效果。

后续步骤

试用 SQL Connect VS Code 扩展程序

使用 SQL Connect 进行开发时,我们强烈建议使用 SQL Connect VS Code 扩展程序。 即使您不使用 Visual Studio Code 作为主要开发环境,该扩展程序也提供了多项功能,可让架构和操作开发更加便捷:

  • 一个 GraphQL 语言服务器,提供特定于 SQL Connect 的语法检查和自动补全建议
  • 与代码位于同一行的 CodeLens 按钮,可让您从架构定义文件中读取和写入数据,并从操作定义中执行查询和突变。
  • 自动使生成的 SDK 与 GraphQL 定义保持同步。
  • 简化了本地模拟器设置。
  • 简化了向生产环境的部署。

使用 SQL Connect 模拟器进行本地开发

虽然本教程介绍了如何将 SQL Connect 架构和操作直接部署到生产环境,但您可能不希望在积极开发应用时更改生产数据库。建议您设置 SQL Connect 模拟器,并针对该模拟器(而非生产环境)开展开发工作。模拟器会设置一个本地 PGlite 实例,该实例的行为与 Cloud SQL 上的实时 PostgreSQL 实例类似。

了解如何为应用编写架构和操作

使用 SQL Connect 开发应用时,设计架构和操作是您要完成的首要任务之一,也是最重要的开发任务之一。

  • Firebase 控制台中的 Gemini 是一款 AI 工具,可根据应用的自然语言描述生成 SQL Connect 架构。借助此工具,您可以非常快速地开始使用,尤其是在您之前从未处理过关系型数据库的情况下。
  • 或者,您也可以直接使用 GraphQL 编写数据库架构、查询和变更。首先,请参阅设计 SQL Connect 架构中的指南,然后继续浏览后续页面,了解如何编写操作。

了解如何从 SQL Connect 获取实时更新

您可以使用 SQL Connect 编写可实时响应数据变化的客户端应用。 请参阅获取来自 SQL Connect 的实时更新