Skip to content

Tích hợp Android SDK ​

Hướng dẫn tích hợp eKYC Android SDK, phiên bản 1.1.9. Viết bằng Kotlin; entry point là class CakeEkyc.

Yêu cầu build ​

Thông tinMô tả
Gradle7.4
minSdkVersion21
targetSdkVersion33
Kotlin1.7.10

Thêm dependency ​

groovy
dependencies {
    val core_version = "1.0.0"
    val ui_version = "1.0.2"
    val image_quality_version = "1.0.3"
    val ekyc_version = "1.1.8"

    // Core
    implementation("vn.cake.ekyc.sdk:ekyc-core:$core_version")
    // UI
    implementation("vn.cake.ekyc.sdk:ekyc-ui:$ui_version")
    // Image quality
    implementation("vn.cake.ekyc.sdk:image-quality:$image_quality_version")
    // Ekyc
    implementation("vn.cake.ekyc.sdk:ekyc:$ekyc_version")
}

Khởi tạo và cấu hình ​

Dựng một Config, sau đó lấy singleton thông qua CakeEkyc.getInstance, hàm này trả về một Future.

kotlin
private val logger = object : Logger {
    override fun info(log: String) {}
    override fun error(log: String) {}
    override fun warning(log: String) {}
}

private val baseUrl: String = "<BASE_URL>"

val config = Config.Builder().apply {
    withLanguage("vi")                                   // "vi" hoặc "en"
    withBaseUrl(baseUrl)
    withToken(TokenProvider.from("<ACCESS_TOKEN>"))
    withLogger(logger)
}.build()

val ekycFuture = CakeEkyc.getInstance(applicationContext, config, executor)
val cakeEkyc = ekycFuture.get()

Chụp thẻ NID ​

takeNID chụp thẻ, tải lên, kiểm tra sanity và giả mạo, rồi trích xuất thông tin thẻ. Kết quả đến qua listener.

kotlin
// chụp cả hai mặt
val cardSides = listOf(CardSide.Front, CardSide.Back)

val config = TakeNIDConfig(
    cardType = CardType.CCCD,
    cardSides = cardSides,
    requiredReview = true,
    autoCaptureEnable = true,
    requiredScanQR = false,
    captureOnly = false,
    loadingView = customLoadingView
)

val listener = object : NIDCapturingListener {
    override fun onEvent(event: EkycEvent) {}
    override fun onError(error: EkycError) {}
    override fun onSuccess(result: NIDCardResult) {}
}

cakeEkyc.takeNID(activity, config, listener)

Truyền mặt còn lại ​

kotlin
val frontSide: EkycImage

ekyc.takeNID(
    activity,
    TakeNIDConfig(
        cardSides = listOf(CardSide.Back),
        otherSideImages = mapOf(CardSide.Front to frontSide)
    ),
    listener
)

Lỗi ​

TrườngKiểuMô tả
EkycError.UserCanceledError40001Người dùng nhấn back.
EkycError.TimeoutError40000Timeout.
EkycError.CameraError40003Mở camera thất bại.
EkycError.PermissionNotGranted40002Các quyền chưa được cấp.
EkycError.QualityFailed60000 / 60001NID_SANITY_FAILED hoặc NID_TAMPERING_FAILED.
EkycError.UnexpectedError50000Runtime exception.

Chụp khuôn mặt ​

kotlin
val config = TakeFaceConfig(captureOnly = false, loadingView = customLoadingView)

val listener = object : FaceCapturingListener {
    override fun onEvent(event: EkycEvent) {}
    override fun onError(error: EkycError) {}
    override fun onSuccess(result: SelfieResult) {}
}

cakeEkyc.takeFaces(activity, config, listener)

Lỗi chất lượng ở đây mang FACE_SANITY_FAILED (60002) hoặc FACE_LIVENESS_FAILED (60003).

Giao diện loading tùy chỉnh ​

Trong lúc tải lên, kiểm tra chất lượng và OCR, SDK hiển thị một giao diện loading. Truyền View của riêng bạn vào TakeNIDConfig.loadingView hoặc TakeFaceConfig.loadingView để thay thế nó.

Tải ảnh lên ​

kotlin
val uploadResult = ekyc.upload(image = bitmap, label = label, metaData = metaData)

val imageId = when (uploadResult) {
    is Result.Success -> uploadResult().data?.imageId
    is Result.Fail -> throw uploadResult.error
}

ByteArray cũng được chấp nhận: ekyc.upload(data = byteArray, label = label, metaData = metaData).

Xem Tổng quan Mobile SDK § Nhãn ảnh để biết các giá trị label được phép, và Tải ảnh lên để biết API bên dưới.

Các lệnh gọi API riêng lẻ ​

Mỗi lệnh ánh xạ đến một endpoint của API và trả về Result<EkycResponse<T>>.

kotlin
// Sanity — cả hai mặt, hoặc chỉ truyền một imageId
val sanityResult = ekyc.checkNIDSanity(
    imageId = frontNIDImageId,
    imageId2 = backNIDImageId,
    cardType = "vn.national_id",
    specialTypeId = ""
)

val tamperingResult = ekyc.checkNIDTampering(
    imageId = frontNIDImageId,
    imageId2 = backNIDImageId,
    cardType = "vn.national_id",
    level = ""
)

val nidCardResult = ekyc.readNIDInfo(
    imageId = frontNIDImageId,
    imageId2 = backNIDImageId,
    cardType = "vn.national_id"
)

val faceSanityResult  = ekyc.checkFaceSanity(imageId = "face_image_id_after_upload")
val faceLivenessResult = ekyc.checkLiveness(imageIds = listOf("face_image_id_after_upload"))
val comparedResult     = ekyc.compareFaces(imageId1 = "face_1", imageId2 = "face_2")
Phương thứcAPI
checkNIDSanityXác minh ID Card Sanity
checkNIDTamperingPhát hiện giả mạo thẻ ID
readNIDInfoĐọc thông tin thẻ ID
checkFaceSanityXác minh sanity khuôn mặt
checkLivenessXác minh liveness khuôn mặt
compareFacesSo sánh khuôn mặt

Bước tiếp theo ​

Developers