Captura de documentos
Esta guía está diseñada para ayudarlo a implementar el SDK Web de forma rápida y fácil. Se proporcionan conceptos básicos, ejemplos de implementación de SDK y también cómo interactuar con las API REST de los motores.
A través de esta guía, se puede:
- Implementar la apertura de la cámara y la captura de imágenes;
- Manipular los datos de devolución;
- Utilizar la devolución del SDK con las API del motor.
Antes de comenzar, asegúrese de haber seguido las instrucciones paso a paso para instalar e importar el SDK en esta guía.
RECURSOS DISPONIBLES
SDK Web ofrece un componente para la captura de documentos que contiene un frame de captura que ayuda al usuario a colocar el documento de manera correcta para la foto. Luego de posicionar correctamente, el usuario debe hacer clic en un botón para capturar la foto del documento.
La captura de los siguientes tipos de documentos está disponible:
- Licencia de conducir: Captura de la Licencia de Conducir abierta;
- Lado delantero de la Licencia de Conducir: Captura del lado delantero de la Licencia de conducir;
- Lado reverso de la Licencia de conducir: Captura del lado reverso de la Licencia de conducir;
- CPF: Captura del documento CPF;
- Lado delantero del RG: Captura del lado delantero del RG;
- Lado reverso del RG: Captura del lado reverso del RG;
- Lado delantero del nuevo Documento de identidad brasileño (RG): Captura del lado delantero del nuevo tipo de Documento de identidad brasileño (RG);
- Lado reverso del nuevo Documento de identidad brasileño (RG): Captura del lado reverso del nuevo tipo de Documento de identidad brasileño (RG);
- Otros: Captura documento genérico. Para este tipo de captura, debe informar el título del documento que se mostrará en la captura al usuario utilizando la propiedad
optional.LABEL_DOCUMENT_TYPE_OTHERS
.
Os frames Novo RG frente e Novo RG verso não funcionam com Tipificação e OCR
IMPLEMENTACIÓN
Al seguir esta guía paso a paso, tendrá todo el potencial del SDK integrado en su aplicación Web.
INICIALIZAR EL SDK
Como primer paso, debes realizar 3 sencillos pasos en su proyecto:
Instancie un nuevo Builder:
const unicoCameraBuilder = new UnicoCheckBuilder();
Especifique el camino de los archivos adicionales (caso agregado en su proyecto):
unicoCameraBuilder.setResourceDirectory("/resources");
CONFIGURAR EL TAMAÑO DEL FRAME
Como primer paso, se recomienda que configure el tamaño del frame dentro de su aplicación, para optimizar el área de captura dentro de su WebApp. Consulte a continuación cómo realizar esta configuración para Web Desktop o Mobile.
SUGERENCIAMuchas veces el funcionamiento del frame puede verse afectado por algunos design-systems que tienen algún tipo de grid-system, como por ejemplo, bootstrap o material-ui. Para minimizar este riesgo, asegúrese de posicionar el frame (
id="box-camera"
) en algún lugar del código que no herede reglas indeseadas de css.- Desktop
- Mobile
En las versiones Web Desktop, es posible restringir el tamaño del frame para que no utilice toda la dimensión de su WebApp. Para ello, simplemente envuelva el frame (
id="box-camera"
) en otra tag html, como en el siguiente ejemplo:<div class="container">
<div id="box-camera"></div>
</div>Idealmente, debe intentar de mantener una proporción adecuada entre el alto y ancho, lo que facilitará encuadrar el rostro del usuario. A continuación un ejemplo:
.container {
width: 800px;
height: 600px;
position: relative;
}Siguiendo el ejemplo anterior, el frame respeta el tamaño del elemento "padre", en este caso representado por el contenedor. De esta manera, tiene la flexibilidad de implementar el frame de la manera más conveniente para su aplicación (como en un modal, por ejemplo).
PROBAR DIVERSOS TAMAÑOS DE PANTALLALas pruebas que cambian el tamaño de la pantalla a través del modo de desarrollador de su browser no funcionan. Se recomienda que este tipo de prueba se realice cambiando el tamaño de la ventana de su browser.
Para una view Web Mobile, se recomienda que el marco de captura ocupe el 100% de la pantalla para evitar problemas con los algoritmos de visión computacional. Si el área de captura está distorsionada, la funcionalidad de captura automática (Cámara Inteligente) puede presentar problemas de cálculo en el seguimiento facial de los usuarios.
Por lo tanto, se recomienda que en la view Web Mobile:
- El marco de captura ocupe el 100% de la pantalla del dispositivo (
100vw/vh
); - Evitar el scroll horizontal o vertical (esto se puede minimizar con un modal);
Puedes revisar un ejemplo de implementación a través del proyecto en esta página (Angular).
PRUEBAS CON SIMULADOR DE DISPOSITIVOSLas pruebas de dispositivos utilizando el modo desarrollador de tu navegador no funcionan, ya que la cámara utilizada por tu navegador es la misma de tu escritorio, que tiene una resolución totalmente diferente a la cámara de un dispositivo móvil. Se recomienda que este tipo de prueba se realice directamente en el dispositivo.
CONFIGURAR FUNCIONES DE CALLBACK
Uno de los objetos que se debe pasar como parámetro al método responsable de renderizar el frame de captura es el callback. Este objeto debe contener funciones de callback para casos de éxito y error, como se ejemplifica a continuación
var callback = {
on: {
success: (obj) => {
console.log(obj.base64);
console.log(obj.encrypted);
},
error: (error) => {
console.error(error)
//confira na aba "Configurações" sobre os tipos de erros
},
support: (supportMessage) => {
console.log(supportMessage);
}
}
};Este objeto es obligatorio y si no se implementa correctamente (incluyendo todos los eventos de
success
oerror
) genera una excepción, que si no se trata, se muestra en la consola del usuario.::alert importante
El atributo Encrypted está estrictamente destinado a enviar la imagen a través de las API de Unico. No debes abrir ni serializar este atributo, ya que sus características pueden cambiar sin previo aviso. Su uso debe ser exclusivo en interacciones con APIs para garantizar la integridad y seguridad de los datos. Unico no es responsable de ningún daño resultante de esta práctica, ya que pueden ocurrir cambios de manera impredecible. :::
Para obtener más detalles sobre los códigos de error devueltos por el SDK, consulte esta guía.
CONFIGURAR DISPOSICIÓN DEL FRAME
Esta es una etapa opcional, sin embargo, muy recomendable.
Para personalizar el frame de captura con Theme Builder, simplemente genere una instancia de la clase
UnicoThemeBuilder
e invoque los métodos que personalizan cada una de las propiedades del frame de captura, como se ejemplifica a continuación:const unicoTheme = new UnicoThemeBuilder()
.setColorSilhouetteSuccess("#0384fc")
.setColorSilhouetteError("#D50000")
.setColorSilhouetteNeutral("#fcfcfc")
.setBackgroundColor("#dff1f5")
.setColorText("#0384fc")
.setBackgroundColorComponents("#0384fc")
.setColorTextComponents("#dff1f5")
.setBackgroundColorButtons("#0384fc")
.setColorTextButtons("#dff1f5")
.setBackgroundColorBoxMessage("#fff")
.setColorTextBoxMessage("#000")
.setHtmlPopupLoading(`<div style="position: absolute; top: 45%; right: 50%; transform:
translate(50%, -50%); z-index: 10; text-align: center;">Carregando...</div>`)
.build();Después de generar el objeto de tema, como se ejemplificó anteriormente, debe pasarse como parámetro al método
setTheme
del builderunicoCameraBuilder
unicoCameraBuilder.setTheme(unicoTheme);
CONFIGURAR MODO DE CAPTURA E INICIAR LA CÁMARA
Para iniciar la cámara con las configuraciones realizadas hasta aquí, se debe crear una instancia del builder a través del método
build()
.const unicoCamera = unicoCameraBuilder.build();
La cámara se preparará a partir del método
prepareDocumentCamera()
, disponible a partir del builder. Este método recibe 2 parámetros:- El archivo JSON con sus credenciales (generado a través de este guía);
- Tipo de documento que será capturado, ellos son:
DocumentCameraTypes.CNH
: Frame para captura de Licencia de conducir.DocumentCameraTypes.CNH_FRENTE
: Frame para captura del lado delantero de la Licencia de conducir.DocumentCameraTypes.CNH_VERSO
: Frame para captura del lado reverso de la Licencia de conducir.DocumentCameraTypes.CPF
: Frame para captura del Registro de Personas Físicas brasileño (CPF).DocumentCameraTypes.OTHERS("descrição")
: Frame solamente con el rectángulo donde se puede usar para otros tipos de documentos. En este tipo hay un parámetro con la descripción del documento. (Ej. contrato)DocumentCameraTypes.RG_FRENTE
: Frame para captura del lado delantero del Documento de identidad brasileño (RG).DocumentCameraTypes.RG_VERSO
: Frame para captura del lado reverso del Documento de identidad brasileño (RG).DocumentCameraTypes.RG_FRENTE_NOVO
: Frame para captura del lado delantero del nuevo Documento de identidad brasileño (RG).DocumentCameraTypes.RG_VERSO_NOVO
: Frame para captura del lado reverso del nuevo Documento de identidad brasileño (RG).
Este método genera una promise que al ser resuelta, devuelve un objeto que se utiliza para realmente abrir la cámara a través del método
open
, que recibe como parámetro las funciones decallback
configuradas en este paso.CONVIENE RECORDARPara optimizar la apertura de la cámara se puede separar las llamadas de los métodos
prepareSelfieCamera()
yopen()
. Vea un ejemplo en esta POC realizada en React con TypeScript.A continuación un ejemplo utilizando la captura de la Licencia de Conducir:
Usando la clase UnicoConfig:
const config = new UnicoConfig()
.setProjectNumber("<YOUR_PROJECT_NUMBER>")
.setProjectId("<YOUR_PROJECT_ID>")
.setMobileSdkAppId("<YOUR_MOBILE_SDK_APP_ID>")
.setHostname("<YOUR_HOSTNAME>")
.setHostInfo("<YOUR_HOST_INFO>")
.setHostKey("<YOUR_HOST_KEY>");
const cameraPromised = unicoCamera.prepareDocumentCamera(config, DocumentCameraTypes.CNH);
cameraPromised.then(cameraOpener => cameraOpener.open(callback));Usando el archivo json:
const cameraPromised = unicoCamera.prepareDocumentCamera("/services.json",
DocumentCameraTypes.CNH);
cameraPromised.then(cameraOpener => cameraOpener.open(callback));LLAMAR LAS APIS
La captura de las imágenes es solo la primera parte del viaje. Después de capturar la imagen, es necesario enviar el Encrypted generado a las API, seleccionando uno de los flujos disponibles detallados en Flujos.
AtenciónPor motivos de seguridad, el intervalo entre la generación del Encriptado y su envío a través de uno de los flujos disponibles debe ser de un máximo de 10 minutos. Los envíos realizados más allá de este período serán rechazados automáticamente por la API.
¿Dudas?
¿No encontró algo o aún necesita ayuda? Si ya es cliente o asociado, puede contactarnos a través del Centro de Ayuda.