For the complete documentation index, see llms.txt. This page is also available as Markdown.

Introdução legada ao SDK

Sobre o CafSDK

Esta documentação técnica aborda a implementação do CafSDK para Android, detalhando a configuração, a inicialização, a execução dos fluxos de captura e as customizações avançadas.

Atualmente, o CafSDK integra vários módulos: Face Liveness (FL), Document Detector (DD) executados sequencialmente com uma interface de configuração unificada. As versões recentes incluem recursos de segurança aprimorados, melhor desempenho, melhor tratamento de erros e personalização aprimorada do upload.

O que é Face Liveness

É o módulo que valida a autenticidade de um rosto capturado por uma câmera, garantindo que a imagem corresponda a uma pessoa real.

Características técnicas:

  • caffaceliveness é a base compartilhada. Você deve declarar pelo menos um caffaceliveness-providers-* artefato para os provedores de liveness que seu produto usa (iProov, PayFace, FaceTec, …). caffaceliveness-ui is opcional e adiciona a UI de Face Liveness do Caf mais customização hooks; omita-o se seu app controlar toda a interface.

  • Configuração de URL para autenticação (authBaseUrl) e verificação de liveness (livenessBaseUrl).

  • Endpoints de proxy reverso e certificados de segurança (opcional).

  • Flags para habilitar captura de tela e modo de depuração.

  • Suporte a vários provedores de liveness quando você declara as dependências correspondentes.

O que é Document Detector

É o módulo que permite a captura e o processamento de documentos (por exemplo, RG, cartão do CPF, passaporte etc.).

Características técnicas:

  • Configuração de um fluxo passo a passo definido por DocumentDetectorStep para captura de documentos.

  • Parâmetros operacionais, como timeout, flags de captura manual e outras configurações.

  • Possibilidade de usar a câmera para validações de enquadramento ou upload de arquivo de documento.


Comece a usar o SDK

Adicione a dependência

Para que seu projeto Android utilize o CafSDK, é necessário configurar corretamente os repositórios Maven e declarar as dependências do SDK no seu projeto. Esta etapa garante que os artefatos (bibliotecas) sejam baixados e integrados durante a compilação.

Requisitos para adicionar

Os requisitos mínimos para todos os módulos do CafSDK incluem:

Requisito
Versão

API do Android SDK - versão mínima (minSdk)

26

Android SDK API - versão de compilação (compileSDK)

34

Kotlin

1.9.10

Gradle

8.4

Plugin do Android Gradle (AGP)

8.3.2

Requisitos Específicos do Módulo

  • Suporta iProov, PayFacee FaceTec 2D como dependências explícitas de provedores de liveness (veja Passo 2 - Inclua a dependência do CafSDK)

  • Com tecnologia TensorFlow Lite para processamento de documentos

  • Suporte a vários tipos de documentos e fluxos de captura

  • Inclui algoritmos avançados de validação de qualidade

  • Recursos aprimorados de personalização do upload

  • Mecanismo de retentativa aprimorado com melhor feedback ao usuário

  • Recursos de segurança aprimorados

  • Gerenciamento de instâncias aprimorado para evitar falhas

Passo a passo para adicionar

Passo 1 - Adicione o repositório Maven

Nesta etapa, você precisa informar ao Gradle onde localizar os artefatos do CafSDK e dependências adicionais que possam ser usadas (como as relacionadas ao Caf Face Liveness, DocumentDetector ou FingerPrintJS).

Para isso, configure o arquivo settings.gradle.kts do projeto (geralmente localizado na raiz), incluindo os seguintes repositórios:

  • Repositório Caf: onde os artefatos do CafSDK estão hospedados.

  • Repositório iProov: necessário apenas se você incluir o iProov provedor de liveness (caffaceliveness-providers-iproov-lite ou caffaceliveness-providers-iproov-full).

  • Repositório FingerPrintJS: dependência interna dos módulos.

  • JitPack: para dependências hospedadas via JitPack (Github).

  • Repositório Fortface: necessário apenas se você incluir o PayFace provedor de liveness (caffaceliveness-providers-payface).

Exemplo de configuração:

Mais detalhes

  • Flexibilidade: essa configuração permite que o projeto baixe todas as dependências necessárias de diferentes fontes, garantindo compatibilidade e versões atualizadas.

  • Manutenção: se houver atualizações nos repositórios ou mudanças na estrutura de publicação, basta atualizar esta seção para refletir as novas URLs.

  • Contexto: a inclusão de repositórios é feita apenas uma vez no nível do projeto, garantindo que todos os módulos possam acessar os artefatos necessários.

Passo 2 - Inclua a dependência do CafSDK

Depois de configurar os repositórios, é necessário declarar as dependências específicas do CafSDK no arquivo build.gradle.kts do módulo do seu aplicativo. Esta etapa declara quais módulos do SDK serão usados, permitindo que o Gradle gerencie as versões e resolva as dependências corretamente.

Exemplo de declaração de dependências:

iProov e Protobuf

  • Use caffaceliveness-providers-iproov-lite quando seu app padroniza em Protobuf JavaLite (padrão típico para menor footprint).

  • Use caffaceliveness-providers-iproov-full quando você precisa usar Protobuf Java (completo) junto com iProov.

Você pode combinar vários provedores no mesmo app declarando mais de uma caffaceliveness-providers-* dependência, se sua integração exigir.

Importante

Caf BoM (Lista de Materiais)

Usar o BoM ajuda a centralizar o gerenciamento de versão de todos os módulos do CafSDK. Assim, todas as dependências relacionadas ao SDK usarão a mesma versão definida, evitando conflitos e facilitando as atualizações.

Módulos de Captura

  • Caf Face Liveness: sempre declare caffaceliveness (base compartilhada) e pelo menos um caffaceliveness-providers-* módulo para os provedores usados pela sua integração. caffaceliveness e uma dependência de provedor são ambas obrigatórias; a base não inclui SDKs de fornecedores por padrão. caffaceliveness-ui is opcional: ele adiciona a UI de Face Liveness do Caf e customização hooks; omita-o para um fluxo totalmente personalizado ou sem interface.

  • Caf Document Detector: escolha o módulo padrão ou o com a UI do Caf (document-detector-ui), de acordo com suas necessidades de UX.

Problemas conhecidos

Conflitos de Classes Duplicadas com TensorFlow Lite ou LiteRT

Se seu aplicativo usa outros SDKs que incluem dependências do TensorFlow Lite ou LiteRT (como ML Kit, Firebase ML ou outros SDKs baseados em ML), você pode encontrar classe duplicada erros durante a compilação.

Solução:

Exclua as dependências conflitantes do módulo Document Detector adicionando a seguinte configuração ao seu build.gradle.kts:

Observação: Essa solução é recomendada quando você está usando outros SDKs que já fornecem essas dependências em seu projeto.

Verificação de Versão

Verifique sempre a versão mais recente do CafSDK nas notas de versão para garantir que você esteja usando as versões mais atualizadas e compatíveis.

Versões Atuais dos Módulos

A seguir estão as versões atuais dos módulos independentes:

Módulo
Versão atual
Descrição

CafSDK

7.10.0

Módulo de validação unificada

Essa configuração garante que seu projeto esteja preparado para integrar o CafSDK, assegurando que todos os artefatos necessários sejam localizados e incorporados durante a compilação. Se houver mudanças nos repositórios ou novas dependências forem introduzidas, atualize as configurações.


Como inicializar o SDK

Permissões

Para que os módulos funcionem corretamente, algumas permissões precisam ser declaradas no AndroidManifest.xml arquivo, confira:

Para Face Liveness

Permissão
Descrição
Obrigatoriedade

android.permission.CAMERA

Permite acesso à câmera para capturar imagens e realizar a verificação facial (liveness).

Obrigatório

android.permission.INTERNET

Permite a comunicação com serviços de autenticação e verificação (HTTPS/WSS).

Obrigatório

Para Document Detector

Permissão
Descrição
Obrigatoriedade

android.permission.CAMERA

Permite acesso à câmera para capturar imagens de documentos.

Somente para captura

android.permission.INTERNET

Permite que as imagens capturadas sejam enviadas aos servidores para processamento e validação.

Obrigatório

android.permission.READ_EXTERNAL_STORAGE

Permite acesso a arquivos e imagens armazenados para processamento, se necessário.

Somente para envio

Configurações

É necessário configurar o SDK para que ele entenda o fluxo de execução e os parâmetros específicos de cada módulo. O processo de inicialização é dividido em duas partes: configuração global e configuração específica do módulo.

Configuração global

Nesta etapa, você cria um objeto do tipo CafSdkConfiguration, que serve como contêiner central para todas as configurações do fluxo de captura.

  1. Ordem de apresentação dos módulos (presentationOrder):

  • Defina a sequência na qual os módulos serão executados. Essa ordem é crucial para garantir que o fluxo de captura siga a lógica de negócio definida pelo seu projeto.

  • Por exemplo, se o fluxo exigir que o documento seja capturado antes da verificação de liveness, a ordem deve colocar o Detector de Documentos módulo antes do Face Liveness.

  • Importante: dependendo da implementação, pode haver variações nos nomes, como CafModuleType.FACE_LIVENESS ou CafModuleType.FACE_LIVENESS_UI, que indicam se será usada uma versão sem interface ou uma versão com interface.

  1. Módulo de segurança (enableSecurityModule):

  • Ativa ou desativa o módulo de segurança. Opcional, o padrão é true.

Exemplo de código para criar a configuração global:

Configuração específica do módulo

Depois de definir as configurações globais, é necessário configurar os módulos individualmente. Essa configuração específica permite ajustar parâmetros operacionais específicos, garantindo que eles se comportem de acordo com os requisitos do seu fluxo de captura.

Configuração do Document Detector

O Módulo Document Detector é responsável pela captura e processamento de documentos. Sua configuração envolve vários parâmetros.

Parâmetro obrigatório:

  • Fluxo de captura (flow):

    • Define uma lista de etapas (DocumentDetectorStep) que especifica qual documento será capturado.

    • Esse fluxo pode ser personalizado de acordo com os tipos de documentos a serem validados pelo aplicativo.

Parâmetros operacionais:

  • useAdb, useDebuge useDeveloperMode são flags que ativam modos específicos para testes e desenvolvimento, permitindo maior flexibilidade durante a fase de integração.

  • manualCaptureEnabled e manualCaptureTime controlam se a captura manual é permitida e, se for, definem o limite de tempo (em segundos) para o usuário executar a ação manualmente.

  • requestTimeout define o tempo máximo (em segundos) que o sistema aguardará por uma resposta do servidor.

  • showPopup determina se um pop-up de confirmação ou instrução será exibido ao usuário após a captura do documento.

Exemplo de código para a configuração do Document Detector:

Configuração do Face Liveness

A configuração do módulo Face Liveness é essencial para garantir a segurança e a confiabilidade do processo de verificação facial, pois ele tem a função de validar se o rosto capturado pertence a uma pessoa real. Os principais parâmetros são:

  • Carregamento (Tela de carregamento):

    • O loading flag define se uma tela de carregamento deve ser exibida enquanto o módulo executa o processamento. Isso melhora a experiência do usuário ao informá-lo de que o processo está em andamento.

  • Configuração de Proxy Reverso

    • authBaseUrl e livenessBaseUrl são endpoints opcionais para os serviços de autenticação e verificação de liveness, respectivamente.

    • Uma vez configurados, esses valores devem ser definidos com URLs válidas, em que authBaseUrl normalmente usa o protocolo HTTPS por segurança, e livenessBaseUrl usa WSS (WebSocket Seguro).

    • Certificados:

      • Ao atribuir valores às URLs dos serviços, também é necessário fornecer a certificates lista e garantir comunicações seguras com servidores confiáveis (ao usar proxy reverso).

  • Opções Adicionais:

    • screenCaptureEnabled habilita ou desabilita a capacidade de capturar a tela durante o processo de verificação.

    • debugModeEnabled permite que logs e informações adicionais fiquem disponíveis durante a execução, facilitando a depuração.

    • executeFaceAuth define se a autenticação facial será executada.

    • maxRetryAttempts define o número máximo de tentativas de retentativa para a validação de liveness facial. Se definido como -1, permite retentativas ilimitadas.

Exemplo de código para a configuração do Face Liveness:

Essas configurações iniciais são fundamentais para garantir que o SDK funcione como esperado. Cada parâmetro foi projetado para oferecer flexibilidade e segurança, permitindo que o fluxo de captura seja adaptado às necessidades específicas do seu aplicativo.

Ao concluir essas configurações, o SDK estará pronto para ser inicializado e executado, garantindo uma integração robusta e eficiente com os módulos.


Inicializando o Builder

A inicialização do Builder é a etapa em que o fluxo de captura do CafSDK é configurado para execução. Usando a classe CafSdkProvider.Builder, você configura os parâmetros essenciais que definem o comportamento do fluxo e preparam o SDK para ser iniciado.

Parâmetros essenciais

  • mobileToken: token que autentica a requisição e garante que apenas clientes autorizados iniciem o fluxo.

  • personId: identificador único do usuário para o qual o fluxo será executado.

  • environment: define o ambiente de execução, por exemplo, CafEnvironment.PROD para produção. Isso permite alternar entre os ambientes de desenvolvimento, homologação e produção.

  • configuração: o objeto CafSdkConfiguration configurado anteriormente, que contém tanto a ordem de execução dos módulos quanto as configurações específicas.

  • callback: um callback unificado, onde todos os eventos gerados pelos módulos (como carregamento, sucesso, erro e cancelamento) são tratados centralmente.

Exemplo de código detalhado:

Callback Unificado

O callback unificado é um dos pilares do CafSDK, responsável por notificar o aplicativo sobre o estado de cada etapa do fluxo de captura. Ele centraliza os eventos disparados pelos módulos e permite ao desenvolvedor implementar lógicas de resposta, registros de logs e tratamento de erros.

Tipos de eventos do callback:

  • Log: captura mensagens de log com diferentes níveis (DEBUG, USAGE, INFO). Essas mensagens ajudam a identificar o comportamento interno do fluxo.

  • Carregando: indica o início do processamento do módulo. Útil para exibir indicadores visuais de progresso.

  • Carregado: confirma que determinada ação foi executada. Útil para ocultar indicadores visuais de progresso.

  • Sucesso: ao concluir com sucesso, cada módulo dispara um evento contendo um CafUnifiedResponse objeto.

  • Falha: se ocorrer uma falha durante a execução, este evento é disparado com uma mensagem descritiva e o tipo da falha.

  • Erro: se ocorrer um problema durante a execução, este evento é disparado com a mensagem de erro, permitindo que o aplicativo trate o erro.

  • Cancelado: indica que o usuário ou o sistema interrompeu o fluxo, permitindo ações de recuperação ou notificações.

Exemplos de código:

Tratamento de eventos da sessão

O callback do builder retorna um conjunto de eventos definido pela CafUnifiedEvent enumeração. Esses eventos incluem:

  • Loading: indica uma solicitação de carregamento do SDK

  • Loaded: indica uma solicitação de carregamento do SDK concluída

  • Success(responses: List<CafUnifiedResponse>): resultados finais (quando waitForAllServices=true)

  • Failure(response: String, type: CafFailureType, description: String): falhas específicas do módulo

  • Error(response: String, type: CafErrorType, description: String): erros críticos de execução

  • Cancelado: cancelamento iniciado pelo usuário

  • Log(level: CafLogLevel, message: String): informações de depuração

Detalhamento dos tipos de erro

Tipos de Falha (CafFailureType)

Caso do Enum
Condição de disparo
GPA
LA

UNKNOWN

Falha genérica

TOO_MUCH_MOVEMENT

Movimento excessivo da cabeça

TOO_BRIGHT

Iluminação excessiva

TOO_DARK

Condições de pouca luz

MISALIGNED_FACE

Falha no alinhamento do rosto

FACE_TOO_FAR

Rosto muito distante

FACE_TOO_CLOSE

Rosto muito perto

SUNGLASSES

Óculos que obstruem os olhos

OBSCURED_FACE

Obstrução parcial do rosto

EYES_CLOSED

Olhos fechados durante a captura

MULTIPLE_FACES

Vários rostos detectados

✅️

✅️

BACKGROUND_ISSUE

Fundo inadequado

DEVICE_ISSUE

Dispositivo incompatível

EYEWEAR

Óculos detectados

FACE_NOT_FOUND

Falha na detecção do rosto

FRAMES_BLURRY

Quadros borrados detectados

MOTION_ISSUE

Erro de movimento do dispositivo

LIGHTING_ISSUES

Condições de iluminação ruim

REJECTED

Transação rejeitada

SYSTEM_ERROR

Erro interno do sistema

TIMEOUT

Tempo da sessão esgotado

USER_NOT_FOUND

Falha na busca do usuário

DEVICE_RESTART

Erro de estado do dispositivo

PROCESSING_FAULT

Erro de processamento

Legenda: ✅ = compatível, ❌ = não compatível


Tipos de Erro (CafErrorType)

Caso do Enum
Condição de disparo

GENERIC_ERROR

Ocorre um erro genérico

UNKNOWN

Erro não classificado

SEQUENCE_INVALID

Quando a lista de sequência na execução do CafSDK está vazia

CAMERA_PERMISSION

Acesso à câmera negado

NETWORK_EXCEPTION

Problemas de conectividade de rede

SERVER_EXCEPTION

Falha no processamento do backend

TOKEN_EXCEPTION

Token inválido/expirado

LIVENESS_EXCEPTION

Quando ocorre um problema de liveness

UNSUPPORTED_DEVICE

Especificações do dispositivo não suportadas

FINGERPRINT_EXCEPTION

Quando a impressão digital de um dispositivo apresenta um problema

CANCELLATION

Quando o usuário cancelar a execução

LIBRARY_EXCEPTION

Erro de baixo nível do framework

STORAGE_EXCEPTION

Não há espaço no armazenamento interno do dispositivo do usuário

PERMISSION_EXCEPTION

Permissões do sistema ausentes

PROXY_EXCEPTION

Quando ocorre um problema ao usar o proxy configurado

SECURITY_EXCEPTION

Quando o SDK não pode ser iniciado por um motivo de segurança

AVAILABILITY_EXCEPTION

O SDK ainda não está disponível para uso.

INVALID_EXCEPTION

Quando o token é inválido

FACE_AUTHENTICATION

Quando ocorre um problema de autenticação facial

Retornos de segurança

Estamos constantemente tomando ações para tornar o produto mais seguro, mitigando muitos ataques observados nos processos de captura e reduzindo o máximo possível as tentativas de fraude de identidade. Os erros descritos aqui são retornados no message campo da SecurityReason classe.

Desativando as verificações de segurança

  • Erros 300–400: Você pode desativar essas verificações individualmente por meio dos métodos por verificação do SDK Builder (por exemplo, .setUseDeveloperMode(bool use) para 300, .setUseAdb(bool use) para 400). Nenhuma alteração no módulo de segurança global é necessária.

  • Erros 500–699: Essas verificações são aplicadas dentro do módulo de segurança. Para desativá-las, você deve definir enableSecurityModule = false em CafSdkConfiguration. Quando existir um método por verificação no builder, use-o também: .setUseDebug(bool use) para 500, .checkAppSignature(use: Boolean) para 600. Para 601, 602 e 699 não há método por verificação; desativar o módulo de segurança via enableSecurityModule = false é necessário.

Error 300

Representa o bloqueio de dispositivos com o modo desenvolvedor ativo.

O modo desenvolvedor permite que os usuários acessem configurações avançadas, como depurar apps via USB. Por padrão, os SDKs bloqueiam dispositivos em modo desenvolvedor.

Para desativar essa validação, use o .setUseDeveloperMode(bool use) método no SDK Builder.

Error 400

Representa o bloqueio de dispositivos com Android Debug Bridge (ADB) ativado.

O ADB permite que os usuários instalem e depurem apps e acessem um shell Unix. Por padrão, os SDKs bloqueiam dispositivos com ADB ativado.

Para desativar essa validação, use o .setUseAdb(bool use) método no SDK Builder.

Error 500

Representa o bloqueio de dispositivos com o modo de depuração ativado.

O modo de depuração permite que os usuários depurem aplicativos via USB, permitindo contornar os fluxos do SDK. Por padrão, os SDKs bloqueiam dispositivos em modo de depuração.

Para desativar essa validação, use o .setUseDebug(bool use) método no SDK Builder e defina enableSecurityModule = false em CafSdkConfiguration.

Erro 600

Representa o bloqueio de dispositivos com assinaturas de app fraudulentas ou ferramentas de adulteração detectadas.

A verificação de assinatura bloqueia ataques de engenharia reversa e todos os outros ataques maliciosos que podem ser feitos após esse processo, no qual a assinatura original do app é alterada. Por isso, os SDKs realizam esse bloqueio por padrão.

Se você quiser desativar essa validação, use o .checkAppSignature(use: Boolean) método no SDK Builder e defina enableSecurityModule = false em CafSdkConfiguration.

Erro 601

Representa o bloqueio de dispositivos com root ou com frameworks de gerenciamento de root.

O acesso root contorna a sandbox de segurança do Android e permite controle total do dispositivo e do ambiente do aplicativo.

Para desativar essa validação, defina enableSecurityModule = false em CafSdkConfiguration.

Erro 602

Representa um erro de validação de segurança.

Retornado quando o processo de validação de segurança falha inesperadamente ou um detector de segurança falha ao ser executado.

Para evitar esse erro no desenvolvimento ou se os detectores estiverem falhando, desative o módulo de segurança em CafSdkConfiguration com enableSecurityModule = false.

Erro 699

Representa um erro de segurança desconhecido ou não catalogado.

Este código é usado quando o módulo de segurança detecta uma condição que não corresponde a nenhuma das categorias definidas (500, 600, 601, 602).

Para evitar esse erro no desenvolvimento, você pode desativar o módulo de segurança em CafSdkConfiguration com enableSecurityModule = false.

Pré-carregamento da sessão (opcional)

O loadSession() método permite pré-carregar a sessão do usuário antes de iniciar o fluxo do SDK. Isso melhora o tempo de abertura do SDK de Face Liveness ao preparar a sessão e a inicialização da câmera com antecedência, resultando em uma inicialização mais rápida do SDK quando start() é chamado.

Quando usar:

  • Quando você deseja otimizar a experiência do usuário reduzindo o tempo de carregamento inicial

  • Quando você tem a oportunidade de pré-carregar a sessão antes que o usuário realmente precise iniciar o fluxo

  • Particularmente útil para a inicialização do módulo Face Liveness

Exemplo de código:

Observações importantes:

  • Este método é opcional e pode ser chamado após build() mas antes de start()

  • O parâmetro context deve ser um contexto de aplicação válido

  • Pré-carregar a sessão ajuda a reduzir o tempo de carregamento inicial quando start() for finalmente chamado

  • Isso é particularmente benéfico para a inicialização do módulo Face Liveness

Início do fluxo configurado

Depois de construir o sdkBuilder objeto com todas as configurações e o callback definidos, o fluxo de captura é iniciado chamando o start() método. Esse método recebe o contexto (o contexto da aplicação é recomendado) e inicia a execução sequencial dos módulos configurados.

Código para iniciar o fluxo:

Detalhes do processo

  • Contexto: o parâmetro passado para start() deve ser um contexto válido (por exemplo, o atual aplicativo instância), permitindo que o SDK exiba as telas de captura e gerencie as transições da interface.

  • Execução sequencial: o SDK inicia os módulos na ordem definida em presentationOrder. Cada módulo é executado sequencialmente e, ao ser concluído, aciona o próximo, garantindo que o fluxo siga a lógica estabelecida.

  • Integração do callback: durante a execução, o SDK usa o callback unificado para enviar os eventos correspondentes (loading, loaded, success etc.), permitindo que a aplicação reaja em tempo real de acordo com o estado do fluxo.

Concluir uma sessão

A conclusão de uma sessão no CafSDK ocorre quando todos os módulos configurados foram executados ou quando ocorre um erro/cancelamento no fluxo.

Definição de sessão concluída

  • Execução completa: a sessão é considerada concluída quando cada módulo no fluxo de captura aciona um Sucesso evento, indicando que todas as operações foram realizadas com sucesso.

  • Interrupção do fluxo: se ocorrer um erro ou se o usuário cancelar o processo em qualquer momento, a sessão é interrompida, e o Error ou Cancelado evento é acionado, permitindo que a aplicação tome as medidas necessárias.

Eventos de conclusão

  • Sucesso:

    • Retorna os resultados após a conclusão de todos os módulos quando waitForAllServices está ativado; caso contrário, cada módulo que termina com sucesso envia um CafUnifiedEvent.Success evento, que inclui:

      • moduleName: identifica o módulo que concluiu a operação (por exemplo, "documentDetector" ou "faceLiveness").

      • signedResponse: um token JWT contendo os dados de resultado obtidos pela execução do módulo. Esses dados podem incluir informações relevantes para o processo, como imagens capturadas ou resultados de validação.

  • Falha:

    • Se um módulo falhar ao concluir sua operação, ele aciona um CafUnifiedEvent.Failure evento, que inclui:

      • response: um token JWT contendo os dados de resultado obtidos pela execução do módulo. Esses dados podem incluir informações relevantes para o processo, como imagens capturadas ou resultados de validação.

      • type: o tipo de falha.

      • description: uma mensagem descritiva explicando a falha, permitindo o tratamento adequado do erro ou notificações ao usuário.

  • Erro:

    • Se o fluxo for interrompido devido a uma falha ou cancelamento:

      • Erro: a CafUnifiedEvent.Error evento é acionado com uma mensagem descritiva do problema, permitindo a implementação de lógica de recuperação ou notificações ao usuário.

        • response: um token JWT contendo os dados de resultado obtidos pela execução do módulo. Esses dados podem incluir informações relevantes para o processo, como imagens capturadas ou resultados de validação.

        • type: o tipo de erro.

        • description: uma mensagem descritiva explicando a falha, permitindo o tratamento adequado do erro ou notificações ao usuário.

  • Cancelado:

    • Se o processo for cancelado (por exemplo, pelo usuário), o CafUnifiedEvent.Cancelled evento é acionado, permitindo a limpeza de recursos ou a exibição de mensagens informativas.

Essas etapas garantem que você tenha uma visão completa e técnica do processo de inicialização e conclusão do fluxo do CafSDK, permitindo uma integração simplificada e a implementação de estratégias adequadas para lidar com cada etapa do fluxo de captura.

Essas etapas garantem que você tenha uma visão completa e técnica do processo de inicialização e conclusão do fluxo do CafSDK, permitindo uma integração simplificada e a implementação de estratégias adequadas para lidar com cada etapa do fluxo de captura.


Personalização avançada do fluxo

Saiba como personalizar e ajustar o fluxo de captura do CafSDK para atender a requisitos específicos de negócios e experiência do usuário.

Ordem de execução

  • A ordem em que os módulos serão executados é definida no presentationOrder campo da CafSdkConfiguration objeto.

  • Essa sequência é fundamental, pois impacta diretamente a lógica do fluxo. Por exemplo, se o processo exigir que o documento seja capturado antes da verificação facial, a ordem deve refletir essa prioridade.

Configuração específica

Para personalizar os módulos individualmente, use o setDocumentDetectorConfig e setFaceLivenessConfig métodos. Eles permitem ajustar parâmetros críticos, como:

  • Tempo de captura: define o tempo limite para o usuário realizar a captura manual.

  • Tempo limite: estabelece o limite máximo de espera por uma resposta do serviço.

  • Flags de depuração: ativam ou desativam modos de depuração para facilitar a identificação de problemas durante o desenvolvimento.

  • Layout e outros parâmetros: permitem configurar elementos visuais e operacionais específicos de cada módulo.

Personalização visual

Com o CafColorConfiguration objeto, é possível alinhar a identidade visual do fluxo de captura com a marca do seu aplicativo. Essa personalização garante que os elementos visuais (botões, fundos e indicadores) mantenham consistência com o design do aplicativo.

Registro e monitoramento

O callback unificado implementa diferentes níveis de log (DEBUG, USAGE, INFO), o que permite uma visão detalhada de cada etapa do fluxo. Esses logs são essenciais para integração com ferramentas de monitoramento, ajuste de desempenho ou identificação de problemas em tempo real.

Exemplo de implementação


Configuração de Face Liveness

A integração do Caf Face Liveness (FL) módulo é feita por meio de sua configuração no CafSdkConfiguration objeto. Uma vez definido, o fluxo executa automaticamente o módulo na posição correspondente definida na ordem de apresentação.

A configuração de Face Liveness é feita por meio do CafFaceLivenessConfig objeto, no qual são informados os parâmetros que o SDK usará durante sua execução. Confira os principais métodos de configuração disponíveis:

Método
Tipo
Descrição

setLoading

Boolean

Ativa ou desativa a tela de carregamento. O padrão é: false.

setAuthBaseUrl

String

Define uma URL do proxy Define uma URL do proxy reverso para autenticação. Deve usar o protocolo HTTPS. Opcional. Obrigatório apenas para proxy reverso.

setLivenessBaseUrl

String

Define uma URL de proxy reverso para verificação de Face Liveness. Deve usar o protocolo WSS. Opcional. Obrigatório apenas para proxy reverso.

setCertificates

List

Define os certificados codificados em Base64 (SHA-256) para o proxy reverso. Opcional. Obrigatório apenas para WSS via proxy.

setScreenCaptureEnabled

Boolean

Ativa ou desativa a captura de tela. O padrão é: false.

setDebugModeEnabled

Boolean

Ativa ou desativa a geração de logs para ajudar na depuração durante a integração. O padrão éfalse.

setSdkType

CafFaceLivenessPlatform

Informa qual plataforma está executando o SDK. O padrão é CafFaceLivenessPlatform.NATIVE_ANDROID.

setExecuteFaceAuth

Boolean

Define se a autenticação facial será executada.

Exemplo de configuração para Face Liveness:

Resultados

Após a execução bem-sucedida, um CafUnifiedEvent.Success evento é acionado, que contém:

  • moduleName: o nome identificador do módulo (por exemplo, "faceLiveness").

  • signedResponse: um token JWT com os dados de verificação.

Em seguida, esses dados são processados pelo callback unificado, permitindo atualizar a interface do usuário ou continuar o fluxo conforme necessário.


Configurações personalizadas - Face Liveness

Use configurações personalizadas para direcionar as solicitações por meio de proxies seguros e garantir que os protocolos corretos (WSS para Face Liveness e HTTPS para autenticação) sejam usados.

Configuração de proxy reverso (opcional)

Essa configuração avançada permite direcionar conexões do módulo Face Liveness por meio de um proxy reverso, usando o protocolo WSS (Web Socket Secure). Siga os passos para configurar corretamente:

  • URL do proxy: defina seu proxy para se comunicar com o endpoint desejado. Por exemplo, você pode usar: wss://us.rp.secure.iproov.me/ws ou outra URL compatível.

  • Configuração da URL de Face Liveness: use o .setLivenessBaseUrl método para configurar a URL de Face Liveness. Lembre-se de que o protocolo deve ser WSS.

  • Definição de certificado: use o .setCertificates método para definir os certificados necessários. Esses certificados devem ser os hashes SHA-256 dos certificados do proxy codificados em Base64.

Exemplo de código:

Proxy reverso para autenticação (opcional)

Para a comunicação de autenticação, é necessário configurar o proxy reverso com uma URL HTTPS. Essa configuração direciona as solicitações de autenticação para o ambiente apropriado.

  • URL do proxy: defina seu proxy para se comunicar. Por exemplo, você pode usar: https://api.public.caf.io/.

  • Configuração da URL de autenticação: use o .setAuthBaseUrl método para especificar a URL de autenticação, garantindo que o protocolo HTTPS seja usado.

Exemplo de código:

Observação: na prática, ambas as configurações (para autenticação e Face Liveness) podem ser combinadas em uma única instância de CafFaceLivenessConfig.

Estruturas de configuração

Ao usar o módulo de UI (com o -ui sufixo), você estará usando as telas proprietárias do Caf, que oferecem algumas possibilidades de personalização. Confira os detalhes:

Tela de instruções do Caf Face Liveness

Essa estrutura permite personalizar a tela de instruções do Face Liveness.

Propriedade
Tipo
Descrição
Valor padrão

imagem

String?

Imagem exibida no cabeçalho da tela. O valor pode ser uma URL, o ID do recurso (em formato de string) ou o nome do recurso presente na pasta drawable.

null

título

String?

Título da tela (por exemplo, "Instruções para escanear o rosto").

null

descrição

String?

Texto descritivo breve (por exemplo, "Siga as etapas abaixo").

null

steps

List<String>?

Lista ordenada de instruções (por exemplo, listOf("Mantenha o telefone parado"; "Boa iluminação")).

null

buttonText

String?

Texto do botão de confirmação (por exemplo, "Iniciar escaneamento").

null

Configuração de cores do Caf

Essa estrutura permite personalizar as cores globais de todas as interfaces. As cores seguem o padrão RGB ou ARGB.

Propriedade
Tipo
Descrição
Formato

primaryColor

String

Cor principal para botões e destaques.

Código hexadecimal (por exemplo, #FF0000)

secondaryColor

String

Cor secundária para elementos complementares.

Código hexadecimal

cor de fundo

String

Cor de fundo da tela.

Código hexadecimal

contentColor

String

Cor usada para textos e ícones.

Código hexadecimal

mediumColor

String

Cor neutra para elementos como barras de progresso.

Código hexadecimal

Exemplos de código

Confira o exemplo de como configurar o módulo Face Liveness com instruções, proxy reverso (para autenticação e verificação) e personalização da interface.


Mais informações

Requisitos dos certificados

  • Certificados: eles devem ser os hashes SHA-256 do SPKI (Subject Public Key Info) do certificado codificados em Base64.

Aplicação do protocolo

  • Face Liveness: A URL para Face Liveness deve use o wss:// ao usar um proxy reverso.

  • Autenticação: A URL para autenticação deve use o https:// ao usar um proxy reverso.


Configuração do Document Detector

O módulo Caf Document Detector (DD) é configurado de forma semelhante ao Face Liveness, mas com foco na captura e no processamento de documentos.

Configuração e execução

Em CafSdkConfiguration, configure os parâmetros específicos do Document Detector, que determinam o comportamento de captura de documentos.

Parâmetros principais:

  • o fluxo: uma lista de etapas (DocumentDetectorStep) que define qual documento e quais ângulos ou partes devem ser capturados.

  • useAdb, useDebuge useDeveloperMode: flags que auxiliam no desenvolvimento e na execução em ambientes de teste.

  • manualCaptureEnabled e manualCaptureTime: configuram se a captura manual é permitida e qual é o tempo limite da ação.

  • requestTimeout: tempo máximo de espera por respostas do servidor ou ações do usuário.

  • showPopup: determina se uma mensagem de confirmação ou instrução será apresentada ao usuário.

  • maxRetryAttempts: define o número máximo de tentativas permitidas antes de interromper o processo ou exibir uma mensagem de erro ao usuário

Exemplo de configuração do Document Detector:

Resultados

  • Ao concluir a captura e o processamento do documento, o módulo Document Detector aciona um CafUnifiedEvent.Success evento.

  • Esse evento inclui o moduleName (por exemplo,"documentDetector") e um resultado contendo os dados capturados.

  • O callback unificado pode então usar essas informações para prosseguir para a próxima etapa ou armazenar os resultados conforme necessário.


Configurações personalizadas - Document Detector

Para configurar o Caf Document Detector, use a CafDocumentDetectorConfig estrutura, que inclui:

  • Etapas do fluxo de captura de documentos.

  • Personalização do layout da interface do usuário (UI).

  • Mensagens de feedback.

  • Comportamento de upload.

  • Configurações de proxy.

Configuração principal

Propriedades de CafDocumentDetectorConfig.

Propriedade
Tipo
Descrição

o fluxo

List<DocumentDetectorStep>

Define o fluxo de captura do documento. Veja DocumentDetectorStep

layoutId

Int?

ID de layout personalizado.

as configurações de upload

UploadSettings?

Configurações para upload de documentos. Veja UploadSettings

manualCaptureEnabled

Boolean?

Ativa ou desativa a captura manual.

manualCaptureTime

Int?

Tempo limite para captura manual (em segundos).

requestTimeout

Int?

Tempo limite para solicitações (em segundos).

showPopup

Boolean?

Ativa ou desativa pop-ups antes da captura.

proxySettings

ProxySettings?

Configurações de proxy. Veja ProxySettings

previewShow

Boolean?

Ativa ou desativa a pré-visualização da imagem capturada.

instructionsEnabled

Bool

Ativa a tela de pré-visualização de instruções.

ddCustomizations

List<CafDDCustomization>?

Lista de personalizações de strings de UI e ativos para as telas do Document Detector (por exemplo, pop-up de upload, tela de pré-visualização).

getUrlExpireTime

String?

Define por quanto tempo a URL da imagem permanecerá ativa no servidor até expirar. Aceita intervalos como 30m (minutos), 24h (horas) ou 10d (dias).

allowedPassportCountryList

List<CountryCodesList>?

Lista de países permitidos para passaportes. Veja CountryCodesList

useDebug

Boolean?

Permite que o app seja executado em modo de depuração quando true. Não recomendado para produção

useDeveloperMode

Boolean?

Ativa o modo de desenvolvedor quando true. Não recomendado para produção

useAdb

Boolean?

Ativa o modo de depuração do Android Debug Bridge (ADB) quando true. Não recomendado para produção

DocumentDetectorStep

Para criar um fluxo de captura, você deve criar um array de DocumentDetectorStep, em que cada elemento representa uma etapa de captura. Para construir cada DocumentDetectorStep objeto, você pode usar o seguinte:

Construtor

Propriedade
Tipo
Descrição
Obrigatório
Padrão

document

Documento

Tipo de documento a ser capturado (por exemplo, .rgFront).

Sim

stringStepLabel

String?

Texto exibido na parte inferior da tela para esta etapa.

Não

Rótulo padrão do documento

stringIllustration

String?

Imagem exibida no pop-up de instrução para esta etapa.

Não

Ilustração padrão do documento

stringMessage

String?

Texto de mensagem personalizado para o pop-up de instruções desta etapa.

Não

Mensagem padrão do documento

okButtonTitle

String?

Texto personalizado para o botão "OK" no pop-up de instruções desta etapa.

Não

"OK"

Propriedade
Descrição

document: Document

Especifica o documento a ser capturado na etapa. Veja os tipos suportados abaixo.

setStepLabel(stepLabel: Int)

Define o texto exibido na parte inferior do layout.

setIllustration(illustration: Int)

Define a ilustração exibida no pop-up antes da captura.

showStepLabel(showStepLabel: Boolean)

Alterna a visibilidade do texto na parte superior do layout.

Documentos suportados

Documento
Descrição

RG_FRENTE

Lado frontal do documento RG, onde a foto está localizada.

RG_VERSO

Lado de trás do documento RG.

RG_COMPLETO

Documento RG aberto, exibindo juntos os lados frontal e traseiro.

CNH_FRENTE

Lado frontal do documento CNH, onde a foto está localizada.

CNH_VERSO

Lado de trás do documento CNH.

CNH_COMPLETO

Documento CNH aberto, exibindo juntos os lados frontal e traseiro.

CRLV

Documento CRLV.

RNE_FRENTE

Lado frontal do documento RNE ou RNM.

RNE_VERSO

Lado de trás do documento RNE ou RNM.

PASSAPORTE

Documento de passaporte, exibindo a foto e os dados pessoais.

CTPS_FRENTE

Lado frontal do documento CTPS, onde a foto está localizada.

CTPS_VERSO

Lado de trás do documento CTPS.

QUALQUER

Permite o envio de qualquer tipo de documento, incluindo todos os listados acima ou qualquer outro documento não classificado.

Exemplo:

UploadSettings

Configura as definições relacionadas ao upload de documentos.

Propriedade
Descrição

.setEnable(enable: Boolean)

Ativa ou desativa este recurso.

.setCompress(enable: Boolean)

Ativa ou desativa a compressão do arquivo antes do upload.

.setFileFormats(fileFormats: Array<FileFormat>)

Especifica os formatos de arquivo aceitos para upload.

.setMaxFileSize(maxFileSize: Int)

Define o limite máximo de tamanho do arquivo em KB.

.setActivityLayout(activityLayout: Int)

Define o layout de fundo para upload de documentos.

.setPopUpLayout(popUpLayout: Int)

Define o layout do pop-up para a solicitação de upload do documento.

Atualmente, os formatos de arquivo suportados são:

Tipo
Valor

PNG

image/png

JPG

image/jpg

JPEG

image/jpeg

PDF

application/pdf

HEIF

image/heif

ProxySettings

Para que o SDK use um proxy ao fazer solicitações, você deve configurar uma instância do ProxySettings classe.

Método Construtor

Propriedade
Tipo
Descrição

hostname

String

Define o domínio ou endereço IP do serviço de proxy.

port

String

Define a porta a ser usada.

Métodos opcionais

setAuthentication(String user, String password)

Define os parâmetros de autenticação do proxy, se necessário.

Propriedade
Descrição

user

Nome de usuário a ser usado para autenticação.

password

Senha a ser usada para autenticação.

setProxyCertificate(@RawRes Integer proxyCertificate)

Se o servidor proxy usar um certificado SSL autoassinado ou um emitido por uma Autoridade Certificadora (CA) não pública, adicione o certificado da CA em PEM ou DER formato para o res/raw/ diretório (por exemplo, res/raw/proxy_certificate) e passar o identificador do arquivo como argumento (por exemplo, R.raw.proxy_certificate).

Propriedade
Descrição

proxyCertificate

ID do arquivo do certificado do proxy.

setMTLSConfig(@RawRes Integer clientCertificate, String password)

Se o seu servidor proxy oferecer suporte a mTLS, salve o certificado do cliente em PKCS12 formato (.p12) para o res/raw/ diretório (por exemplo, res/raw/client_certificate) e passe o identificador do arquivo (por exemplo, R.raw.client_certificate) e a chave privada como argumentos.

Propriedade
Descrição

clientCertificate

ID do arquivo de certificado do cliente.

password

Chave privada a ser usada.

Personalização de strings e ativos da UI (CafDDCustomization)

O ddCustomizations propriedade em CafDocumentDetectorConfig permite que você forneça um array de objetos em conformidade com CafDDCustomization para substituir textos e imagens padrão em telas específicas do Document Detector.

CafPreviewCustomization

Personaliza a tela de pré-visualização do documento exibida após a captura de uma imagem do documento (se previewShow is true).

Propriedade
Tipo
Descrição
Padrão (localizado)

título

String?

Texto do título na tela de pré-visualização.

"A foto está boa?"

message

String?

Texto do subtítulo/mensagem na tela de pré-visualização.

"Verifique se todas as informações estão legíveis..."

okButton

String?

Texto para o botão de confirmação ("aceitar").

"Sim, está boa!"

tryAgainButton

String?

Texto para o botão de tentar novamente ("tirar de novo").

"Tirar novamente"

Exemplo:

CafDDUploadCustomization

Personaliza o pop-up exibido quando o usuário escolhe enviar um arquivo de documento.

Propriedade
Tipo
Descrição
Padrão (localizado)

imagem

String?

Imagem exibida no topo do popup.

Ilustração padrão do SDK

message

String?

Texto da mensagem dentro do popup de envio.

"Selecione o arquivo..."

uploadButton

String?

Texto para o botão "Enviar".

"Enviar"

cancelButton

String?

Texto para o botão "Cancelar".

"Cancelar"

Exemplo:

CafMessageCustomization

Personaliza várias mensagens exibidas durante o processo de captura de documentos (por exemplo, mensagens do sensor, feedback da IA).

Propriedade
Descrição

waitMessage

Mensagem exibida ao iniciar a câmera.

fitTheDocumentMessage

Mensagem que solicita ao usuário que ajuste o documento dentro do enquadramento.

holdItMessage

Mensagem exibida durante o processo de captura.

verifyingQualityMessage

Mensagem exibida durante a solicitação de verificação de qualidade.

lowQualityDocumentMessage

Mensagem exibida quando a captura do documento falha devido à baixa qualidade.

uploadingImageMessage

Mensagem exibida ao salvar a imagem capturada no servidor.

openDocumentWrongMessage

Mensagem exibida se um documento aberto for detectado.

unsupportedDocumentMessage

Mensagem para documentos não suportados.

documentNotFoundMessage

Mensagem exibida quando nenhum documento é detectado.

sensorLuminosityMessage

Mensagem exibida quando o nível de brilho está muito baixo.

sensorOrientationMessage

Mensagem exibida quando o limite de orientação não é atendido.

sensorStabilityMessage

Mensagem exibida quando o dispositivo não está estável o suficiente.

popupDocumentSubtitleMessage

Mensagem de subtítulo exibida no popup que apresenta a ilustração do documento.

positiveButtonMessage

Mensagem exibida no botão de confirmação.

aiScanDocumentMessage

Mensagem que solicita ao usuário que digitalize um documento.

aiGetCloserMessage

Mensagem que solicita ao usuário que se aproxime do documento.

aiCentralizeMessage

Mensagem que solicita ao usuário que centralize o documento na tela.

aiMoveAwayMessage

Mensagem que solicita ao usuário que se afaste do documento.

aiAlignMessage

Mensagem que solicita ao usuário que alinhe o documento.

aiTurnDocumentMessage

Mensagem que solicita ao usuário que gire o documento em 90 graus.

aiCapturedMessage

Mensagem que confirma que o documento foi capturado.

wrongDocumentMessage

Mensagem exibida quando o tipo de documento está incorreto.

Exemplo:

CountryCodesList

Lista completa dos códigos oficiais atualmente atribuídos de acordo com ISO 3166-1 alpha-3.

Personalização de telas

Ao usar o módulo de UI (com o -ui sufixo), você estará usando as telas proprietárias da CAF. Essas telas oferecem opções de personalização conforme descrito abaixo.

CafDocumentDetectorInstructionsScreen

Esta estrutura permite personalizar a tela de instruções.

Propriedade
Tipo
Descrição

imagem

String?

Imagem exibida no cabeçalho da tela. O valor pode ser uma URL, um ID de recurso (como string) ou o nome do recurso na pasta drawable.

título

String?

Título da tela (por exemplo, "Instruções para digitalizar o rosto").

descrição

String?

Texto descritivo breve (por exemplo, "Siga as etapas abaixo").

steps

List<String>?

Lista ordenada de instruções (por exemplo, listOf("Mantenha o telefone estável", "Garanta boa iluminação")).

buttonText

String?

Texto do botão de confirmação (por exemplo, "Iniciar digitalização").

CafDocumentDetectorDocumentSelectionScreen

Esta estrutura permite personalizar a tela de seleção de documentos.

Propriedade
Tipo
Descrição

documentos

List<CafDocument>

Lista de documentos a serem exibidos. O valor pode ser uma URL, um ID de recurso (como string) ou o nome do recurso na pasta drawable.

título

String?

Título da tela (por exemplo, "Selecionar o documento").

descrição

String?

Texto descritivo breve (por exemplo, "Escolha o documento que você deseja enviar").

groupLabels

CafDocumentGroupLabels?

Configura os itens da tela de seleção de documentos (título/descrição) com base nos grupos de documentos.

CafDocument

Nome
Descrição

RGFront

Lado frontal do documento RG, onde fica a foto.

RGBack

Verso do documento RG.

RGFull

Documento RG aberto, exibindo as faces frontal e traseira juntas.

CnhFront

Lado frontal do documento CNH, onde fica a foto.

CnhBack

Verso do documento CNH.

CnhFull

Documento CNH aberto, exibindo as faces frontal e traseira juntas.

Crlv

Documento CRLV.

RneFront

Lado frontal do documento RNE ou RNM.

RneBack

Verso do documento RNE ou RNM.

Passaporte

Documento de passaporte, exibindo a foto e os dados pessoais.

CtpsFront

Lado frontal do documento CTPS, onde fica a foto.

CtpsBack

Verso do documento CTPS.

Outro

Permite o envio de qualquer outro tipo de documento que não seja classificado.

CafColorConfiguration

Esta estrutura permite personalizar as cores globais de todas as interfaces. As cores seguem o RGB ou ARGB padrão.

Propriedade
Tipo
Descrição
Formato

primaryColor

String

Cor primária para botões e destaques.

Código hexadecimal (por exemplo, #FF0000)

secondaryColor

String

Cor secundária para elementos complementares.

Código hexadecimal

cor de fundo

String

Cor de fundo da tela.

Código hexadecimal

contentColor

String

Cor usada para texto e ícones.

Código hexadecimal

mediumColor

String

Cor neutra para elementos como barras de progresso.

Código hexadecimal

dialogBackgroundColor

String

Cor de fundo de diálogos e pop-ups.

Código hexadecimal

dialogBorderColor

String

Cor da borda de diálogos e pop-ups.

Código hexadecimal

Exemplos de código

O exemplo a seguir demonstra como configurar o módulo DocumentDetector com instruções e personalização da interface:

CafUnifiedResponse

Propriedade
Tipo
Descrição

moduleName

String

Nome do módulo que emite o resultado no evento de sucesso.

signedResponse

String

JWT contendo os dados obtidos pela execução do módulo.


Recursos adicionais

Regras do ProGuard/R8

Confira o bloco de código com as regras de ProGuard/R8 necessárias para que o CafSDK e suas dependências funcionem corretamente mesmo após a ofuscação e otimização do código. Essas regras preservam informações essenciais (como assinaturas, anotações e classes internas) e evitam que classes críticas sejam removidas ou alteradas.


Suporte Técnico e Dicas de Uso

Suporte Técnico Se você tiver alguma dúvida ou dificuldade com a integração, entre em contato com o suporte técnico da Caf.

Dicas de uso

  • Execute testes: realize testes em dispositivos reais para validar os requisitos e o desempenho do fluxo.

  • Explore personalizações: use opções avançadas de personalização para adaptar o fluxo às necessidades do seu projeto.

  • Monitore o desempenho: integre ferramentas de monitoramento para acompanhar logs e o desempenho do fluxo em produção.


Atualizado