Tích hợp Flutter SDK
Chụp khuôn mặt cho FaceAuthen bằng CAKE eKYC Flutter plugin, phiên bản 1.0.0. Entry point là CakeEkycPlugin. Đây là nền tảng duy nhất có đầy đủ khả năng tùy biến giao diện.
Yêu cầu build
| Thông tin | Mô tả |
|---|---|
| Flutter SDK | >=3.0.0 <4.0.0 |
| iOS | iOS 13+, Xcode 16.2 |
| Android | Gradle 7.4, minSdkVersion 21, targetSdkVersion 33 |
Cài đặt
yaml
dependencies:
cake_image_quality:
path: ../relative/path/to/cake_image_quality
cake_ekyc_plugin:
path: ../relative/path/to/cake_ekyc_pluginbash
flutter pub getKhởi tạo
dart
Future<void> initEkycPlugin() async {
final config = Config(
accessToken: AccessToken.newInstance("<ACCESS_TOKEN>"),
baseUrl: "<BASE_URL>",
languageCode: "vi",
logger: logger,
exposeImage: false, // true writes face images to local files — keep false unless you must
);
await CakeEkycPlugin.instance.initialize(config);
}| Tham số | Kiểu | Bắt buộc | Mặc định | Mô tả |
|---|---|---|---|---|
baseUrl | String | Có | — | Base URL cho các network request. |
accessToken | AccessToken? | Có | — | Provider cung cấp authentication token. |
languageCode | String | Không | vi | vi hoặc en. |
logger | Logger? | Không | — | Sink nhận log. |
exposeImage | bool? | Không | false | Lưu ảnh vào file cục bộ. |
uiSetting | EkycUISetting? | Không | — | Tùy biến giao diện. |
fontSources | List<FontSource>? | Không | — | Font cần đăng ký trước khi sử dụng. |
Chụp khuôn mặt
dart
Future<void> takeFaces() async {
CakeEkycPlugin.instance.eventStream.listen((event) {
debugPrint("[EKYC] eventId = ${event.eventId}"); // params có thể chứa ảnh — không ghi log
});
final config = TakeFaceConfig(captureOnly: false);
final selfieResult = await CakeEkycPlugin.instance.takeFaces(config);
selfieResult.fold((failure) {
debugPrint("[EKYC] failure: code = ${failure.code}, message = ${failure.message}");
}, (selfieResult) async {
// xử lý kết quả selfie tại đây
});
}| Trường | Kiểu | Mô tả |
|---|---|---|
faces | List<Face>? | Các khuôn mặt đã chụp, mỗi khuôn mặt có image và gesture. |
sanityResults | List<EkycResponse<FaceSanityData>>? | Response sanity cho từng ảnh. Lưu ý số nhiều, khác với Android và iOS. |
livenessResult | EkycResponse<FaceLivenessData>? | Kết quả liveness. |
Lấy face.image.id từ mỗi phần tử và truyền chúng vào mảng faces cho Đăng ký khuôn mặt hoặc Xác minh Face Authen.
Lỗi
| Trường | Kiểu | Mô tả |
|---|---|---|
EkycFailure.userCancelErrorCode | 40001 | Người dùng nhấn back. |
EkycFailure.timeOutErrorCode | 40000 | Timeout. |
EkycFailure.cameraErrorCode | 40003 | Mở camera thất bại. Chỉ Android. |
EkycFailure.permissionErrorCode | 40002 | Các quyền chưa được cấp. |
EkycFailure.faceSanityFailed | 60002 | Kiểm tra sanity thất bại. |
EkycFailure.faceLivenessFailed | 60003 | Kiểm tra liveness thất bại. |
EkycFailure.unexpectedErrorCode | 50000 | Runtime exception. |
Tùy biến giao diện màn hình selfie
Truyền một EkycUISetting vào Config. Với luồng FaceAuthen, chỉ màn hình selfie và màn hình loading áp dụng; các màn hình CCCD không bao giờ xuất hiện.
dart
SelfieScreenSetting selfieScreenSetting = SelfieScreenSetting(
backgroundColor: "#000000",
title: title,
backIcon: ImageSource.asset(path: "path_to_your_back_icon_image_file"),
);
SelfieFeedbackLookupTable selfieFeedbackLookupTable;
final uiSetting = EkycUISetting(
darkThemeSetting: darkThemeSetting,
selfieScreenSetting: selfieScreenSetting,
selfieFeedbackLookupTable: selfieFeedbackLookupTable,
loadingScreenSetting: loadingScreenSetting,
);dart
LoadingScreenSetting loadingScreenSetting = LoadingScreenSetting(
backgroundColor: "#FFFFFF",
title: title,
description: description,
bgImage: ImageSource.asset(path: "path_to_your_back_icon_image_file"),
);Màn hình selfie kế thừa từ darkThemeSetting; màn hình loading kế thừa từ lightThemeSetting.
Đăng ký font
yaml
fonts:
- family: BitcountGridDouble
fonts:
- asset: fonts/BitcountGridDouble-Bold.ttf
- asset: fonts/BitcountGridDouble-Regular.ttfdart
final fontResources = <FontSource>[
FontSource.asset(path: "packages/your_package_name/fonts/BitcountGridDouble-Bold.ttf"),
FontSource.asset(path: "packages/your_package_name/fonts/BitcountGridDouble-Regular.ttf"),
];fontName trên một TextElement chỉ resolve được nếu cùng tên đó đã được đăng ký trong fontSources.
Tải ảnh lên
dart
Future<void> testUpload() async {
final either = await CakeEkycPlugin.instance.upload(file: filePath, label: "portrait", metaData: metaData);
either.fold((failure) {
debugPrint("[EKYC] failure: code = ${failure.code}");
}, (result) async {
// Gửi kết quả về backend của bạn; không ghi log — nó chứa dữ liệu sinh trắc học.
});
}Các kiểm tra riêng lẻ
dart
final faceSanity = await CakeEkycPlugin.instance.checkFaceSanity(imageId: "<IMAGE_ID>");
final faceLiveness = await CakeEkycPlugin.instance.checkFaceLiveness(imageIds: ["<IMAGE_ID>"]);
final compared = await CakeEkycPlugin.instance.compareFaces(imageId: "<IMAGE_ID_1>", imageId2: "<IMAGE_ID_2>");Bước tiếp theo
- Tổng quan Mobile SDK — các khái niệm dùng chung giữa các nền tảng
- Đăng ký khuôn mặt — đăng ký các image ID đã chụp
- Xác minh Face Authen — xác thực bằng một lần chụp mới