Captura de NFC
Introdução
A captura facial é realizada com o Componente NFC.
Este componente é responsável por realizar a leitura NFC dos documentos de identidade e passaportes. Seus principais processos são:
Gerenciamento interno do sensor NFC.
Gerenciamento de permissões.
Análise do documento.
Análise do progresso.
Assistente nos processos de leitura.
Retorno de todas as informações possíveis de leitura
Retorno de imagens quando estiverem disponíveis para leitura
Na seção de Lançamento simplificado são detalhados os passos necessários para a integração básica do SDK. Nesta seção é adicionada a informação para o lançamento deste componente.
Dependência
A dependência específica do componente é:
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"
}Além disso, será necessário adicionar no Gradle:
Controladores disponíveis
Controlador
Descrição
NFCController
Controlador principal de leitura NFC
Lançamento simplificado
Uma vez iniciado o SDK e criada uma nova operação, será possível iniciar o componente. Será possível usar qualquer um de seus controladores para executar sua funcionalidade.
Início da captura:
Configuração básica
Para lançar o componente atual, deverá ser criado um objeto NFCConfigurationData que será a configuração do controlador do componente.
A configuração básica necessária é a seguinte:
Os dados necessários são os do documento que será capturado.
Recebimento do resultado
A execução retornará as informações no formato SdkResult. Sendo possível diferenciar entre uma execução correta e uma incorreta:
Recebimento de erros
Os erros serão retornados como um objeto 'NfcError'.
Lista de erros:
NFC_APPLICATION_CONTEXT_ERROR: O contexto de aplicação necessário é nulo.
NFC_CANCEL_BY_USER: O usuário cancelou o processo.
NFC_CANCEL_LAUNCH: Foi feito um cancelamento geral do SDK.
NFC_COMPONENT_LICENSE_ERROR: A licença do componente não está correta.
NFC_EMPTY_LICENSE: A string de licença está vazia.
NFC_EXTRACT_DATA_ERROR: Erro nos dados extraídos.
NFC_FETCH_DATA_ERROR: Erro na coleta do resultado.
NFC_FLOW_ERROR: Erro no processo de flow.
NFC_INITIALIZATION_ERROR: Erro de inicialização.
NFC_LAST_COMMAND_EXPECTED: Erro no comando de finalização
NFC_MANAGER_NOT_INITIALIZED: Os managers estão nulos.
NFC_NO_DATA_ERROR: Os dados de entrada estão nulos ou nenhum resultado da leitura foi recebido.
NFC_ERROR: Erro geral
NFC_ERROR_DATA: Erro nos dados de entrada
NFC_ERROR_DISABLED: NFC desabilitado
NFC_ERROR_ILLEGAL_ARGUMENT: NFC com uma tag incorreta
NFC_ERROR_IO: Erro de entrada/saída
NFC_ERROR_NOT_SUPPORTED: NFC não suportado
NFC_ERROR_TAG_LOST: Conexão perdida
NFC_OPERATION_NOT_CREATED: Nenhuma operação está em andamento.
NFC_TIMEOUT: Timeout no processo.
Recepção do resultado correto - data
Na parte de SdkResult.Success - data, teremos a classe NfcResult.
O resultado retorna as imagens no formato SdkImage, é possível extrair o bitmap acessando image.bitmap. Se quiser converter para base64, é possível usar a função:
Base64.encodeToString(this.toByteArray(), Base64.NO_WRAP)
Os campos criptografados no resultado passam a ser incorporados a partir da versão 2.6.0
Os campos retornados no resultado são os seguintes:
nfcRawData
Informações obtidas por cada tipo de dado em formato bruto.
nfcDocumentInformation
Informações obtidas do documento organizadas por:
documentNumber
expirationDate
issuer
mrzString
type
nfcPersonalInformation
Informações obtidas do documento organizadas por:
address
birthdate
city
gender
name
nationality
personalNumber
placeOfBirth
surname
nfcImages
Informações de imagens obtidas do documento organizadas por:
facialImage
fingerprintImage
signatureImage
tokenFacialImage
tokenSignatureImage
nfcSecurityData
Informações dos dados de segurança do documento organizadas por:
dataGroupsHashes
dataGroupsRead
documentSigningCertificateData
issuerSigningCertificateData
ldsVersion
nfcValidations
Informações das validações do documento organizadas por:
accessType
activeAuthenticationSupported
activeAuthenticationValidation
chipAuthenticationSupported
chipAuthenticationValidation
dataGroupsHashesValidation
documentSigningValidation
issuerSigningValidation
tokenOcr
Dados do OCR criptografados
Informações avançadas
Esta seção amplia as informações do componente.
Configuração avançada do componente
Para lançar o componente atual, deverá ser criado um objeto NFCConfigurationData que será a configuração do controlador do componente.
A seguir, são detalhados todos os campos que fazem parte desta classe.
documentNumber
Indica o número do documento ou número de suporte dependendo do documento cuja leitura será realizada.
Este campo é obrigatório.
birthDate
Indica a data de nascimento que aparece no documento ("dd/MM/yyyy").
Este campo é obrigatório.
expirationDate
Indica a data de expiração que aparece no documento ("dd/MM/yyyy").
Este campo é obrigatório.
extractionTimeout
Define o tempo máximo que a leitura pode durar.
showReadingScreen
Define se deseja exibir a tela modal inferior com a leitura que está sendo realizada. Se desativada, nenhuma visualização será exibida e será necessário escutar os estados retornados pelo controlador.
showTutorial
Indica se o componente ativa a tela de tutorial. Nesta visualização é explicado de forma intuitiva como a captura é realizada.
vibrationEnabled
Indica se deseja um feedback de vibração ao final do processo.
skipPace
Indica que deseja realizar apenas a leitura BAC de NFC. É uma leitura com informações mais simples e rápida que permite a leitura de uma variedade maior de documentos.
showDiagnostic
Exibir telas de diagnóstico ao final do processo
extractFacialImage
Indica se deseja extrair a imagem do rosto.
extractSignatureImage
Indica se deseja extrair a imagem da assinatura.
documentType
Campo utilizado para alterar a visualização do tutorial e exibir os diferentes documentos.
showPreviousTip
Mostra uma tela prévia ao lançamento da captura com informações sobre o processo a ser realizado e um botão para o lançamento.
readingProgressStyle
Alteração de estilo na tela de leitura do documento:
ReadingProgressStyle.DOTS: O progresso é indicado visualmente por pontos
ReadingProgressStyle.PERCENTAGE: O progresso é exibido com uma porcentagem
Personalização do componente
Além das mudanças que podem ser feitas no nível do SDK (as quais são explicadas no documento de Personalização do SDK), este componente em específico permite a modificação de sua interface.
Textos
Os textos podem ser personalizados adicionando um arquivo XML de recursos no aplicativo cliente e sobrescrevendo os valores padrão.
Animações
Se desejar modificar as animações (lottie) do SDK, será necessário incluir as animações com o mesmo nome na pasta res/raw/ da aplicação.
Visualizações externas
É possível modificar as telas inferiores de leitura do componente mantendo sua funcionalidade e navegação. A partir da versão 2.8.0, a personalização externa fica limitada às bottom sheets de leitura; as visualizações legadas de dica prévia e diagnóstico já não fazem parte do contrato público. Para isso, devem ser implementadas as seguintes interfaces:
Telas do diálogo de leitura:
Depois de criadas as classes que implementam as interfaces, no lançamento do componente será possível adicionar o parâmetro "customViews" para que sejam usadas no SDK.
Atualizado