SDK ứng dụng khách Firebase Data Connect cho phép bạn gọi các truy vấn và đột biến phía máy chủ trực tiếp từ một ứng dụng Firebase. Bạn tạo một SDK ứng dụng khách tuỳ chỉnh song song khi thiết kế các lược đồ, truy vấn và đột biến mà bạn triển khai cho dịch vụ Data Connect. Sau đó, bạn tích hợp các phương thức từ SDK này vào logic ứng dụng khách.
Như chúng tôi đã đề cập ở nơi khác, điều quan trọng cần lưu ý là Data Connect các truy vấn và đột biến không được mã ứng dụng gửi và không được thực thi trên máy chủ. Thay vào đó, khi được triển khai, các thao tác Data Connect sẽ được lưu trữ trên máy chủ như Cloud Functions. Điều này có nghĩa là bạn cần triển khai các thay đổi tương ứng ở phía máy khách để tránh làm gián đoạn người dùng hiện tại (ví dụ: trên các phiên bản ứng dụng cũ hơn).
Đó là lý do Data Connect cung cấp cho bạn một môi trường và công cụ dành cho nhà phát triển, cho phép bạn tạo mẫu các lược đồ, truy vấn và đột biến được triển khai trên máy chủ. Công cụ này cũng tự động tạo SDK phía máy khách trong khi bạn tạo mẫu.
Khi bạn lặp lại các bản cập nhật cho dịch vụ và ứng dụng khách, cả bản cập nhật phía máy chủ và phía ứng dụng khách đều sẵn sàng triển khai.
Quy trình phát triển ứng dụng khách là gì?
Nếu bạn đã làm theo phần Bắt đầu, thì bạn đã được giới thiệu về quy trình phát triển tổng thể cho Data Connect. Trong hướng dẫn này, bạn sẽ tìm thấy thông tin chi tiết hơn về cách tạo SDK Flutter từ giản đồ và cách làm việc với các truy vấn và đột biến của ứng dụng khách.
Tóm lại, để sử dụng SDK Flutter đã tạo trong ứng dụng khách, bạn sẽ làm theo các bước điều kiện tiên quyết sau:
- Thêm Firebase vào ứng dụng Flutter.
- Cài đặt CLI flutterfire
dart pub global activate flutterfire_cli. - Chạy
flutterfire configure.
Sau đó:
- Phát triển lược đồ ứng dụng.
Thiết lập quá trình tạo SDK:
- Bằng nút Add SDK to app (Thêm SDK vào ứng dụng) trong tiện ích Data Connect VS Code
- Bằng cách cập nhật
connector.yaml.
Thiết lập và sử dụng trình mô phỏng Data Connect rồi lặp lại.
Tạo SDK Flutter
Sử dụng Firebase CLI để thiết lập SDK do Data Connect tạo trong ứng dụng.
Lệnh init sẽ phát hiện tất cả ứng dụng trong thư mục hiện tại và tự động cài đặt SDK đã tạo.
firebase init dataconnect:sdk
Cập nhật SDK trong khi tạo mẫu
Nếu bạn đã cài đặt tiện ích Data Connect VS Code, tiện ích này sẽ luôn cập nhật SDK đã tạo.
Nếu không sử dụng tiện ích Data Connect VS Code, bạn có thể sử dụng Firebase CLI để luôn cập nhật SDK đã tạo.
firebase dataconnect:sdk:generate --watchTạo SDK trong quy trình tạo bản dựng
Bạn có thể sử dụng Firebase CLI để tạo Data Connect SDK trong các quy trình tạo bản dựng CI/CD.
firebase dataconnect:sdk:generateThiết lập mã ứng dụng khách
Khởi động ứng dụng Data Connect
Trước tiên, hãy khởi động ứng dụng bằng hướng dẫn thiết lập Firebase tiêu chuẩn.
Sau đó, hãy cài đặt trình bổ trợ Data Connect:
flutter pub add firebase_data_connectKhởi động SDK FlutterData Connect
Khởi động thực thể Data Connect bằng thông tin mà bạn đã dùng để thiết lập Data Connect (tất cả đều có trong thẻ Data Connect của bảng điều khiển Firebase).
Nhập thư viện
Bạn cần có 2 bộ lệnh nhập để khởi động mã ứng dụng khách: lệnh nhập chung Data Connect và lệnh nhập SDK cụ thể đã tạo.
// general imports
import 'package:firebase_data_connect/firebase_data_connect.dart';
// generated queries and mutations from SDK
import 'generated/movies.dart';
Sử dụng truy vấn ở phía ứng dụng khách
Mã đã tạo sẽ đi kèm với các Tham chiếu truy vấn được xác định trước. Bạn chỉ cần nhập và gọi execute trên các tham chiếu đó.
import 'generated/movies.dart';
await MoviesConnector.instance.listMovies().execute();
Gọi phương thức truy vấn SDK
Dưới đây là ví dụ về cách sử dụng các hàm lối tắt hành động này:
import 'generated/movies.dart';
function onBtnClick() {
// This will call the generated Dart from the CLI and then make an HTTP request to the server.
MoviesConnector.instance.listMovies().execute().then(data => showInUI(data)); // == MoviesConnector.instance.listMovies().ref().execute();
}
Trường tuỳ chọn
Một số truy vấn có thể có các trường tuỳ chọn. Trong những trường hợp này, SDK Flutter sẽ hiển thị một phương thức trình tạo và bạn phải thiết lập riêng.
Ví dụ: trường rating là không bắt buộc khi gọi createMovie, vì vậy, bạn cần cung cấp trường này trong hàm trình tạo.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi"}).rating(5).execute();
Đăng ký nhận thông báo khi có thay đổi
Bạn có thể đăng ký nhận thông báo khi có thay đổi (thông báo này sẽ cập nhật bất cứ lúc nào bạn thực thi một truy vấn).
QueryRef<ListMoviesData, void> listRef = MoviesConnector.instance.listMovies().ref();
// subscribe will immediately invoke the query if no execute was called on it previously.
listRef.subscribe().listen((data) {
updateUIWithMovies(data.movies);
});
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
await listRef.execute(); // will update the subscription above`
Xử lý các thay đổi đối với trường liệt kê
Lược đồ của ứng dụng có thể chứa các giá trị liệt kê, mà truy vấn GraphQL có thể truy cập.
Khi thiết kế ứng dụng thay đổi, bạn có thể thêm các giá trị được hỗ trợ cho enum mới. Ví dụ: hãy tưởng tượng rằng sau này trong vòng đời của ứng dụng, bạn quyết định thêm giá trị FULLSCREEN vào enum AspectRatio.
Trong quy trình Data Connect, bạn có thể sử dụng công cụ cho nhà phát triển cục bộ để cập nhật các truy vấn và SDK.
Tuy nhiên, trước khi bạn phát hành phiên bản cập nhật của ứng dụng khách, các ứng dụng khách cũ đã triển khai có thể bị gián đoạn.
Ví dụ về cách triển khai linh hoạt
SDK đã tạo buộc phải xử lý các giá trị không xác định. Tức là mã ứng dụng khách phải mở gói đối tượng EnumValue thành Known hoặc Unknown.
final result = await MoviesConnector.instance.listMovies().execute();
if (result.data != null && result.data!.isNotEmpty) {
handleEnumValue(result.data![0].aspectratio);
}
void handleEnumValue(EnumValue<AspectRatio> aspectValue) {
if (aspectValue.value != null) {
switch(aspectValue.value!) {
case AspectRatio.ACADEMY:
print("This movie is in Academy aspect");
break;
case AspectRatio.WIDESCREEN:
print("This movie is in Widescreen aspect");
break;
case AspectRatio.ANAMORPHIC:
print("This movie is in Anamorphic aspect");
break;
case AspectRatio.IMAX:
print("This movie is in IMAX aspect");
}
} else {
print("Unknown aspect ratio detected: ${aspectValue.stringValue}");
}
}
Sử dụng đột biến ở phía ứng dụng khách
Bạn có thể truy cập vào đột biến theo cách tương tự như truy vấn.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
Tạo mẫu và kiểm thử ứng dụng Flutter
Thiết lập ứng dụng khách để sử dụng trình mô phỏng cục bộ
Bạn có thể sử dụng trình mô phỏng Data Connect, cho dù là từ tiện ích Data Connect VS Code hay từ CLI.
Việc thiết lập ứng dụng để kết nối với trình mô phỏng là giống nhau đối với cả hai trường hợp.
import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'generated/movies.dart';
MoviesConnector.instance.dataConnect
.useDataConnectEmulator('127.0.0.1', 9399);
// Make calls from your app
QueryRef<ListMoviesData, void> ref = MoviesConnector.instance.listMovies.ref();
Để chuyển sang tài nguyên phát hành công khai, hãy đánh dấu là nội dung nhận xét các dòng để kết nối với trình mô phỏng.
Kiểu dữ liệu trong SDK Dart
Máy chủ Data Connect đại diện cho các kiểu dữ liệu GraphQL phổ biến. Các kiểu dữ liệu này được biểu thị trong SDK như sau.
| Data Connect Kiểu | Dart |
|---|---|
| Dấu thời gian | firebase_data_connect.Timestamp |
| Int (32 bit) | int |
| Ngày | DateTime |
| mã nhận dạng duy nhất (UUID) | chuỗi |
| Int64 | int |
| Nổi | double |
| Boolean | bool |
| Bất kỳ | firebase_data_connect.AnyValue |