Pular para o conteúdo principal

Captura de documentos

Este guia foi elaborado para ajudá-lo a implementar o SDK Flutter de forma rápida e fácil. São disponibilizados conceitos básicos, exemplos de implementação dos SDKs e também de como interagir com as APIs REST dos motores.

Através deste guia, é possivel:

  • Implementar a abertura da câmera e a captura de imagens;
  • Manipular os dados de retorno;
  • Utilizar o retorno do SDK com as APIs do motor.

Antes de começar, certifique-se que seguiu o passo-a-passo para instalação e importação do SDK neste guia.

RECURSOS DISPONÍVEIS

O SDK Flutter oferece um componente para captura de documento contendo um frame de captura que auxilia o usuário a posicionar o documento de forma correta para a foto. Após posicionar corretamente, o usuário deve clicar em um botão para capturar a foto do documento.

É possível a captura dos seguintes tipos de documentos:

  • CPF: Captura do documento de CPF;
  • CNH: Captura da CNH aberta;
  • CNH frente: Captura da frente da CNH;
  • CNH verso: Captura do verso da CNH;
  • RG frente: Captura da frente do RG;
  • RG verso: Captura do verso do RG;
  • Outros: Captura documento genérico. Para este tipo de captura você deve informar o título do documento que será mostrado na captura para o usuário usando a propriedade optional.LABEL_DOCUMENT_TYPE_OTHERS.
Captura Manual
Customização dos frames de captura

Você pode configurar o layout do frame de captura. Para mais informações sobre o que pode ser customizado, veja a página de Referências deste SDK.

IMPLEMENTAÇÃO

Seguindo este passo-a-passo, você tem todo o potencial do SDK embarcado em sua aplicação Flutter.

  1. INICIALIZAR O SDK

    Para iniciar, crie uma instância do builder (gerado através da interface UnicoCheckBuilder, fornecendo como parâmetro o contexto em questão e a implementação da classe UnicoListener.

    A implementação dessa classe é bem simples e pode ser feita com poucas linhas de código. Tudo que precisa fazer é sobrescrever os métodos de callback com as lógicas de negócio de sua aplicação.

    class _MyHomePageState extends State<MyHomePage> implements UnicoListener {

    late UnicoCheckBuilder _unicoCheck;

    /// Unico callbacks
    @override
    void onErrorUnico(UnicoError error) {}

    @override
    void onUserClosedCameraManually() {}

    @override
    void onSystemChangedTypeCameraTimeoutFaceInference() {}

    @override
    void onSystemClosedCameraTimeoutSession() {}

    /// Document callbacks
    @override
    void onSuccessDocument(ResultCamera resultCamera) { }

    @override
    void onErrorDocument(UnicoError error) { }

    }

    IMPLEMENTAR AS FUNÇÕES DE CALLBACK

    Note que, conforme o exemplo anterior, o trabalho de implementação da classe UnicoListener é, em grande parte, a configuração dos métodos de callback. Cada método é chamado em uma situação específica de retorno do SDK.

    Basta sobrescrever os métodos exemplificados no passo anterior com as lógicas de negócio de sua aplicação.

    Método onErrorUnico(UnicoError error)

    Este método é invocado quando qualquer erro de implementação ocorrer ao utilizar algum dos métodos do Unico Check, como por exemplo, ao informar um tipo de documento incorreto para a funcionalidade de captura de documentos.

    Ao ser invocado, o método recebe um parâmetro do tipo UnicoError que contem detalhes do erro. Saiba mais sobre o tipo UnicoError no documento de referências do SDK.

    Método onUserClosedCameraManually()

    Este método é invocado quando o usuário fechar a câmera de forma manual, como por exemplo, ao clicar no botão "Voltar".

    Método onSystemClosedCameraTimeoutSession()

    Este método é invocado assim que o tempo máximo de sessão for atingido (sem capturar nenhuma imagem).

    Tempo máximo da sessão

    O tempo máximo da sessão pode ser configurado no builder através do método setTimeoutSession. Este método deve receber o tempo máximo da sessão em segundos.

    Método onSystemChangedTypeCameraTimeoutFaceInference()

    Este método é invocado assim que o tempo máximo para detecção da face de um usuário for atingido (sem ter nada detectado). Neste caso, o modo de câmera é alterado automaticamente para o modo manual (sem o smart frame).

    Atenção

    Todos os métodos acima devem ser criados da forma indicada em seu projeto (mesmo que sem nenhuma lógica). Caso contrário, o projeto não compila com sucesso.

  2. EFETUAR ABERTURA DA CÂMERA

    O último passo é disparar a abertura da câmera. Este processo está dividido em algumas etapas:

    Implementar listeners para eventos da câmera

    O método de abertura da câmera precisa saber o que fazer ao conseguir capturar uma imagem ou ao ter algum erro no processo. É informado "o que fazer" ao método de abertura da câmera através da implantação de listeners que são chamados em situações de sucesso ou erro.

    Através da implementação dos listeners, você pode especificar o que acontece em seu App em situações de erro (método onErrorDocument) ou sucesso (método onSuccessDocument) na captura de imagens.

    Método onSuccessDocument
    public void onSuccessDocument(ResultCamera resultCamera) { }

    Ao efetuar uma captura de imagem com sucesso, este método é invocado e retorna um objeto do tipo ResultCamera que é utilizado posteriormente na chamada das APIs REST.

    Método onErrorDocument
    public void onErrorDocument(UnicoError error) { }

    Ao ocorrer algum erro na captura de imagem, este método é invocado e retorna um objeto do tipo UnicoError.

    Implementação dos listeners

    A implementação destes métodos (listeners) deve ser feita através de uma instância da classe UnicoDocument.

    PERSONALIZAR O PROCESSO DE CAPTURA

    Esta é uma etapa opcional, porém muito recomendada para que o processo de captura tenha a identidade visual da sua empresa.

    É possível customizar o frame de captura por meio do SDK. Para customizar o frame, basta utilizar o método correspondente a propriedade a ser customizada, e posteriormente, aplicar o novo estilo através do método setTheme().

    Entenda um pouco mais sobre o método setTheme(), exemplos de utilização e o que pode ser customizado na página de Referências deste SDK.

  3. Abrir a câmera

    Para abrir a câmera, o método openCameraDocument() é utilizado. Esse método é disponibilizado através do objeto gerado com uma instancia da classe UnicoCheck.

    Este método recebe os seguintes parâmetros:

    • Arquivo JSON com as credenciais, gerado nesse passo.

    • Tipo de documento a ser capturado, sendo eles:

      • DocumentCameraTypes.CPF: Frame para captura CPF;
      • DocumentCameraTypes.CNH: Frame para captura de CNH;
      • DocumentCameraType.CNH_FRENTE: Frame para captura da frente da CNH;
      • DocumentCameraType.CNH_VERSO: Frame para captura do verso da CNH;
      • DocumentCameraTypes.RG_FRENTE: Frame para captura da frente do RG.
      • DocumentCameraTypes.RG_VERSO: Frame para captura da parte traseira do RG.
      • DocumentCameraTypes.OUTROS("descrição"): Frame somente com o retângulo para ser usado para outros tipos de documentos, com um parâmetro para a descrição do documento. (Ex. contrato)
    • Os listeners configurados acima;

    Exemplo para captura de CNH:

     _unicoCheck.build().openCameraDocument(
    jsonFileName: androidJsonFileName,
    documentType: DocumentType.CNH,
    listener: this);

    Em caso de sucesso, o objeto ResultCamera retorna 2 atributos: base64 e encrypted.

    • O atributo base64 pode ser utilizado caso você queira exibir um preview da imagem em seu app;
    • O atributo encrypted deve ser enviado na chamada das APIs REST do unico check;
  4. CHAMAR AS APIS

    A captura das imagens é apenas a primeira parte da jornada. Após capturar a imagem, é necessário enviar o Encrypted gerado para as APIs, selecionando um dos fluxos disponíveis detalhados em Fluxos.

    Atenção

    Por motivos de segurança, o intervalo entre a geração do Encrypted e o envio via um dos fluxos disponíveis deve ser de até no máximo 10 minutos. Envios feitos além deste período serão rejeitados automaticamente pela API.

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da Central de Ajuda.