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.4.4" 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.14.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/sequel/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 实例,其行为与实时 PostgreSQL 实例在 Cloud SQL 上的行为类似。

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

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

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