Thông tin về lớp học lập trình này
1. Tổng quan
Trong lớp học lập trình này, bạn sẽ tích hợp Firebase Data Connect với cơ sở dữ liệu Cloud SQL để tạo một ứng dụng Android đánh giá phim. Bạn sẽ tìm hiểu cách:
- Viết giản đồ GraphQL cho Firebase Data Connect
- Viết truy vấn và đột biến
- Triển khai quy trình xác thực người dùng để bảo mật dữ liệu
Điều kiện tiên quyết
- Phiên bản mới nhất của Android Studio
- Trình mô phỏng Android có API cấp 23 trở lên
Kiến thức bạn sẽ học được
- Cách thiết lập Firebase Data Connect bằng trình mô phỏng cục bộ.
- Cách thiết kế giản đồ dữ liệu bằng Data Connect và GraphQL.
- Cách viết truy vấn và đột biến cho ứng dụng đánh giá phim.
- Cách tạo SDK Kotlin và sử dụng SDK đó trong ứng dụng Android.
- (Không bắt buộc) Cách triển khai dịch vụ Data Connect cho phiên bản chính thức.
2. Thiết lập dự án mẫu
Tạo dự án Firebase
- Đăng nhập vào bảng điều khiển của Firebase bằng Tài khoản Google của bạn.
- Trong bảng điều khiển của Firebase, hãy nhấp vào Thêm dự án.
- Nhập tên cho dự án Firebase (ví dụ: "Bài đánh giá phim") rồi nhấp vào Tiếp tục.
- Bạn có thể được yêu cầu bật Google Analytics. Đối với mục đích của lớp học lập trình này, lựa chọn của bạn không quan trọng.
- Sau khoảng một phút, dự án Firebase của bạn sẽ sẵn sàng. Nhấp vào Tiếp tục.
Tải mã xuống
Chạy lệnh sau để nhân bản mã mẫu cho lớp học lập trình này. Thao tác này sẽ tạo một thư mục có tên codelab-dataconnect-android
trên máy của bạn:
git clone https://github.com/firebaseextended/codelab-dataconnect-android.git
Nếu máy của bạn không có git, bạn cũng có thể tải mã xuống trực tiếp từ GitHub.
Thêm cấu hình Firebase
- Trong bảng điều khiển của Firebase, hãy chọn mục Tổng quan về dự án trong thanh điều hướng bên trái. Nhấp vào nút Android để chọn nền tảng. Khi được nhắc tên gói, hãy sử dụng
com.google.firebase.example.dataconnect
- Nhấp vào Đăng ký ứng dụng rồi làm theo hướng dẫn để tải tệp
google-services.json
xuống và di chuyển tệp đó vào thư mụcapp/
của mã bạn vừa tải xuống. Sau đó, hãy nhấp vào Tiếp theo.
3. Thiết lập Data Connect
Lắp đặt
Cài đặt tự động
Chạy lệnh sau trong thư mục codelab-dataconnect-android
:
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à chạy một IDE dựa trên trình duyệt. IDE này cung cấp các công cụ, bao gồm cả 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.
Sau khi chạy tập lệnh, VS Code sẽ tự động mở ra.
Lưu ý: Nếu bạn đã cài đặt phiên bản VS Code dành cho máy tính, thì tập lệnh sẽ tự động mở phiên bản đó. Nếu tập lệnh không thành công, hãy làm theo các bước cài đặt thủ công bên dưới.
Cài đặt theo cách thủ công
- Cài đặt Visual Studio Code
- Cài đặt Node.js
- Trong VS Code, hãy mở thư mục
codelab-dataconnect-android
. - Cài đặt tiện ích Firebase Data Connect từ Visual Studio Code Marketplace.
Khởi chạy Data Connect trong dự án
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. Một cửa sổ trình duyệt sẽ mở ra; hãy làm theo hướng dẫn để đăng nhập vào tiện ích bằng Tài khoản Google của bạn.
- Nhấp vào nút Kết nối dự án Firebase rồi chọn dự án mà 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 làm theo các bước trong thiết bị đầu cuối tích hợp.
Định cấu hình quá trình tạo SDK
Sau khi bạn nhấp vào nút Run firebase init (Chạy quá trình khởi chạy Firebase), tiện ích Firebase Data Connect sẽ khởi chạy thư mục dataconnect/
cho bạn.
Trong VS Code, hãy mở tệp dataconnect/connector/connector.yaml
và bạn sẽ thấy cấu hình mặc định. Để dễ dàng hình dung quá trình tạo mã trong lớp học lập trình này, hãy thay đổi connectorId thành movies
và gói thành com.google.firebase.example.dataconnect.generated
:
connectorId: movies
generate:
kotlinSdk:
outputDir: ../../app/src/main/java
package: com.google.firebase.example.dataconnect.generated
Để hiểu ý nghĩa của từng trạng thái này, hãy tham khảo:
- connectorId – tên duy nhất của trình kết nối này.
- outputDir – đường dẫn nơi lưu trữ SDK Data Connect đã tạo. Đường dẫn này tương ứng với thư mục chứa tệp connector.yaml.
- package – tên gói sẽ được sử dụng trong SDK đã tạo.
Khởi động trình mô phỏng Firebase
Trong VS Code, hãy nhấp vào nút Start emulators (Bắt đầu trình mô phỏng).
Bạn sẽ thấy trình mô phỏng khởi động trong thiết bị đầu cuối tích hợp. Nếu khởi động đúng cách, bạn sẽ thấy kết quả như sau:
Định cấu hình ứng dụng Android để sử dụng trình mô phỏng cục bộ
- Mở Android Studio.
- Trên màn hình chào mừng của Android Studio, hãy nhấp vào nút Open (Mở) rồi chọn thư mục
codelab-dataconnect-android
. Đợi Gradle đồng bộ hoá. - Sau khi quá trình đồng bộ hoá Gradle hoàn tất, hãy mở tệp
app/src/main/java/com/google/firebase/example/dataconnect/MainActivity.kt
và gọiuseEmulator()
:
import com.google.firebase.example.dataconnect.generated.MoviesConnector
import com.google.firebase.example.dataconnect.generated.instance
class MainActivity : ComponentActivity() {
...
// Initialize Firebase Data Connect
MoviesConnector.instance.dataConnect.useEmulator("10.0.2.2", 9399)
...
}
4. Xác định giản đồ và điền sẵn cơ sở dữ liệu
Trong phần này, bạn sẽ xác định cấu trúc và mối quan hệ giữa các thực thể chính trong ứng dụng phim trong một giản đồ. Các thực thể như Movie
, User
và Review
được liên kết với các bảng cơ sở dữ liệu, với các mối quan hệ được thiết lập bằng cách sử dụng Firebase Data Connect và các lệnh của giản đồ GraphQL.
Các thực thể và mối quan hệ cốt lõi
Loại Movie
chứa các thông tin chi tiết chính như tiêu đề, thể loại và thẻ mà ứng dụng sử dụng cho nội dung tìm kiếm và hồ sơ phim. Loại User
theo dõi các lượt tương tác của người dùng, chẳng hạn như bài đánh giá và lượt yêu thích. Review
kết nối người dùng với các bộ phim, cho phép ứng dụng hiển thị điểm xếp hạng và ý kiến phản hồi do người dùng tạo.
Bảng người dùng
Loại người dùng xác định một thực thể người dùng tương tác với phim bằng cách để lại bài đánh giá hoặc thêm phim vào danh sách yêu thích.
Trong VS Code, hãy mở tệp dataconnect/schema/schema.gql
và bỏ ghi chú (hoặc thêm) định nghĩa bảng User
:
# Users
# Suppose a user can leave reviews for movies
# user -> reviews is a one to many relationship,
# movie -> reviews is a one to many relationship
# movie <-> user is a many to many relationship
type User @table {
id: String! @col(name: "user_auth")
username: String! @col(name: "username", dataType: "varchar(50)")
# The following are generated by the user: User! field in the Review table
# reviews_on_user
# movies_via_Review
}
Bảng phim
Loại Movie xác định cấu trúc chính cho một thực thể phim, bao gồm các trường như title, genre, releaseYear và rating.
Trong VS Code, hãy mở tệp dataconnect/schema/schema.gql
và bỏ ghi chú (hoặc thêm) định nghĩa bảng Movie
:
# Movies
type Movie @table {
# The below parameter values are generated by default with @table, and can be edited manually.
# implies directive `@col(name: "movie_id")`, generating a column name
id: UUID! @default(expr: "uuidV4()")
title: String!
imageUrl: String!
genre: String
}
Bảng MovieMetadata
Loại MovieMetadata thiết lập mối quan hệ một với một với loại Movie. Dữ liệu này bao gồm các dữ liệu bổ sung như đạo diễn của phim.
Trong VS Code, hãy mở tệp dataconnect/schema/schema.gql
và bỏ ghi chú (hoặc thêm) định nghĩa bảng MovieMetadata
:
# Movie - MovieMetadata is a one-to-one relationship
type MovieMetadata @table {
# @unique indicates a 1-1 relationship
movie: Movie! @unique
# movieId: UUID <- this is created by the above reference
rating: Float
releaseYear: Int
description: String
}
Bảng xem xét
Loại Bài đánh giá đại diện cho thực thể bài đánh giá và liên kết các loại Người dùng và Phim theo mối quan hệ nhiều với nhiều (một người dùng có thể để lại nhiều bài đánh giá và mỗi bộ phim có thể có nhiều bài đánh giá).
Trong VS Code, hãy mở tệp dataconnect/schema/schema.gql
và bỏ ghi chú (hoặc thêm) định nghĩa bảng Review
:
# Reviews
type Review @table(name: "Reviews", key: ["movie", "user"]) {
id: UUID! @default(expr: "uuidV4()")
user: User!
movie: Movie!
rating: Int
reviewText: String
reviewDate: Date! @default(expr: "request.time")
}
Các trường được tạo tự động và giá trị mặc định
Giản đồ sử dụng các biểu thức như @default(expr: "uuidV4()")
để tự động tạo mã nhận dạng và dấu thời gian duy nhất. Ví dụ: trường mã nhận dạng trong loại Phim và Bài đánh giá sẽ tự động được điền bằng UUID khi một bản ghi mới được tạo.
Chèn dữ liệu mô phỏng
Khi đã xác định giản đồ, bạn có thể điền sẵn cơ sở dữ liệu bằng dữ liệu mô phỏng để kiểm thử.
- Trong VS Code, hãy mở
dataconnect/moviedata_insert.gql
. Đảm bảo trình mô phỏng trong tiện ích Firebase Data Connect đang chạy. - Bạn sẽ thấy nút Run (local) (Chạy (cục bộ)) ở đầu tệp. Nhấp vào nút này để chèn dữ liệu phim mô phỏng vào cơ sở dữ liệu.
- Kiểm tra thiết bị đầu cuối Data Connect Execution (Thực thi kết nối dữ liệu) để xác nhận rằng bạn đã thêm thành công dữ liệu.
Khi đã có dữ liệu, hãy chuyển sang bước tiếp theo để tìm hiểu cách tạo truy vấn trong Data Connect.
5. Tạo truy vấn để liệt kê phim
Bắt đầu bằng cách tạo một truy vấn để liệt kê phim. Đối với mỗi bộ phim, bạn sẽ tìm nạp mã nhận dạng, tiêu đề, imageUrl và thể loại.
Xác định truy vấn
Trong VS Code, hãy mở tệp dataconnect/connector/queries.gql
và bỏ ghi chú (hoặc thêm) truy vấn ListMovies
:
query ListMovies @auth(level: PUBLIC) {
movies {
id
title
imageUrl
genre
}
}
Để kiểm thử truy vấn mới, hãy nhấp vào nút Run (local) (Chạy (trên máy)) để thực thi truy vấn trên cơ sở dữ liệu cục bộ. Danh sách phim trong cơ sở dữ liệu sẽ xuất hiện trong mục "result" (kết quả) của thiết bị đầu cuối Data Connect Execution (Thực thi kết nối dữ liệu).
Gọi phương thức này từ ứng dụng Android
Giờ đây, khi đã kiểm thử truy vấn trong Trình mô phỏng kết nối dữ liệu, bạn đã có thể thêm truy vấn đó vào ứng dụng.
Trong Android Studio, hãy mở tệp app/src/main/java/com/google/firebase/example/dataconnect/MoviesScreen.kt
và thêm mã sau để hiển thị danh sách phim ở định dạng lưới:
import com.google.firebase.example.dataconnect.generated.ListMoviesQuery
import com.google.firebase.example.dataconnect.generated.MoviesConnector
import com.google.firebase.example.dataconnect.generated.execute
import com.google.firebase.example.dataconnect.generated.instance
@Composable
fun MoviesScreen(
onMovieClicked: (id: String) -> Unit
) {
var movies by remember { mutableStateOf(emptyList<ListMoviesQuery.Data.MoviesItem>()) }
LaunchedEffect(Unit) {
// Queries need to be executed in a coroutine context
try {
movies = MoviesConnector.instance.listMovies.execute().data.movies
} catch (e: Exception) {
// Will be done at a later step
}
}
LazyVerticalGrid(GridCells.Adaptive(150.dp)) {
items(movies) { movie ->
MovieCard(
movieId = movie.id.toString(),
movieTitle = movie.title,
movieImageUrl = movie.imageUrl,
movieGenre = movie.genre,
onMovieClicked = {
onMovieClicked(movie.id.toString())
}
)
}
}
}
Chạy ứng dụng
Trong Android Studio, hãy nhấp vào nút Run (Chạy) để chạy ứng dụng trong trình mô phỏng Android.
Sau khi ứng dụng khởi chạy, bạn sẽ thấy một màn hình như sau:
6. Tạo truy vấn thông tin chi tiết về phim
Giờ đây, ứng dụng có thể liệt kê phim, hãy tạo một truy vấn để hiển thị thông tin chi tiết về từng phim.
Xác định truy vấn
Trong VS Code, hãy mở tệp dataconnect/connector/queries.gql
và bỏ ghi chú (hoặc thêm) truy vấn GetMovieById
:
# Get movie by id
query GetMovieById($id: UUID!) @auth(level: PUBLIC) {
movie(id: $id) {
id
title
imageUrl
genre
metadata: movieMetadata_on_movie {
rating
releaseYear
description
}
reviews: reviews_on_movie {
id
reviewText
reviewDate
rating
user {
id
username
}
}
}
}
Gọi phương thức này từ ứng dụng Android
Trong Android Studio, hãy mở tệp app/src/main/java/com/google/firebase/example/dataconnect/MovieDetailScreen.kt
và thêm mã sau:
importcom.google.firebase.example.dataconnect.generated.GetMovieByIdQuery
importcom.google.firebase.example.dataconnect.generated.MoviesConnector
importcom.google.firebase.example.dataconnect.generated.execute
importcom.google.firebase.example.dataconnect.generated.instance
@Composable
fun MovieDetailScreen(
movieId: String
) {
var movie by remember { mutableStateOf<GetMovieByIdQuery.Data.Movie?>(null) }
LaunchedEffect(Unit) {
movie = MoviesConnector.instance.getMovieById.execute(
UUID.fromString(movieId)
).data.movie
}
if (movie == null) {
LoadingScreen()
} else {
MovieDetails(
movieTitle = movie!!.title,
movieImageUrl = movie!!.imageUrl,
movieGenre = movie!!.genre,
movieRating = movie!!.metadata?.rating,
movieReleaseYear = movie!!.metadata?.releaseYear,
movieDescription = movie!!.metadata?.description,
)
}
}
Chạy ứng dụng
Trong Android Studio, hãy nhấp vào nút Run (Chạy) để chạy ứng dụng trong trình mô phỏng Android.
7. Tạo một đột biến để chèn người dùng
Giờ đây, ứng dụng có thể hiển thị dữ liệu, đã đến lúc thêm dữ liệu mới từ ứng dụng. Để thực hiện việc đó một cách an toàn, bạn nên sử dụng tính năng Xác thực Firebase.
Trong phạm vi của lớp học lập trình này, ứng dụng sử dụng phương thức Xác thực ẩn danh để đăng nhập người dùng. Tuy nhiên, để có một ứng dụng an toàn hơn, hãy cân nhắc sử dụng một phương thức xác thực khác, chẳng hạn như xác thực qua email/mật khẩu hoặc nhà cung cấp danh tính liên kết.
Xác định đột biến
Trong VS Code, hãy mở tệp dataconnect/connector/mutations.gql
và bỏ ghi chú (hoặc thêm) truy vấn UpsertUser
:
# Upsert (update or insert) a user's username based on their auth.uid
mutation UpsertUser($username: String!) @auth(level: USER) {
user_upsert(
data: {
id_expr: "auth.uid"
username: $username
}
)
}
Gọi phương thức này từ ứng dụng Android
Trong Android Studio, hãy mở tệp app/src/main/java/com/google/firebase/example/dataconnect/MainActivity.kt
và gọi đột biến:
import com.google.firebase.example.dataconnect.generated.execute
LaunchedEffect(Unit) {
// If there's no user signed in, sign in an anonymous user
if (firebaseAuth.currentUser == null) {
firebaseAuth.signInAnonymously().await()
val newUsername = getRandomUsername()
MoviesConnector.instance.upsertUser.execute(newUsername)
}
}
Chạy ứng dụng
Trong Android Studio, hãy nhấp vào nút Run (Chạy) để chạy ứng dụng trong trình mô phỏng Android.
8. Xin chúc mừng
Xin chúc mừng! Bạn đã thêm thành công Firebase Data Connect vào một ứng dụng Android!
Giờ đây, bạn đã biết các bước chính cần thiết để thiết lập Data Connect, tạo truy vấn và đột biến cũng như xử lý việc xác thực người dùng.
Bước tiếp theo
- Tìm hiểu thêm về mức giá
- Tìm hiểu thêm về cách bảo mật hoạt động
- Triển khai cho môi trường phát hành công khai (phần tiếp theo)
- Tìm hiểu cách tìm kiếm vectơ theo độ tương đồng
Không bắt buộc: triển khai lên kênh phát hành công khai
Cho đến nay, ứng dụng này chỉ sử dụng Trình mô phỏng Firebase. Nếu bạn muốn tìm hiểu cách triển khai ứng dụng này cho một dự án Firebase thực tế, hãy tiếp tục chuyển sang bước tiếp theo.
9. (Không bắt buộc) Triển khai ứng dụng
Cho đến nay, ứng dụng này hoàn toàn ở chế độ cục bộ, tất cả dữ liệu đều nằm trong Bộ mô phỏng Firebase. Trong phần này, bạn sẽ tìm hiểu cách định cấu hình dự án Firebase để ứng dụng này hoạt động trong môi trường phát hành công khai.
Bật tính năng Xác thực Firebase
Trong bảng điều khiển Firebase, hãy chuyển đến mục Xác thực rồi nhấp vào Bắt đầu. Chuyển đến thẻ Phương thức đăng nhập rồi chọn tuỳ chọn Đăng nhập ẩn danh trong số các nhà cung cấp.
Bật phương thức Đăng nhập ẩn danh rồi nhấp vào Lưu.
Triển khai giản đồ Firebase Data Connect
Lưu ý quan trọng: Nếu đây là lần đầu tiên bạn triển khai giản đồ trong dự án, thì quá trình này sẽ tạo một phiên bản PostgreSQL Cloud SQL. Quá trình này có thể mất khoảng 15 phút. Bạn sẽ không thể triển khai cho đến khi phiên bản Cloud SQL sẵn sàng và được tích hợp với Firebase Data Connect.
- Trong giao diện người dùng của tiện ích Firebase Data Connect cho VS Code, hãy nhấp vào Deploy to production (Triển khai lên môi trường phát hành chính thức).
- Bạn có thể cần xem xét các thay đổi về giản đồ và phê duyệt các nội dung sửa đổi có thể gây hại. Bạn sẽ được nhắc:
- Xem xét các thay đổi về giản đồ bằng
firebase dataconnect:sql:diff
- Khi bạn hài lòng với các thay đổi, hãy áp dụng các thay đổi đó bằng cách sử dụng flow do
firebase dataconnect:sql:migrate
bắt đầu
- Xem xét các thay đổi về giản đồ bằng
Phiên bản Cloud SQL cho PostgreSQL sẽ được cập nhật bằng giản đồ và dữ liệu đã triển khai cuối cùng. Bạn có thể theo dõi trạng thái trong Bảng điều khiển của Firebase.
Bây giờ, bạn có thể nhấp vào Run (Production) (Chạy (Sản xuất)) trong bảng điều khiển Firebase Data Connect (Kết nối dữ liệu Firebase), giống như cách bạn đã làm với trình mô phỏng cục bộ, để thêm dữ liệu vào môi trường sản xuất.