Bắt đầu sử dụng Firebase SQL Connect trên Android

Trong hướng dẫn bắt đầu nhanh này, bạn sẽ tạo và triển khai một cơ sở dữ liệu mẫu nhỏ, đồng thời truy cập vào cơ sở dữ liệu đó từ một ứng dụng Android.

Điều kiện tiên quyết

Để hoàn tất hướng dẫn bắt đầu nhanh này, bạn cần có những thông tin sau:

  • Một môi trường đã cài đặt các công cụ sau:
    • Một phiên bản gần đây của Android Studio.
    • Firebase CLI. Nếu bạn đã cài đặt NPM, hãy chạy:
      npm install -g firebase-tools@latest
      Nếu không, hãy xem tài liệu để biết hướng dẫn cài đặt.
  • Tài khoản Google.

Hướng dẫn

Hướng dẫn

1. Tạo một dự án Android Studio mới

Trong Android Studio, hãy tạo một dự án mới bằng mẫu Empty Activity (Hoạt động trống).

Đặt tên cho dự án là Quickstart App (Ứng dụng bắt đầu nhanh) với tên gói com.example.quickstartapp.

Hộp thoại dự án mới của Android Studio

2. Thêm Firebase vào dự án Android Studio

Thêm các phần phụ thuộc của Firebase và trình bổ trợ Kotlin serialization vào tệp 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. Khởi chạy một dự án Firebase

Chuyển sang thư mục dự án Android Studio và khởi chạy một dự án Firebase trong thư mục đó.

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

Khi được nhắc, hãy chọn các lựa chọn sau:

  • Tạo một dự án Firebase mới.
  • Không tạo giản đồ bằng Gemini (trong hướng dẫn này, bạn sẽ sử dụng một giản đồ ví dụ được tạo sẵn).
  • Cung cấp một cơ sở dữ liệu và phiên bản Cloud SQL dùng thử miễn phí.

Chấp nhận các giá trị mặc định cho tất cả các lời nhắc khác.

Tiếp theo, hãy đăng ký ứng dụng Android trong dự án Firebase.

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

4. Xem lại các định nghĩa GraphQL mẫu

Trong SQL Connect, bạn xác định tất cả các giản đồ và thao tác cơ sở dữ liệu bằng GraphQL. Khi bạn khởi chạy dự án, CLI Firebase đã tạo một số định nghĩa mẫu để giúp bạn bắt đầu.

dataconnect/schema/schema.gql (đoạn trích)
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 (đoạn trích)
query ListMovies @auth(level: PUBLIC) {
  movies {
    id
    title
    imageUrl
    genre
  }
}

5. Triển khai giản đồ và các thao tác

Mỗi khi thay đổi giản đồ, truy vấn hoặc đột biến cơ sở dữ liệu, bạn phải triển khai các thay đổi đó để chúng có hiệu lực trên cơ sở dữ liệu.

firebase deploy --only dataconnect

6. Điền dữ liệu mẫu vào cơ sở dữ liệu

Dữ liệu ban đầu này sẽ giúp bạn có thông tin để xem xét khi kiểm thử ứng dụng mẫu. Xin lưu ý rằng trong bước này, bạn đang thực thi GraphQL tuỳ ý, được phép thực hiện các tác vụ quản trị.

firebase dataconnect:execute dataconnect/seed_data.gql

7. Tạo SDK ứng dụng Android

Lệnh này sử dụng các định nghĩa GraphQL của bạn để tạo một SDK ứng dụng Android dành riêng cho cơ sở dữ liệu của bạn. Bạn dùng thư viện này trong ứng dụng khách để thực hiện tất cả các thao tác liên quan đến cơ sở dữ liệu.

Bạn có thể tạo thư viện cho nhiều nền tảng, bao gồm Swift cho iOS, JavaScript cho web và Flutter, bằng cách thêm các định nghĩa vào connector.yaml.

firebase dataconnect:sdk:generate
SDK Android được tạo tự động (trích đoạn)
public interface ExampleConnector : GeneratedConnector<ExampleConnector> {
  override val dataConnect: com.google.firebase.dataconnect.FirebaseDataConnect

  public val listMovies: ListMoviesQuery

  // ...
}

8. Viết một ứng dụng mẫu trên Android

Thay thế nội dung của app/src/main/java/com/example/sequel/MainActivity.kt bằng ứng dụng Android đơn giản này.

Lưu ý rằng ứng dụng hoàn tất việc truy cập cơ sở dữ liệu cần thiết bằng cách sử dụng một hàm từ SDK đã tạo.

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. Dùng thử ứng dụng

Trong Android Studio, hãy chạy ứng dụng mẫu để xem ứng dụng này hoạt động.

Các bước tiếp theo

Hãy thử tiện ích SQL Connect VS Code

Khi phát triển bằng SQL Connect, bạn nên sử dụng tiện ích SQL Connect VS Code. Ngay cả khi bạn không sử dụng Visual Studio Code làm môi trường phát triển chính, tiện ích này vẫn cung cấp một số tính năng giúp việc phát triển lược đồ và thao tác trở nên thuận tiện hơn:

  • Một máy chủ ngôn ngữ GraphQL, cung cấp tính năng kiểm tra cú pháp và đề xuất tự động hoàn thành dành riêng cho SQL Connect
  • Các nút CodeLens nằm cùng dòng với mã của bạn, cho phép bạn đọc và ghi dữ liệu từ các tệp định nghĩa lược đồ, đồng thời thực thi các truy vấn và đột biến từ các định nghĩa thao tác.
  • Tự động đồng bộ hoá các SDK đã tạo với các định nghĩa GraphQL.
  • Thiết lập trình mô phỏng cục bộ đơn giản.
  • Đơn giản hoá việc triển khai cho kênh phát hành công khai.

Sử dụng trình mô phỏng SQL Connect để phát triển cục bộ

Mặc dù hướng dẫn này cho bạn biết cách triển khai trực tiếp các lược đồ và thao tác SQL Connect vào thực tế, nhưng có thể bạn sẽ không muốn thực hiện các thay đổi đối với cơ sở dữ liệu thực tế trong khi đang tích cực phát triển ứng dụng. Thay vào đó, hãy thiết lập trình mô phỏng SQL Connect và thực hiện công việc phát triển dựa trên trình mô phỏng này thay vì thực tế. Trình mô phỏng thiết lập một phiên bản PGlite cục bộ hoạt động tương tự như một phiên bản PostgreSQL trực tiếp trên Cloud SQL.

Tìm hiểu cách viết giản đồ và các thao tác cho ứng dụng của bạn

Khi phát triển ứng dụng bằng SQL Connect, việc thiết kế các lược đồ và thao tác là một trong những nhiệm vụ phát triển đầu tiên và quan trọng nhất mà bạn sẽ hoàn thành.

  • Gemini trong bảng điều khiển Firebase là một công cụ AI có thể tạo lược đồ SQL Connect từ nội dung mô tả bằng ngôn ngữ tự nhiên về ứng dụng của bạn. Công cụ này có thể giúp bạn bắt đầu rất nhanh, đặc biệt nếu bạn chưa từng làm việc với cơ sở dữ liệu quan hệ trước đây.
  • Ngoài ra, bạn có thể viết trực tiếp các lược đồ cơ sở dữ liệu, truy vấn và đột biến bằng GraphQL. Bắt đầu với hướng dẫn trong phần Thiết kế các lược đồ SQL Connect, sau đó tiếp tục xem các trang tiếp theo để tìm hiểu cách viết các thao tác.