Pular para o conteúdo principal

Captura de Selfie

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 do motor biométrico.

Através deste guia, é possivel:

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

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 selfie contendo uma silhueta que ajuda o usuário a se posicionar de forma correta para a foto. A captura da selfie pode ser feita de formas diferentes, cada forma com um modo de câmera diferente:

CAPTURA MANUAL

Neste tipo de experiência existe uma silhueta de captura para auxiliar o usuário a posicionar o rosto corretamente. Após se posicionar corretamente, o usuário deve clicar em um botão para capturar a selfie.

O SDK não efetua nenhum tipo de validação do que está sendo capturado. Se a imagem capturada não possuir um rosto biometricamente válido, o encrypted é recusado pelas APIs do backend do motor biométrico.

Captura Manual

CAPTURA AUTOMÁTICA

Neste tipo de experiência, é identificado o rosto do usuário automaticamente, através de algoritmos de visão computacional e ele é auxiliado para que se posicione de forma correta dentro da silhueta de captura. Após se posicionar corretamente, a imagem é capturada de forma automática.

Por ajudar o usuário a enquadrar o rosto na área de captura, essa opção pode diminuir problemas ao enviar o encrypted às APIs do backend do motor biométrico.

Captura Manual

SMARTLIVE COM INTERAÇÃO FACETEC

Neste tipo de experiência, após centralizar o rosto na silhueta de captura, o usuário é instruído a realizar um simples movimento de aproximação do rosto, que são acompanhados por algoritmos de visão computacional com o objetivo de garantir que ele realmente está tirando a foto naquele momento.

Por exigir a movimentação do usuário, este tipo de captura possui uma camada extra de segurança contra fraudes. Tal como na captura automática, a imagem é capturada sem a necessidade do usuário pressionar um botão. Desta forma existe uma tendência a diminuir problemas ao enviar o encrypted às APIs do backend do motor biométrico.

Ativação do Smartlive com interação FaceTec

A ativação da funcionalidade pode ser verificada no portal do cliente, como explicado neste artigo.

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;


    @override
    void onErrorUnico(UnicoError error) {}

    @override
    void onUserClosedCameraManually() {}

    @override
    void onSystemChangedTypeCameraTimeoutFaceInference() {}

    @override
    void onSystemClosedCameraTimeoutSession() {}
    }

    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 será 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:

    onErrorUnico(UnicoError error)

    Este método é invocado quando qualquer erro de implementação ocorrer ao utilizar algum dos métodos, 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.

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

    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.

    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. CONFIGURAR O MODO DA CÂMERA

    Como explicado anteriormente, existem três modos de câmeras de captura disponíveis. Se não estiver utilizando o modo Smartlive com interação FaceTec, nesta etapa você pode escolher entre o modo de captura Manual ou Automático.

    Dica

    Caso você esteja utilizando o modo Smartlive com interação FaceTec, a configuração do tipo de câmera é irrelevante, pois este modo oferece uma experiência pré-definida que não pode ser alterada.

    No entanto, é recomendado que você configure um tipo de câmera em seu builder (como descrito neste passo), pois caso você desabilite o modo Liveness com interação FaceTec em seu portal do cliente (e gere um novo JSON), você não precisa alterar seu código.

    O SDK tem configurado e habilitado por padrão o enquadramento inteligente e a captura automática. Para utilizar a câmera em modo normal, desabilite ambas funcionalidades através dos métodos setAutoCapture e setSmartFrame.

    Os exemplos a seguir demonstram como você pode configurar cada um dos modos de câmera.


    Modo inteligente (Captura automática - Smart Camera)

    Por padrão, o SDK possui o enquadramento inteligente e a captura automática habilitados. Caso utilize este modo de câmera, não é necessário alterar nenhuma configuração.

    Caso as configurações da câmera tenham sido alteradas previamente em seu App, é possível restaurá-las através dos métodos setAutoCapture e setSmartFrame:


    UnicoCheckCameraOpener _opener = new UnicoCheck (this)
    .setAutoCapture(autoCapture: true)
    .setSmartFrame(smartFrame: true)
    .build();

    Atenção

    Não é possível implementar o método setAutoCapture(true) com o método setSmartFrame(false), ou seja, não é possível manter a captura automática sem o Smart Frame, pois é ele quem realiza o enquadramento inteligênte.

    Modo manual

    Por padrão, o SDK possui o enquadramento inteligente e a captura automática habilitados. Para utilizar o modo manual ambas as configurações relacionadas a Smart Camera devem ser desligadas através dos métodos setAutoCapture e setSmartFrame:

    UnicoCheckCameraOpener _opener = new UnicoCheck (this)
    .setAutoCapture(autoCapture: false)
    .setSmartFrame(smartFrame: false)
    .build();
    Dica - SmartFrame

    Mesmo em modo manual é possível utilizar o Smart Frame. Neste caso, a silhueta é exibida para identificar o enquadramento para então habilitar o botão. Para isto, basta configurar setAutoCapture(autoCapture: false) e setSmartFrame(smartFrame: true)

  3. 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 alguns objetos do frame de acordo com o modo de câmera utilizado, 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.

  4. CONFIGURAR ABERTURA DE 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 onErrorSelfie) ou sucesso (método onSuccessSelfie) na captura de imagens.

    Método onSuccessSelfie
    @override
    void onSuccessSelfie(ResultCamera result) { }

    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 onErrorSelfie
    @override
    void onErrorSelfie(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 UnicoSelfie.

    Abrir câmera

    O método openCameraSelfie é utilizado para abrir a camera. Este método recebe como parâmetro a implementação da classe UnicoSelfie e o JSON com as credenciais, gerado nessa etapa.

    O exemplo a seguir ilustra os passos de configuração dos listeners e abertura da câmera:

    _opener.openCameraSelfie(jsonFileName: androidJsonFileName, listener: this)

    O objeto ResultCamera retorna 2 atributos: Base64 e Encrypted:

    • O atributo Base64 pode ser utilizado se quiser exibir uma prévia da imagem em seu app; • O atributo Encrypted deve ser enviado na chamada das APIs REST do unico | check.

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