Captura de NFC
1. Introducción
La captura facial se realiza con el NFC Component.
Este componente se encarga de realizar la lectura del NFC de los documentos de identidad y pasaportes. Sus principales procesos son:
- Gestión interna del sensor de NFC.
- Gestión de permisos.
- Análisis de documento.
- Análisis del progreso.
- Asistente en los procesos de lectura.
- Devolución de toda la información posible a leer
- Devolución de imágenes cuando estén disponible para su lectura
En el apartado de Lanzamiento simplificado se detallan los pasos necesarios para la integración básica del SDK. En esta sección se añade la información para el lanzamiento de este componente.
2. Dependencia
La dependencia específica del componente es:
implementation "com.facephi.androidsdk:nfc_component:$sdk_nfc_component_version"{
exclude group : "org.bouncycastle", module : "bcprov-jdk15on"
exclude group : "org.bouncycastle", module : "jetified-bcprov-jdk15on-1.68"
}
Además habrá que añadir en gradle:
android {
...
packaging {
resources {
pickFirsts.add("META-INF/versions/9/OSGI-INF/MANIFEST.MF")
}
}
}
3. Controladores disponibles
| Controlador | Descripción |
|---|---|
| NFCController | Controlador principal de lectura NFC |
4. Lanzamiento simplificado
Una vez iniciado el SDK y creada una nueva operación se podrá lanzar el componente. Se podrá hacer uso de cualquiera de sus controladores para ejecutar su funcionalidad.
Lanzamiento de la captura:
val response = SDKController.launch(
NfcController(
componentData = NfcConfigurationData(...),
state = { state ->
Napier.d("NFC: State: ${state.name}")
},
debugLogs = {
Napier.d("NFC Logs: $it")
}
)
)
when (response) {
is SdkResult.Error -> Napier.d("NFC: ERROR - ${response.error.name}")
is SdkResult.Success -> response.data
}
5. Configuración básica
Para lanzar el componente actual, se deberá crear un objeto NFCConfigurationData que será la configuración del controlador del componente.
La configuración básica necesaria para es la siguiente:
NfcConfigurationData(
documentNumber = NFC_SUPPORT_NUMBER, // Num soport.
birthDate = NFC_BIRTH_DATE, // "dd/MM/yyyy"
expirationDate = NFC_EXPIRATION_DATE, // "dd/MM/yyyy",
)
Los datos necesarios son los del documento que se va a capturar.
6. Recepción del resultado
El lanzamiento devolverá la información en formato SdkResult. Pudiendo diferenciarse entre un lanzamiento correcto y uno incorrecto:
when (response) {
is SdkResult.Error -> Napier.d("ERROR - ${response.error}")
is SdkResult.Success -> response.data
}
6.1. Recepción de errores
Los errores se devolverán como un objeto 'NfcError'.
Listado de errores:
- APPLICATION_CONTEXT_ERROR: El contexto de aplicación necesario es nulo.
- CANCEL_BY_USER: El usuario ha cancelado el proceso.
- CANCEL_LAUNCH: Se ha hecho una cancelación general del SDK.
- COMPONENT_LICENSE_ERROR: La licencia del componente no es correcta.
- EMPTY_LICENSE: El String de licencia está vacío.
- EXTRACT_DATA_ERROR: Error en los datos extraídos.
- FETCH_DATA_ERROR: Error en la recogida del resultado.
- FLOW_ERROR: Error en el proceso de flow.
- INITIALIZATION_ERROR: Error de inicialización.
- LAST_COMMAND_EXPECTED: Error en el comando de finalización
- MANAGER_NOT_INITIALIZED: Los managers son nulos.
- NFC_ERROR: Error general
- NFC_ERROR_DATA: Error en los datos de entrada
- NFC_ERROR_DISABLED: NFC deshabilitado
- NFC_ERROR_ILLEGAL_ARGUMENT: NFC con un tag incorrecto
- NFC_ERROR_IO: Error de entrada/salida
- NFC_ERROR_NOT_SUPPORTED: NFC no somportado
- NFC_ERROR_TAG_LOST: Conexión perdida
- OPERATION_NOT_CREATED: No hay ninguna operación en curso.
- TIMEOUT: Timeout en el proceso.
6.2. Recepción del resultado correcto - data
En la parte de SdkResult.Success - data, dispondremos de la clase NfcResult.
El resultado devuelve las imágenes en formato SdkImage, es posible extraer el bitmap accediendo a image.bitmap. Si se quisiera convertir a base64 se puede utilizar la función:
Base64.encodeToString(this.toByteArray(), Base64.NO_WRAP)
Los campos devueltos en el resultado son los siguientes:
6.2.1. nfcRawData
Información obtenida por cada tipo de dato en formato crudo.
6.2.2. nfcDocumentInformation
Información obtenida del documento. Campos que se devuelven:
- documentNumber
- expirationDate
- issuer
- mrzString
- type
6.2.3. nfcPersonalInformation
Información obtenida del documento. Campos que se devuelven:
- address
- birthdate
- city
- gender
- name
- nationality
- personalNumber
- placeOfBirth
- surname
6.2.4. nfcImages
Información de imágenes obtenidas del documento. Campos que se devuelven:
- facialImage
- signatureImage
- tokenFacialImage
- tokenSignatureImage
6.2.5 nfcSecurityData
Información de datos de seguridad del documento. Campos que se devuelven:
- dataGroupsHashes
- dataGroupsRead
- documentSigningCertificateData
- issuerSigningCertificateData
- ldsVersion
6.2.6. nfcValidations
Información de las validaciones del documento. Campos que se devuelven:
- accessType
- activeAuthenticationSupported
- activeAuthenticationValidation
- chipAuthenticationValidation
- dataGroupsHashesValidation
- documentSigningValidation
- issuerSigningValidation
6.2.7 tokenOcr
Datos del OCR cifrados
7. Información avanzada
Este apartado amplía la información del componente.
7.1 Configuración avanzada del componente
Para lanzar el componente actual, se deberá crear un objeto NFCConfigurationData que será la configuración del controlador del componente.
A continuación se detallan todos los campos que forman parte de esta clase.
7.1.1. documentNumber
Indica el número de documento o número de soporte dependiendo del documento a realizar la lectura.
Éste campo es obligatorio.
7.1.2. birthDate
Indica la fecha de nacimiento que aparece en el documento ("dd/MM/yyyy").