Skip to main content

Captura de documento

Esta guía está diseñada para ayudarlo a implementar el SDK de Android de forma rápida y sencilla. Los conceptos básicos, los ejemplos de implementación de SDK están disponibles y las formas de 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 Android ofrece un componente de captura de documentos que contiene un frame de captura que ayuda al usuario a colocar el documento de manera correcta a la foto. La captura del documento puede ser realizada por el modo:

CÁMARA DE DOCUMENTO CON CAPTURA MANUAL​

En este modo de cámara, hay un frame de captura para ayudar al usuario a colocar el documento correctamente. Después de colocar el documento correctamente, el usuario debe hacer clic en el botón para capturar la foto del documento.

SDK no realiza ningún tipo de validación de lo que se está capturando.

En este modo de cámara es posible capturar los documentos:

  • CPF: Captura del lado delantero del CPF;
  • 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;
  • Lado delantero del RG: Captura del lado delantero del RG;
  • Lado reverso del RG: Captura del lado reverso del RG;
  • Otros: Captura de cualquier otro documento.
Camera de Documento com Captura Manual

IMPLEMENTACIÓN​

Al seguir esta guía, obtendrá todo el potencial del SDK integrado en su aplicación de Android.

INICIALIZAR EL SDK

Cree una instancia del builder (Generado a través de la interfaz IAcessoBioBuilder), proporcionando como parámetro el contexto en cuestión y la implementación de la clase AcessoBioListener.

La implementación de esta clase es muy simple y se puede hacer con pocas líneas de código. Todo lo que necesita hacer es instanciar al builder informando el contexto en cuestión y anular los métodos de callback con las lógicas comerciales de su aplicación:

public class MainActivity extends AppCompatActivity {

private AcessoBioListener callback = new AcessoBioListener() {
@Override
public void onErrorAcessoBio(ErrorBio errorBio) { }

@Override
public void onUserClosedCameraManually() { }

@Override
public void onSystemClosedCameraTimeoutSession() { }

@Override
public void onSystemChangedTypeCameraTimeoutFaceInference() { }
};

private IAcessoBioBuilder acessoBioBuilder = new AcessoBio(this, callback);
}

IMPLEMENTAR LAS FUNCIONES DE CALLBACK

Tenga en cuenta que el trabajo de implementación de la clase AcessoBioListener es, en gran medida, la configuración de los métodos de callback. Cada método se llama en una situación específica de devolución de llamada de SDK.

Simplemente sobrescriba los métodos ejemplificados en el paso anterior con las lógicas comerciales de su aplicación.

Alerta

Todos los métodos anteriores deben crearse como se indica en su proyecto (Incluso sin ninguna lógica). De lo contrario, el proyecto no se compila con éxito.

PERSONALIZAR EL PROCESO DE CAPTURA​

Este es un paso opcional, pero muy recomendado para que el proceso de captura tenga la identidad visual de su empresa.

Es posible personalizar algunos objetos del frame de acuerdo con el modo de cámara utilizado a través del método setTheme().

Alerta

Los tipos admitidos para la representación de color son Color Resource o String que contienen el código de color hexadecimal. Ej.: R.color.red ou #FF0000

Todos los métodos están disponibles a continuación:

IAcessoBioTheme unicoTheme = new IAcessoBioTheme() {
@Override
public Object getColorBackground() {
return R.color.your_color;
}
@Override
public Object getColorBoxMessage() {
return R.color.your_color;
}
@Override
public Object getColorTextMessage() {
return R.color.your_color;
}
@Override
public Object getColorBackgroundPopupError() {
return R.color.your_color;
}
@Override
public Object getColorTextPopupError() {
return R.color.your_color;
}
@Override
public Object getColorBackgroundButtonPopupError() {
return R.color.your_color;
}
@Override
public Object getColorTextButtonPopupError() {
return R.color.your_color;
}
@Override
public Object getColorBackgroundTakePictureButton() {
return R.color.your_color;
}
@Override
public Object getColorIconTakePictureButton() {
return R.color.your_color;
}
@Override
public Object getColorBackgroundBottomDocument() {
return R.color.your_color;
}
@Override
public Object getColorTextBottomDocument() {
return R.color.your_color;
}
@Override
public Object getColorSilhouetteSuccess() {
return R.color.your_color;
}
@Override
public Object getColorSilhouetteError() {
return R.color.your_color;
}

@Override
public Object getColorProgressBar() {
return R.color.your_color;
}
};

acessoBioBuilder.setTheme(unicoTheme);

También es posible realizar personalizaciones de manera estática, en su archivo colors.xml agregue el siguiente código:

<color name="unico_color_background"> #YourColor </color> 
<color name="unico_color_silhouette_success"> #YourColor </color>
<color name="unico_color_silhouette_error"> #YourColor </color>
<color name="unico_color_silhouette_neutral"> #YourColor </color>
<color name="unico_color_box_message"> #YourColor </color>
<color name="unico_color_text_message"> #YourColor </color>
<color name="unico_color_background_popup_error"> #YourColor
<color name="unico_color_text_popup_error"> #YourColor </color>
<color name="unico_color_background_button_popup_error"> #YourColor
<color name="unico_color_text_button_popup_error"> #YourColor </color>
<color name="unico_color_background_take_picture_button"> #YourColor </color>
<color name="unico_color_icon_take_picture_button"> #YourColor </color>
<color name="unico_color_background_bottom_document"> #YourColor </color>
<color name="unico_color_text_bottom_document"> #YourColor </color>
<color name="unico_color_button_cancel"> #YourColor </color>
<color name="unico_color_progress_bar_capture"> #YourColor </color>
Alerta

Consulte los métodos de personalización disponibles por modo de cámara.

CÁMARA DE DOCUMENTO CON CAPTURA MANUAL​

En este modo de cámara es posible personalizar:

Customização da Câmera de Documento com Captura Manual
LegendaLeyenda
Cor do fundo do botão de captura manualColor del fondo del botón de captura manual
Cor do fundo da parte inferior do frame de capturaColor del fondo de la parte inferior del frame de captura
Cor da parte superior do frame de captura e enquandramento do documentoColor de la parte superior del frame de captura y el encuadre del documento
Cor da frente do botão de captura manualColor del lado delantero del botón de captura manual
Cor do textoColor del texto
MétodoMétodo

CONFIGURAR CREDENCIALES​

Es necesario informar las credenciales generadas en la API Key para que SDK funcione, para esto, use la clase de configuración de AcessoBioConfigDataSource:

AcessoBioConfigDataSource unicoConfig = new AcessoBioConfigDataSource() {

@Override
public String getHostKey() {
return HOST_KEY;
}

@Override
public String getHostInfo() {
return HOST_INFO;
}

@Override
public String getBundleIdentifier() {
return BUNDLE_IDENTIFIER;
}

@Override
public String getMobileSdkAppId() {
return MOBILE_SDK_APP_ID;
}

@Override
public String getProjectId() {
return PROJECT_ID;
}

@Override
public String getProjectNumber() {
return PROJECT_NUMBER;
}
};

IMPLEMENTAR LISTENERS PARA EVENTOS DE LA CÁMARA​

El método de apertura de la cámara, que se llama en el siguiente paso, debe saber qué hacer cuando se capture con éxito una imagen o cuando ocurre un error en el proceso. Es necesario informar "qué hacer" al método de apertura de la cámara a través de la implementación de listeners que se llaman en situaciones de éxito o error.

Al configurar los listeners, puede especificar qué sucede en su aplicación en situaciones de error (Método onErrorDocument) o éxito (Método onSuccessSelfie) en la captura de imágenes.

El siguiente ejemplo ilustra la configuración de los listeners, build y la apertura de la cámara:

iAcessoBioDocument cameraListener = new iAcessoBioDocument() {
@Override
public void onSuccessDocument(ResultCamera result) { }

@Override
public void onErrorDocument(ErrorBio errorBio) { }
};

unicoCheckCamera.prepareDocumentCamera(unicoConfig, new DocumentCameraListener() {
@Override
public void onCameraReady(UnicoCheckCameraOpener.Document cameraOpener) {
cameraOpener.open(DocumentType.CNH, cameraListener);
}

@Override
public void onCameraFailed(String message) {
Log.e(TAG, message);
}
});
IMPLEMENTACIÓN DE LOS LISTENERS

La implementación de estos métodos listeners debe hacerse a través de una instancia de la clase iAcessoBioDocument.

PREPARAR Y ABRIR LA CÁMARA​

Es necesario crear una instancia del constructor a través del método Build(). Este método está disponible a través del objeto generado con la interfaz IAcessoBioBuilder y la clase AcessoBio:

UnicoCheckCamera unicoCheckCamera = acessoBioBuilder.build();  

El siguiente paso es preparar la cámara utilizando el método prepareDocumentCamera() con el objeto devuelto por el builder (Nominado como UnicocheckCamera en el ejemplo anterior).

El método PrepareOcumentCamera() genera un objeto del tipo UnicoCheckCameraOpener.document, que se utiliza para abrir la cámara con su método open(), recibiendo los parámetros tipo de documento que se capturarán, siendo ellos:

  • DocumentCameraType.CPF: Frame para captura del lado delantero del CPF;
  • DocumentCameraType.CNH: Frame para captura de la Licencia de conducir abierta;
  • DocumentCameraType.CNH_FRENTE: Frame para captura del lado delantero de la Licencia de conducir;
  • DocumentCameraType.CNH_VERSO: Frame para captura del lado reverso de la Licencia de conducir;
  • DocumentCameraType.RG_FRENTE: Frame para captura del lado delantero del RG;
  • DocumentCameraType.RG_VERSO: Frame para captura del lado reverso del RG;
  • DocumentCameraType.None: Frame para captura de cualquier otro documento.

MÉTODO ONSUCCESSDOCUMENT

Al efectuar la captura de imagen con éxito, se invoca este método y devuelve un resultado del tipo ResultCamera que luego se usa en la llamada de las API REST:

public void onSuccessDocument(ResultCamera result) { }

El objeto ResultCamera devuelve 2 atributos: Base64 Y Encrypted:

  • El atributo Base64 se puede usar si desea mostrar una vista previa de la imagen en su aplicación;
  • El atributo Encrypted debe enviarse en la llamada de las API REST de Unico Check.

::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. :::

MÉTODO ONERRORDOCUMENT

Cuando se produce un error en la captura de imagen, se invoca este método y devuelve un objeto de tipo ErrorBio:

public void onErrorDocument(ErrorBio errorBio) { }
MÁS INFORMACIONES

Sobre los tipos de ErrorBio en la sección de Referencias de este SDK.

CONVERSIÓN DEL BASE64 PARA BITMAP

Si es necesario convertir base64 en bitmap, la forma predeterminada no funciona para Android. Es necesario realizar el split a partir de la coma(,) para que funcione. Si desea saber más, lea el artículo How to convert a Base64 string into a Bitmap image to show it in a ImageView?.

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ón

Por 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.