Skip to content

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 tinMô tả
Flutter SDK>=3.0.0 <4.0.0
iOSiOS 13+, Xcode 16.2
AndroidGradle 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_plugin
bash
flutter pub get

Khở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ểuBắt buộcMặc địnhMô tả
baseUrlStringCó—Base URL cho các network request.
accessTokenAccessToken?Có—Provider cung cấp authentication token.
languageCodeStringKhôngvivi hoặc en.
loggerLogger?Không—Sink nhận log.
exposeImagebool?KhôngfalseLưu ảnh vào file cục bộ.
uiSettingEkycUISetting?Không—Tùy biến giao diện.
fontSourcesList<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ườngKiểuMô tả
facesList<Face>?Các khuôn mặt đã chụp, mỗi khuôn mặt có image và gesture.
sanityResultsList<EkycResponse<FaceSanityData>>?Response sanity cho từng ảnh. Lưu ý số nhiều, khác với Android và iOS.
livenessResultEkycResponse<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ườngKiểuMô tả
EkycFailure.userCancelErrorCode40001Người dùng nhấn back.
EkycFailure.timeOutErrorCode40000Timeout.
EkycFailure.cameraErrorCode40003Mở camera thất bại. Chỉ Android.
EkycFailure.permissionErrorCode40002Các quyền chưa được cấp.
EkycFailure.faceSanityFailed60002Kiểm tra sanity thất bại.
EkycFailure.faceLivenessFailed60003Kiểm tra liveness thất bại.
EkycFailure.unexpectedErrorCode50000Runtime 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.ttf
dart
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.
  });
}

→ Tải ảnh lên

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 ​

Developers