Trong phần hướng dẫn nhanh này, bạn sẽ tìm hiểu cách tạo Firebase Data Connect trong ứng dụng bằng một phiên bản SQL chính thức.
Trong bảng điều khiển Firebase, bạn sẽ:
- Thêm Firebase Data Connect vào dự án Firebase.
- Tạo một giản đồ cho ứng dụng trong bảng điều khiển Firebase bằng cách sử dụng tính năng Trợ giúp giản đồ và triển khai giản đồ đó.
- Cung cấp một phiên bản Cloud SQL cho ứng dụng của bạn.
- Với Gemini Code Assist, hãy điền dữ liệu mẫu vào cơ sở dữ liệu.
Sau đó, trong môi trường phát triển cục bộ, bạn sẽ:
- Thiết lập công cụ phát triển, bao gồm cả tiện ích Visual Studio Code để hoạt động với phiên bản phát hành chính thức.
- Đồng bộ hoá môi trường cục bộ với các thành phần bạn đã tạo trong bảng điều khiển.
- Sử dụng công cụ tiện ích để giúp bạn triển khai một truy vấn sẽ được sử dụng trong ứng dụng.
- Tạo SDK có kiểu mạnh và sử dụng các SDK đó trong ứng dụng.
- Triển khai giản đồ, truy vấn và dữ liệu cuối cùng lên đám mây.
Quy trình trên bảng điều khiển: Thiết kế giản đồ và triển khai giản đồ đó cho cơ sở dữ liệu
- Nếu chưa có, hãy tạo một dự án Firebase.
- Trong bảng điều khiển Firebase, hãy nhấp vào Thêm dự án, sau đó làm theo hướng dẫn trên màn hình.
- Chuyển đến phần Data Connect của bảng điều khiển Firebase.
- Nhấp vào nút Bắt đầu sử dụng Gemini.
- Trong bảng điều khiển quy trình công việc Schema Generator (Trình tạo giản đồ) xuất hiện, hãy mô tả một ứng dụng để Gemini có thể giúp bạn tạo giản đồ GraphQL.
- Xem lại giản đồ GraphQL, sau đó nhấp vào Nâng cấp và triển khai.
Nâng cấp dự án lên gói Blaze. Thao tác này cho phép bạn tạo một phiên bản Cloud SQL cho PostgreSQL.
Chọn Tạo phiên bản Cloud SQL mới. Trong hộp thoại xuất hiện, hãy chọn vị trí và đặt tên cho cơ sở dữ liệu Cloud SQL cho PostgreSQL.
Giản đồ ứng dụng của bạn được triển khai cùng với cơ sở dữ liệu PostgreSQL tương ứng với giản đồ đó.
Quy trình trên bảng điều khiển: Sử dụng Gemini trong Firebase để tạo một đột biến và điền cơ sở dữ liệu
Khi hoàn tất bước trước, bạn đã tạo một giản đồ Data Connect bao gồm các loại thực thể có liên quan và triển khai giản đồ đó cho môi trường sản xuất, nghĩa là cơ sở dữ liệu PostgreSQL với các bảng tương ứng cũng được tạo và triển khai.
Để điền sẵn cơ sở dữ liệu, bạn có thể sử dụng Gemini trong Firebase để giúp bạn nhập dữ liệu bằng ngôn ngữ tự nhiên nhằm xác định sự thay đổi GraphQL để cập nhật một trong các bảng và truy vấn để xác nhận nội dung cập nhật.
Mở thẻ Dữ liệu.
Nhấp vào biểu tượng Giúp tôi viết GraphQL pen_spark và nhập nội dung bạn muốn trong hộp xuất hiện.
Ví dụ:
Add data for three sample products to my app.
Nhấp vào Tạo. Phương thức này sẽ trả về kết quả đột biến.
Xem lại kết quả. Nếu cần, hãy nhấp vào Chỉnh sửa để tinh chỉnh câu lệnh rồi nhấp vào Tạo lại.
Tiếp theo, hãy nhấp vào Chèn để chèn đột biến vào trình chỉnh sửa dữ liệu.
Nhấp vào Chạy.
Khi bạn chạy phép biến đổi, dữ liệu sẽ được ghi vào bảng có liên quan trong cơ sở dữ liệu PostgreSQL. Bạn có thể tạo truy vấn trong bảng điều khiển để xem dữ liệu đã lưu trữ:
Lặp lại các bước trước đó, sử dụng Giúp tôi viết GraphQL pen_spark để tạo truy vấn.
Trong hộp xuất hiện, hãy nhập nội dung bạn muốn.
Ví dụ:
Query data for all sample products in my app.
Nhấp vào Tạo, rồi nhấp vào Chạy.
Quy trình cục bộ: Chọn công cụ phát triển
Giờ đây, khi đã có dữ liệu trong cơ sở dữ liệu đã triển khai, bạn có thể tiếp tục phát triển schema và trình kết nối trong môi trường phát triển cục bộ.
Trước tiên, bạn cần thiết lập môi trường cục bộ. Data Connect cung cấp cho bạn hai cách để cài đặt các công cụ phát triển.
Quy trình cục bộ: Thiết lập môi trường phát triển
- Tạo một thư mục mới cho dự án cục bộ.
Chạy lệnh sau trong thư mục mới mà bạn đã tạo.
curl -sL https://firebase.tools/dataconnect | bash
Tập lệnh này sẽ cố gắng thiết lập môi trường phát triển cho bạn và khởi chạy IDE dựa trên trình duyệt. IDE này cung cấp các công cụ, bao gồm cả một tiện ích VS Code được đóng gói sẵn, để giúp bạn quản lý giản đồ và xác định các truy vấn và đột biến sẽ được sử dụng trong ứng dụng, cũng như tạo các SDK có kiểu mạnh.
alias dataconnect='curl -sL https://firebase.tools/dataconnect | bash'
Quy trình cục bộ: Thiết lập thư mục dự án
Để thiết lập dự án cục bộ, hãy khởi chạy thư mục dự án. Trong cửa sổ IDE, trong bảng điều khiển bên trái, hãy nhấp vào biểu tượng Firebase để mở giao diện người dùng của tiện ích Data Connect VS Code:
- Nhấp vào nút Đăng nhập bằng Google.
- Nhấp vào nút Kết nối dự án Firebase rồi chọn dự án bạn đã tạo trước đó trong bảng điều khiển.
Nhấp vào nút Run firebase init (Chạy firebase init) rồi hoàn tất quy trình.
Nhấp vào nút Start emulators (Bắt đầu trình mô phỏng).
Quy trình cục bộ: Tìm giản đồ trong môi trường cục bộ
Bước firebase init
trong phần trước đã đồng bộ hoá giản đồ bạn đã triển khai từ bảng điều khiển với môi trường phát triển cục bộ.
Tìm giản đồ: giản đồ nằm trong thư mục dự án Firebase, trong tệp /dataconnect/schema/schema.gql
.
Luồng cục bộ: Làm việc với giản đồ
Ví dụ về giản đồ: Phim
Trong Data Connect, các trường GraphQL được liên kết với các cột. Loại Movie
có thể có id
, title
, imageUrl
và genre
.
Data Connect nhận dạng các kiểu dữ liệu gốc String
và UUID
.
# File `/dataconnect/schema/schema.gql`
# By default, a UUID id key will be created by default as primary key.
type Movie @table {
id: UUID! @default(expr: "uuidV4()")
title: String!
imageUrl: String!
genre: String
}
Ví dụ về giản đồ bảng 1:1: MovieMetadata
Đối với phim, bạn có thể lập mô hình siêu dữ liệu của phim.
Ví dụ: trong schema.gql
, bạn có thể thêm đoạn mã sau hoặc xem lại mã do Gemini tạo.
# Movie - MovieMetadata is a one-to-one relationship
type MovieMetadata @table {
# This time, we omit adding a primary key because
# you can rely on Data Connect to manage it.
# @unique indicates a 1-1 relationship
movie: Movie! @unique
# movieId: UUID <- this is created by the above reference
rating: Float
releaseYear: Int
description: String
}
Lưu ý rằng trường movie
được liên kết với một loại Movie
.
Data Connect hiểu rằng đây là mối quan hệ giữa Movie
và MovieMetadata
và sẽ quản lý mối quan hệ này cho bạn.
Tìm hiểu thêm về giản đồ Data Connect trong tài liệu
Luồng cục bộ: Thêm dữ liệu khác vào bảng
Trong bảng điều khiển trình chỉnh sửa IDE, bạn có thể thấy các nút CodeLens xuất hiện trên các loại GraphQL trong /dataconnect/schema/schema.gql
. Tương tự như trong bảng điều khiển, bạn có thể tạo một đột biến để thêm dữ liệu vào cơ sở dữ liệu chính thức.
Khi làm việc cục bộ, để thêm dữ liệu vào bảng:
- Trong
schema.gql
, hãy nhấp vào nút Add data (Thêm dữ liệu) phía trên phần khai báo cho một trong các loại của bạn (nhưMovie
,Product
,Account
, tuỳ thuộc vào bản chất của ứng dụng).
- Một tệp mới,
<type>_insert.qgl
, được thêm vào thư mục đang hoạt động, chẳng hạn nhưMovie_insert.gql
hoặcProduct_insert.gql
. Mã hoá cứng dữ liệu trong các trường cho loại đó. - Nhấp vào nút Run (Production) (Chạy (Bản chính thức)).
- Lặp lại các bước trước đó để thêm bản ghi vào các bảng khác.
Cách nhanh chóng xác minh dữ liệu đã được thêm:
- Quay lại
schema.gql
, hãy nhấp vào nút Read data (Đọc dữ liệu) phía trên phần khai báo loại. - Trong tệp
<type>_read.gql
thu được, chẳng hạn nhưProduct_read.gql
, hãy nhấp vào nút Run (Production) (Chạy (Sản xuất)) để thực thi truy vấn.
Tìm hiểu thêm về các đột biến Data Connect trong tài liệu
Luồng cục bộ: Xác định truy vấn
Giờ là phần thú vị, truy vấn. Là một nhà phát triển, bạn đã quen với việc viết truy vấn SQL thay vì truy vấn GraphQL, vì vậy, ban đầu, bạn có thể cảm thấy hơi khác. Tuy nhiên, GraphQL ngắn gọn và an toàn về loại hơn nhiều so với SQL thô. Tiện ích VS Code của chúng tôi cũng giúp bạn dễ dàng phát triển.
Để triển khai một truy vấn, bạn có thể điều chỉnh một truy vấn được tạo bằng CodeLens của chúng tôi:
- Trong
/dataconnect/schema/schema.gql
, phía trên một loại (Movie
,Product
,Account
, v.v.), hãy nhấp vào nút CodeLens Read data (Đọc dữ liệu). - Trong tệp
<type>_read.gql
thu được, hãy kiểm thử truy vấn bằng cách nhấp vào nút Run (Production) (Chạy (Sản xuất)). - Sao chép truy vấn đang hoạt động vào
/dataconnect/connector/queries.gql
. Để có thể triển khai truy vấn này, hãy khai báo một tên riêng biệt cho truy vấn đó.
Ví dụ: trong ví dụ chung sau,
query_name
có thể làListMovies
,ListProducts
hoặcListAccounts
.
# File `/dataconnect/connector/queries.gql`
# @auth() directives control who can call each operation.
query <query_name> @auth(level: PUBLIC) {
<table_name> {
<field_1>
<field_2>
<field_3>
}
}
Thực thi truy vấn bằng nút CodeLens ở gần.
Tìm hiểu thêm về truy vấn Data Connect trong tài liệu
Quy trình cục bộ: Tạo SDK
- Nhấp vào nút Thêm SDK vào ứng dụng.
Trong hộp thoại xuất hiện, hãy chọn một thư mục chứa mã cho ứng dụng của bạn. Mã SDK Data Connect sẽ được tạo và lưu tại đó.
Chọn nền tảng ứng dụng, sau đó lưu ý rằng mã SDK sẽ được tạo ngay trong thư mục bạn đã chọn.
Quy trình cục bộ: Triển khai giản đồ và truy vấn vào môi trường sản xuất
Bạn đã thực hiện một vòng lặp phát triển. Giờ đây, bạn có thể triển khai giản đồ và truy vấn cho máy chủ bằng giao diện người dùng tiện ích Firebase hoặc CLI Firebase, giống như cách bạn đã làm với giản đồ.
Trong cửa sổ IDE, trong giao diện người dùng của Tiện ích VS Code, hãy nhấp vào nút Deploy to production (Triển khai lên phiên bản chính thức).
Sau khi triển khai, hãy chuyển đến bảng điều khiển Firebase để xác minh các bản cập nhật giản đồ (nếu có) và các thao tác đã được tải lên đám mây. Bạn cũng có thể xem giản đồ và chạy các thao tác trên bảng điều khiển. Phiên bản Cloud SQL cho PostgreSQL sẽ được cập nhật bằng giản đồ và dữ liệu được tạo đã triển khai cuối cùng.
Tìm hiểu thêm về cách sử dụng trình mô phỏng Data Connect trong tài liệu
Quy trình cục bộ: Sử dụng SDK để gọi truy vấn của bạn từ một ứng dụng
Giờ đây, khi giản đồ đã cập nhật (nếu có) và truy vấn của bạn được triển khai vào môi trường phát hành chính thức, bạn có thể sử dụng SDK mà Data Connect đã tạo để triển khai lệnh gọi đến truy vấn ListMovies
.
- Thêm Firebase vào ứng dụng web.
Trong tệp chính của ứng dụng React:
- nhập SDK đã tạo
- gọi các phương thức Data Connect.
import React from 'react'; import ReactDOM from 'react-dom/client'; // Generated queries. // Update as needed with the path to your generated SDK. import { listMovies, ListMoviesData } from '@movie-app/movies'; function App() { const [movies, setMovies] = useState<ListMoviesData['movies']>([]); useEffect(() => { listMovies.then(res => setMovies(res.data)); }, []); return ( movies.map(movie => <h1>{movie.title}</h1>); ); } const root = ReactDOM.createRoot(document.getElementById('root')); root.render(<App />);
- Thêm Firebase vào ứng dụng iOS.
Để sử dụng SDK đã tạo, hãy định cấu hình SDK đó dưới dạng phần phụ thuộc trong Xcode.
Trong thanh điều hướng trên cùng của Xcode, hãy chọn File (Tệp) > Add Package Dependencies (Thêm phần phụ thuộc gói) > Add Local (Thêm cục bộ) rồi chọn thư mục chứa
Package.swift
đã tạo.Trong trình uỷ quyền chính của ứng dụng:
- nhập SDK đã tạo
- gọi các phương thức Data Connect.
import SwiftUI import FirebaseDataConnect // Generated queries. // Update as needed with the package name of your generated SDK. import <CONNECTOR-PACKAGE-NAME> let connector = DataConnect.moviesConnector struct ListMovieView: View { @StateObject private var queryRef = connector.listMovies.ref() var body: some View { VStack { Button { Task { do { try await refresh() } catch { print("Failed to refresh: \(error)") } } } label: { Text("Refresh") } // use the query results in a view ForEach(queryRef.data?.movies ?? []) { movie in Text(movie.title) } } } @MainActor func refresh() async throws { _ = try await queryRef.execute() } struct ContentView_Previews: PreviewProvider { static var previews: some View { ListMovieView() } }
- Thêm Firebase vào ứng dụng Android.
Để sử dụng SDK đã tạo, hãy định cấu hình Data Connect làm phần phụ thuộc trong Gradle.
Cập nhật
plugins
vàdependencies
trongapp/build.gradle.kts
.plugins { // Use whichever versions of these dependencies suit your application. // The versions shown here were the latest as of March 14, 2025. // Note, however, that the version of kotlin("plugin.serialization") must, // in general, match the version of kotlin("android"). id("com.android.application") version "8.9.0" id("com.google.gms.google-services") version "4.4.2" val kotlinVersion = "2.1.10" kotlin("android") version kotlinVersion kotlin("plugin.serialization") version kotlinVersion } dependencies { // Use whichever versions of these dependencies suit your application. // The versions shown here were the latest versions as of March 14, 2025. implementation("com.google.firebase:firebase-dataconnect:16.0.0-beta04") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1") implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3") // These dependencies are not strictly required, but will very likely be used // when writing modern Android applications. implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0") implementation("androidx.appcompat:appcompat:1.7.0") implementation("androidx.activity:activity-ktx:1.10.1") implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7") implementation("com.google.android.material:material:1.12.0") }
Trong hoạt động chính của ứng dụng:
- nhập SDK đã tạo
- gọi các phương thức Data Connect.
import android.os.Bundle import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import kotlinx.coroutines.launch private val connector = com.myapplication.MoviesConnector.instance class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val textView: TextView = findViewById(R.id.text_view) lifecycleScope.launch { lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) { val result = connector.listMovies.runCatching { execute { } } val newTextViewText = result.fold( onSuccess = { val titles = it.data.movies.map { it.title } "${titles.size} movies: " + titles.joinToString(", ") }, onFailure = { "ERROR: ${it.message}" } ) textView.text = newTextViewText } } } }
- Thêm Firebase vào ứng dụng Flutter.
- Cài đặt flutterfire CLI
dart pub global activate flutterfire_cli
. - Chạy
flutterfire configure
. - Trong hàm chính của ứng dụng:
- nhập SDK đã tạo
- gọi các phương thức Data Connect.
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'firebase_options.dart';
// Generated queries.
// Update as needed with the path to your generated SDK
import 'movies_connector/movies.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Column(children: [
ConstrainedBox(
constraints: const BoxConstraints(maxHeight: 200),
child: FutureBuilder(
future: MoviesConnector.instance.listMovies().execute(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return ListView.builder(
scrollDirection: Axis.vertical,
itemBuilder: (context, index) => Card(
child: Text(
snapshot.data!.data.movies[index].title,
)),
itemCount: snapshot.data!.data.movies.length,
);
}
return const CircularProgressIndicator();
}),
)
])));
}
}
Các bước tiếp theo
Xem lại dự án đã triển khai và khám phá các công cụ khác:
- Thêm dữ liệu vào cơ sở dữ liệu, kiểm tra và sửa đổi giản đồ cũng như theo dõi dịch vụ Data Connect trong bảng điều khiển Firebase.
Xem thêm thông tin trong tài liệu. Ví dụ: vì bạn đã hoàn tất hướng dẫn nhanh:
- Tìm hiểu thêm về phát triển lược đồ, truy vấn và đột biến
- Tìm hiểu về cách tạo SDK ứng dụng và gọi các truy vấn và đột biến từ mã ứng dụng cho web, Android, iOS và Flutter.