Captura de Documento
DicioCameraDocument en aplicaciones Android utilizando Jetpack Compose.Compatibilidad y Requisitos
1. Configuración del Proyecto
Configura las dependencias del proyecto agregando la librería en tus archivos de Gradle y el catálogo de versiones.
libs.versions.toml
[versions]
dicioDocument = "2.2.0"
[libraries]
dicio-documentcapturesdk = { group = "io.bitbucket.juarezsdco", name = "documentcapturesdk", version.ref = "dicioDocument" }
build.gradle
dependencies {
implementation(libs.dicio.documentcapturesdk)
}
2. Integración y Uso
El SDK se integra como un componente @Composable. Simplemente llama a la función DicioCameraDocument dentro de tu jerarquía de Compose. El componente manejará internamente la carga y validación de la licencia antes de mostrar la cámara.
Composable.kt
@Composable
fun DicioCameraDocument(
styledScreen: dicioDocumentStyled = dicioDocumentStyled(),
callback: DicioCaptureCallback,
applicationID: String,
token: String,
urlBase: String
)
Parámetros del Composable
styledScreen: (Opcional) ObjetodicioDocumentStyledpara personalizar la apariencia de la pantalla.callback: Implementación deDicioCaptureCallbackpara manejar los eventos del SDK.applicationID: (Requerido) El ID de la aplicación proporcionado para validar la licencia.token: (Requerido) El token de autenticación (Bearer Token) para autorizar las solicitudes.urlBase: (Requerido) La URL base del servidor donde se validará el token y la licencia.
Personalización (Programática)
La personalización de la interfaz se realiza pasando un objeto dicioDocumentStyled al componente.
Clase dicioDocumentStyled
| Propiedad | Tipo | Descripción | Valor por Defecto |
|---|---|---|---|
title | Int (StringRes) | ID del recurso de texto para el título. | R.string.dicio_dc_title |
subtitle | Int (StringRes) | ID del recurso de texto para el subtítulo. | R.string.dicio_dc_subtitle |
backgroundColor | Color | Color de fondo de la pantalla de captura. | Color(0xFF000000) (Negro) |
titleColor | Color | Color del texto del título. | Color.White |
subtitleColor | Color | Color del texto del subtítulo. | Color.White |
buttonCaptureColor | Color | Color del botón de captura. | Color.White |
buttonCancelColor | Color | Color del ícono para cerrar o cancelar. | Color.White |
Implementación de Callbacks
Deberás implementar la interfaz DicioCaptureCallback para recibir las respuestas del SDK.
| Método | Descripción | Parámetros |
|---|---|---|
DicioCaptureOnSuccess | Invocado cuando la captura de imagen es exitosa. | image: Imagen capturada en formato String (Base64). |
DicioCaptureOnFailure | Invocado si ocurre un error durante el proceso. | errorMessage: Mensaje de error en String (JSON). |
DicioCaptureOnCancel | Invocado si el usuario cancela la captura. | cancelMessage: Motivo de la cancelación. |
DicioCaptureOnInfoCamera | Provee información sobre el estado de la cámara. | message: Mensaje de información en String (JSON). |
3. Ejemplo Completo de Uso
El siguiente ejemplo muestra cómo integrar DicioCameraDocument, pasar los parámetros de validación y manejar el resultado.
DocumentCaptureScreen.kt
@Composable
fun DocumentCaptureScreen(
appId: String,
userToken: String,
apiBaseUrl: String
) {
var capturedImageBase64 by remember { mutableStateOf<String?>(null) }
if (capturedImageBase64 == null) {
DicioCameraDocument(
applicationID = appId,
token = userToken,
urlBase = apiBaseUrl,
callback = object : DicioCaptureCallback {
override fun DicioCaptureOnSuccess(image: String) {
capturedImageBase64 = image
}
override fun DicioCaptureOnFailure(errorMessage: String) {
println("Capture error: " + errorMessage)
}
override fun DicioCaptureOnCancel(cancelMessage: String) {
println("Capture canceled: " + cancelMessage)
}
override fun DicioCaptureOnInfoCamera(message: String) {
println("Camera Info: " + message)
}
}
)
} else {
CapturedPhotoResult(
base64Image = capturedImageBase64,
onRetake = { capturedImageBase64 = null }
)
}
}
Manejo de Errores y Códigos de Respuesta
Los mensajes se entregan como texto con formato JSON utilizando las llaves "Code" y "Message".
Errores de Licencia y Conectividad
Estos errores ocurren antes de mostrar la cámara. El SDK presentará un mensaje en pantalla y notificará mediante DicioCaptureOnFailure.
| Código de error | Descripción |
|---|---|
NO_INTERNET | No hay conexión a internet para validar la licencia. |
APPLICATION_ID_EMPTY | El parámetro applicationID está vacío. |
BASE_URL_EMPTY | El parámetro urlBase está vacío. |
TOKEN_EMPTY | El parámetro token está vacío. |
TOKEN_NOT_VALID | El token proporcionado es inválido o expiró. |
SERVER_ERROR_NOT_LICENCE | La respuesta del servidor no incluía una licencia válida. |
JSON_PARSE_ERROR | Error procesando la respuesta del servidor. |
SERVER_ERROR | Error general al comunicarse con el servidor. |
Errores de Cámara
| Código de error | Descripción |
|---|---|
ERROR_PERMISSION | El usuario denegó los permisos de cámara. |
ERROR_CAMERA | Error general al iniciar o enlazar la cámara. |
ERROR_TAKING_PHOTO | Error durante la captura de foto (devuelto por CameraX). |
ERROR_IMAGE_FORMAT | El formato de la foto de la cámara no es JPEG. |
Mensajes de Información de Cámara
| Código de información | Descripción |
|---|---|
CAMERA_STARTED | La cámara ha iniciado y está lista para capturar. |
CAMERA_TAKE_PHOTO | La foto ha sido tomada y está siendo procesada. |