Introdução legada ao SDK
A versão 7.0.0 traz uma forma opcional e mais rápida de inicializar o SDK com menos linhas de código. Além dessa atualização de código, lançamos uma página de documentação totalmente nova e mais fácil de ler. Para adotar essa nova configuração, confira o guia atualizado.
Sobre o CafSDK
Esta documentação técnica cobre a implementação do CafSDK para iOS, detalhando a configuração, inicialização, execução dos fluxos de captura e personalizações avançadas.
Atualmente, o CafSDK integra dois módulos principais: Face Liveness (FL) e Document Detector (DD), executados sequencialmente com uma interface de configuração unificada.
O que é Face Liveness
É o módulo que valida a autenticidade de um rosto capturado por um aplicativo de fotos, garantindo que a imagem corresponda a uma pessoa real.
Características técnicas:
Configuração de URL para autenticação (
authBaseUrl) e verificação de liveness (livenessBaseUrl).Flags para habilitar captura de tela e modo de depuração.
Suporte a múltiplos provedores de autenticação.
O que é Document Detector
É o módulo que permite a captura e o processamento de documentos (por exemplo, carteira de identidade, cartão de CPF, passaporte etc.).
Características técnicas:
Configuração de um fluxo passo a passo definido por
CafDocumentDetectorSteppara 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 envio de arquivo de documento.
Comece a usar o SDK
Adicione a dependência
O CafSDK oferece integração por meio de Swift Package Manager (SPM) e CocoaPods, oferecendo flexibilidade para escolher o gerenciador de dependências que melhor se adapta ao seu projeto. Este guia explica as etapas necessárias para adicionar o CafSDK ao seu projeto iOS e traz detalhes sobre os módulos disponíveis.
Requisitos para adicionar
Para usar os módulos do CafSDK no iOS, certifique-se de que seu projeto atenda aos requisitos mínimos:
Destino de implantação do iOS
15.0+
Xcode
26.0+
Swift
6.3+
Observação: configure o Info.plist do seu projeto com as permissões necessárias para acesso à câmera e à rede.
Token mobile da CAF: válido mobileToken da CAF
Etapas para adicionar
Via Swift Package Manager (SPM)
Etapa 1 - Adicione a dependência
Abra o arquivo Package.swift do seu projeto e adicione a seguinte dependência. Isso informa ao Swift Package Manager onde localizar o repositório do CafSDK:
Etapa 2 - Inclua os produtos desejados
Depois de adicionar a dependência, inclua os produtos necessários no target da sua aplicação. Isso permite integrar o SDK completo ou selecionar apenas módulos específicos, de acordo com suas necessidades:
Informações adicionais
Modularidade: integre apenas os módulos necessários para manter seu projeto leve.
Compatibilidade: o SDK é compatível com iOS 15.0+ e foi desenvolvido com Swift 5.10+.
Gerenciamento de versão: Verifique sempre o repositório oficial para obter a versão mais recente.
Via CocoaPods
Etapa 1 - Atualize seu Podfile
Para integrar o CafSDK usando CocoaPods, abra o Podfile do seu projeto e adicione as seguintes linhas. Isso instruirá o CocoaPods a baixar os artefatos necessários do repositório oficial:
Etapa 2 - Instale as dependências
Depois de atualizar seu Podfile, abra um terminal no diretório raiz do seu projeto e execute:
Este comando baixa e integra todos os módulos específicos ao seu projeto.
Informações adicionais
Integração seletiva: escolha apenas os módulos necessários para seu projeto, otimizando o desempenho.
Gerenciamento automático de dependências: O CocoaPods gerencia automaticamente a resolução de versões e conflitos de dependência.
Documentação e suporte: para instruções mais detalhadas ou solução de problemas, consulte a documentação do CafSDK.
Como inicializar o SDK
Este guia explica como inicializar o CafSDK no iOS. Ele aborda os requisitos, permissões, configuração global, configuração específica de módulos e inicialização do builder.
Permissões
Para que os módulos do SDK funcionem corretamente, você deve declarar as seguintes permissões no seu Info.plist:
Para Face Liveness:
Descrição de uso da câmera (
NSCameraUsageDescription): explica por que o aplicativo precisa de acesso à câmera para detecção facial.Acesso à rede: nenhuma permissão explícita é necessária, mas certifique-se de que seu aplicativo suporte conexões seguras (HTTPS/WSS).
Para Document Detector:
Descrição de uso da câmera (
NSCameraUsageDescription): necessária para capturar imagens de documentos.Descrição de uso da biblioteca de fotos (
NSPhotoLibraryUsageDescription): necessária se seu aplicativo suportar o envio de imagens da biblioteca (opcional).
Configuração de segurança
A partir da versão 6.0.0, o CafSDK inclui recursos de proteção em tempo de execução do aplicativo (RASP). A partir da versão 6.4.2, a aplicação dessas verificações é controlada exclusivamente pela securityEnabled propriedade em CafSDKConfiguration.
Propriedade:
securityEnabledTipo:
BoolPadrão:
false
Quando definido como true, o SDK executará uma validação de segurança rigorosa durante a inicialização e a execução. Se uma violação de segurança for detectada, o SDK lançará uma securityException e encerrará o fluxo.
Exemplo de código:
Observação: Recomendamos fortemente habilitar essa flag em builds de produção para garantir a integridade do processo de captura.
Migração de
CAFEnforceSecurity: ACAFEnforceSecurityInfo.plistflag foi removida na versão 6.4.2 e não é mais lida pelo SDK. DefinasecurityEnabledativadoCafSDKConfigurationem vez disso.
Configurações
O processo de inicialização é dividido em duas partes: configuração global e configuração específica de módulos.
Configuração global
Crie um CafSDKConfiguration objeto, que serve como o contêiner central para todas as configurações. Essa configuração define a ordem de execução dos módulos e a identidade visual (por meio de uma configuração de cores).
Exemplo de código:
Configuração específica do módulo
Após as configurações globais, configure cada módulo individualmente para ajustar os parâmetros operacionais, de segurança e visuais.
Configuração do Document Detector
Configure o módulo Document Detector especificando o fluxo de captura e opções como captura manual e confirmações em pop-up.
Exemplo de código:
Consulte: DocumentDetector
Configuração do Face Liveness
Configure o módulo Face Liveness para validar que o rosto capturado pertence a uma pessoa viva. Defina opções para indicadores de carregamento, endpoints e certificados de segurança.
Exemplo de código:
Consulte: FaceLiveness
Inicialização do builder
A inicialização do builder é a etapa em que o fluxo de captura do CafSDK é configurado para execução. Use CafSdkProvider.Builder para fornecer os parâmetros necessários, incluindo um token mobile, ID da pessoa, ambiente e o callback unificado para tratar eventos.
Exemplo de código:
Detalhes do processo
Configuração global: define o fluxo geral e a aparência usando
presentationOrdereCafColorConfiguration.Configuração específica do módulo: personaliza os módulos Document Detector e Face Liveness com configurações individuais (por exemplo, fluxo de captura, indicador de carregamento, endpoints da API).
Inicialização com o Builder: o padrão builder reúne todos os parâmetros necessários (token mobile, ID da pessoa, ambiente, configuração e callback) para criar e iniciar o SDK.
Seguindo estas etapas, seu projeto iOS será configurado corretamente para usar o CafSDK, garantindo uma integração robusta e eficiente dos módulos de detecção de documentos e verificação facial.
Pré-carregamento da sessão (opcional)
A loadSession() o 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 os recursos relacionados com antecedência, resultando em uma inicialização mais rápida quando start() for chamado.
Quando usar:
Quando você quiser otimizar a experiência do usuário reduzindo o tempo inicial de carregamento
Quando você tiver 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:
Notas importantes:
Este método é opcional e deve ser chamado após
build()mas antes destart()Pré-carregar a sessão ajuda a reduzir o tempo inicial de carregamento quando
start()for eventualmente chamadoO callback unificado receberá
.loadinge.loadedeventos durante o pré-carregamento, que podem ser usados para atualizar a interfaceIsso é particularmente benéfico para a inicialização do módulo Face Liveness
Concluindo uma sessão
Uma sessão completa no CafSDK abrange todo o fluxo, da inicialização à conclusão — seja essa conclusão uma validação bem-sucedida, um erro ou um cancelamento pelo usuário.
Tratamento de eventos da sessão
O callback do builder retorna um conjunto de eventos definido pela CafUnifiedEvent enumeração. Esses eventos incluem:
Carregando: Indica uma solicitação de carregamento do SDKCarregado: Indica a conclusão da solicitação de carregamento do SDKSuccess(responses: [CafUnifiedResponse]): Resultados finais (quandowaitForAllServices=true)Failure(response: String?, type: CafFailureType, description: String?): Falhas específicas do móduloError(type: CafErrorType, description: String): Erros críticos de execuçãoCancelled: Cancelamento iniciado pelo usuárioLog(level: CafLogLevel, message: String): Informações de depuração
Detalhamento dos tipos de erro
Tipos de falha (CafFailureType)
desconhecido
"desconhecido"
Falha genérica
✅
❌
tooMuchMovement
"too_much_movement"
Movimento excessivo da cabeça
✅
❌
tooBright
"too_bright"
Superiluminação
✅
❌
tooDark
"too_dark"
Condições de pouca luz
✅
❌
misalignedFace
"misaligned_face"
Falha no alinhamento do rosto
✅
❌
eyesClosed
"eyes_closed"
Olhos fechados durante a captura
✅
✅
faceTooFar
"face_too_far"
Rosto muito distante
✅
❌
faceTooClose
"face_too_close"
Rosto muito próximo
✅
❌
sunglasses
"sunglasses"
Óculos que obscurecem os olhos
✅
❌
obscuredFace
"obscured_face"
Obstrução parcial do rosto
✅
✅
multipleFaces
"multiple_faces"
Múltiplos rostos detectados
✅
✅
óculos
"óculos"
Óculos gerais detectados que precisam ser removidos
⚠️
✅
faceNotFound
"face_not_found"
Nenhum rosto detectado na moldura oval
⚠️
✅
framesBlurry
"frames_blurry"
As imagens estão borradas demais para processamento
⚠️
✅
lightingIssues
"lighting_issues"
Problemas gerais de iluminação ou reflexo
⚠️
✅
motionIssue
"motion_issue"
Problemas de captura relacionados a movimento
⚠️
✅
backgroundIssue
"background_issue"
Fundo problemático (muito movimentado ou com pouco contraste)
⚠️
✅
deviceIssue
"device_issue"
Falha relacionada ao hardware ou à câmera
⚠️
✅
deviceRestart
"device_restart"
Recomendação para reiniciar o dispositivo
⚠️
✅
systemError
"system_error"
Erro interno do sistema
⚠️
✅
rejected
"rejected"
Transação ou verificação rejeitada
⚠️
✅
timeout
"timeout"
A sessão atingiu o tempo limite
⚠️
✅
userNotFound
"user_not_found"
O usuário não pôde ser identificado ou não foi encontrado no sistema
⚠️
✅
processingFault
"processing_fault"
Erro interno de processamento no lado do servidor
⚠️
✅
Tipos de Erro (CafErrorType)
unsupportedDevice
Especificações de dispositivo não suportadas
cameraPermission
Acesso à câmera negado
networkException
Problemas de conectividade de rede
serverException
Falha no processamento do backend
tokenException
Token inválido/expirado
captureAlreadyActiveException
Sessão iProov simultânea
faceAuthentication
Erro de autenticação facial
unexpectedErrorException
Erro crítico irrecuperável
userTimeoutException
Tempo limite de captura excedido
imageNotFoundException
Dados da imagem ausentes
tooManyRequestsException
Limite de taxa da API excedido
unknownException
Erro não classificado
libraryException
Erro de baixo nível do framework
permissionException
Permissões do sistema ausentes
invalidResponseException
Resposta inválida recebida
securityException
Violação de segurança em tempo de execução detectada
Importante
Uma sessão é considerada concluída quando todos os módulos do fluxo de captura terminarem sua operação com sucesso ou quando o processo for interrompido por um erro ou por cancelamento do usuário. Em uma sessão concluída:
Execução completa
Cada módulo que termina com sucesso envia um evento Sucesso , incluindo:
moduleName: identifica o módulo (por exemplo, "documentDetector" ou "faceLiveness") que concluiu a operação.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.
Fluxo interrompido
Se ocorrer um erro ou o usuário cancelar o processo:
Erro: umCafUnifiedEvent.Errorevento é disparado com uma mensagem de erro descritiva, permitindo que você faça a recuperação ou notifique o usuário.Cancelled: umCafUnifiedEvent.Cancelledevento é ativado, o que permite limpar recursos ou exibir uma mensagem de cancelamento.
Exemplo de Tratamento de Eventos
Confira um exemplo de como tratar esses eventos no callback unificado para iOS:
Resumo
Sessão concluída: uma sessão é considerada concluída quando todos os módulos configurados terminam suas tarefas com sucesso, ou quando ocorre um erro/cancelamento.
Gerenciamento centralizado: O callback unificado garante que, independentemente do resultado, seu aplicativo será notificado e poderá tomar a ação adequada.
Essa abordagem garante uma integração robusta com o CafSDK, lidando de forma eficiente com cada estado do fluxo de captura, do início ao fim.
Fluxo avançado
Esta seção explica como personalizar e ajustar o fluxo de captura do CafSDK para atender a requisitos de negócios específicos e melhorar a experiência do usuário no iOS.
Ordem de execução dos módulos
A ordem em que os módulos são executados é definida pelo presentationOrder campo do CafSDKConfiguration objeto. Essa sequência é crucial, pois impacta diretamente a lógica do fluxo. Por exemplo, se o processo exigir que o documento seja capturado antes da validação facial, a ordem deve refletir essa prioridade.
Exemplo de código:
Modo Escuro / Modo Claro
O suporte ao Modo Escuro está habilitado por padrão no SDK para garantir uma experiência consistente do usuário entre os temas do sistema. No entanto, se você quiser aplicar um esquema de cores personalizado, primeiro deve verificar se o dispositivo está usando atualmente o Modo Escuro ou o Modo Claro e configurar o CafColorConfiguration de acordo.
Use o estilo de interface do sistema para determinar o modo atual e, em seguida, ajuste a configuração de cores para corresponder à aparência desejada.
Configuração específica do módulo
Personalize módulos individuais usando os métodos setDocumentDetectorConfig e setFaceLivenessConfig Esses métodos permitem ajustar parâmetros essenciais, como:
Tempo limite de captura: define o tempo máximo para captura manual.
Tempo limite da solicitação: define o tempo máximo de espera por uma resposta do serviço.
Flags de depuração: ativam ou desativam modos de depuração para identificar problemas durante o desenvolvimento.
Layout e outras configurações: ajustam parâmetros visuais e operacionais específicos de cada módulo.
Personalização visual
Com o CafColorConfiguration objeto, você pode alinhar a identidade visual do fluxo de captura com o design do seu aplicativo. Isso garante que os elementos visuais (botões, fundos e indicadores) estejam consistentes com a identidade da sua marca.
Registro e monitoramento de logs
O callback unificado implementa diferentes níveis de log (DEBUG, USAGE, INFO), permitindo o monitoramento detalhado de cada etapa do fluxo. Esses logs são essenciais para integração com ferramentas de monitoramento, ajuste de desempenho e detecção de problemas em tempo real.
Exemplo no callback:
Exemplo de encadeamento de configuração:
Consulte: DocumentDetector e FaceLiveness
* Ao encadear essas chamadas de configuração, você pode controlar com precisão o comportamento e a aparência de cada módulo no fluxo unificado.
Configurações personalizadas - Face Liveness
O módulo Face Liveness no CafSDK oferece medidas robustas para garantir que o rosto do usuário seja real e pertença a uma pessoa viva. Ele oferece suporte a vários provedores, como iProov, FaceTec2D e Fortface (PayFace), permitindo que você escolha ou combine soluções com base em seus requisitos.
Para opções detalhadas de personalização, veja: Configurações de Face Liveness.
Para configurar o Face Liveness
O principal objeto de configuração é CafFaceLivenessConfig, que inclui:
Configuração de instruções: instruções e etapas personalizáveis (via
CafInstructionsConfiguration) que orientam o usuário.Indicador de carregamento: uma flag (
loadingEnabled) para exibir um indicador de carregamento durante o processamento.URLs de endpoint (opcional):
authBaseUrl(HTTPS) elivenessBaseUrl(WSS) para comunicação com a API ao usar um proxy reverso.Certificados (opcional): uma lista de hashes Base64 codificados em SHA-256 SPKI para comunicação segura via WSS, necessária apenas ao usar um proxy reverso.
customLocalization (opcional):: Este método permite especificar um nome de recurso de localização personalizado para o módulo iProov. Quando um nome é fornecido, o SDK carregará o arquivo de localização correspondente em vez do pacote de recursos padrão. Para mais detalhes sobre o formato dos arquivos de localização e a integração, consulte a documentação de Localização do iProov.
executeFaceAuth: define se a autenticação facial será executada.
maxRetryAttempts: define o número máximo de tentativas de repetição para a validação de Face Liveness. Use
-1(padrão) para tentativas ilimitadas,0para nenhuma tentativa, ou qualquerNpositivo para permitir atéNtentativas.flCustomizations (opcional): personalizações genéricas para o fluxo de Face Liveness. Inclui suporte para textos da interface do PayFace (Fortface) e fonte via
CafFLPayFaceCustomization.payFaceDebugMode: ativa o modo de depuração para o provedor PayFace quando
true.
Exemplo de configuração:
Como funciona
Quando faceLivenessConfig está definido em seu CafSDKConfiguration, o módulo Face Liveness será executado automaticamente quando sua posição na ordem de apresentação for alcançada. Após uma execução bem-sucedida, um CafUnifiedEvent.Success evento é disparado, contendo:
moduleName: o identificador do módulo (por exemplo, "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.
Esses resultados podem então ser processados no seu callback unificado para atualizar a interface ou prosseguir com o fluxo do aplicativo.
Configurações personalizadas
Resumo da configuração do SDK
O SDK é configurado por meio de CafSDKConfiguration, que inclui configurações para:
Personalização da interface do usuário (cores, instruções e imagens).
Endpoints de proxy reverso e certificados de segurança (opcional).
Parâmetros opcionais como
personId.
Configuração de Proxy Reverso
Para Face Liveness (opcional)
Use esta configuração somente se você estiver roteando solicitações de Face Liveness por meio de um proxy reverso.
Requisitos:
Protocolo:
wss://(WebSocket Secure).Certificados: Hashes SHA-256 codificados em Base64 do Subject Public Key Info (SPKI) do certificado.
Configuração:
Todas as configurações de proxy reverso para Face Liveness são definidas usando a CafFaceLivenessConfig estrutura.
Defina a URL base
Use a
livenessBaseUrlpropriedade para definir o endpoint WSS.Exemplo:
"wss://my.proxy.io/ws/"
Defina os certificados
Use a
certificatespropriedade para fornecer os hashes SPKI.Exemplo:
["4d69f16113bed7d62ca56feb68d32a0fcb7293d3960="]
Exemplo de código:
Proxy reverso de autenticação (opcional)
Use esta configuração somente se você estiver roteando solicitações de autenticação por meio de um proxy reverso.
Requisito:
Protocolo:
https://
Configuração:
Todas as configurações de proxy reverso para autenticação são definidas usando a CafFaceLivenessConfig estrutura.
Defina a URL Base
Use a
authBaseUrlpropriedade para definir o endpoint HTTPS.Exemplo:
"https://my.proxy.io/v1/faces/"
Exemplo de código:
Estruturas de Configuração
Liveness Facial Caf
Personalize a tela de instruções do Face Liveness.
loadingEnabled
Bool
Ativa/desativa a tela de carregamento.
true
authBaseUrl
String
URL HTTPS para solicitações de autenticação. Opcional. Necessário apenas para proxy reverso.
""
livenessBaseUrl
String
URL WSS para o WebSocket do FaceLiveness. Opcional. Necessário apenas para proxy reverso.
""
certificates
[String]
Hashes SPKI SHA-256 codificados em Base64. Opcional. Necessário apenas para WSS via proxy.
[]
instructionsConfig
CafInstructionsConfiguration
Personaliza a tela de instruções (título, etapas, imagens).
Veja abaixo
executeFaceAuth
Boolean
Define se a autenticação facial será executada.
maxRetryAttempts
Int
Define o número máximo de tentativas de repetição para a validação de liveness facial. Use -1 (padrão) para tentativas ilimitadas e 0 para nenhuma.
-1
flCustomizations
[CafFLCustomization]
Personalizações genéricas do Face Liveness (por exemplo, textos da interface e fonte do PayFace).
[]
payFaceDebugMode
Bool
Ativa o modo de depuração especificamente para o provedor PayFace (Fortface).
false
Instruções de configuração
Personalize a tela de instruções do Face Liveness.
ativado
Bool
Mostra/oculta a tela de instruções.
true
captureTitle
String?
Título do cabeçalho da tela de captura.
nil
captureDescriptionText
String?
Breve descrição da tela de captura.
nil
captureSteps
[String]?
Lista ordenada de instruções para captura.
nil
captureButtonTitle
String?
Texto do botão de confirmação na tela de captura.
nil
captureHeaderImage
UIImage?
Imagem exibida no topo da tela de captura.
nil
uploadTitle
String?
Título do cabeçalho da tela de upload.
nil
uploadDescriptionText
String?
Breve descrição da tela de upload.
nil
uploadSteps
[String]?
Lista ordenada de instruções para upload.
nil
uploadButtonTitle
String?
Texto do botão de confirmação na tela de upload.
nil
uploadHeaderImage
UIImage?
Imagem exibida no topo da tela de upload.
nil
Configuração de cores Caf
Personalize a interface. Todos os elementos de UI dos módulos Face Liveness e Document Detector usarão estas cores.
primaryColor
String
Botões principais, destaques.
Código hexadecimal (por exemplo, #FF0000)
secondaryColor
String
Elementos secundários, bordas.
Código hexadecimal
contentColor
String
Texto e ícones.
Código hexadecimal
backgroundColor
String
Fundo da tela.
Código hexadecimal
mediumColor
String
Elementos neutros (por exemplo, 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
Exemplo de código
Exemplo completo de código de configuração.
Mais informações
Requisitos do certificado
Os certificados devem ser o hash SHA-256 codificado em base64 do Subject Public Key Info (SPKI) do certificado.
Aplicação do protocolo
A URL do Face Liveness deve usar wss:// ao usar um proxy reverso.
A URL de autenticação deve usar https:// ao usar um proxy reverso.
Valores padrão
loadingEnabledétruepor padrão.instructionsConfig.enabledétruepor padrão.
Resultados do SDK
Casos de sucesso
Após a execução bem-sucedida, o CafUnifiedEvent.success evento conterá um array [CafUnifiedResponse] de respostas. Para Face Liveness:
Parâmetros de SignedResponse
Dentro do signedResponse, o parâmetro isAlive define a execução do liveness, onde true é aprovado e false é rejeitado.
requestId
Identificador da solicitação.
isAlive
Validação de uma pessoa viva, identifica se o usuário foi aprovado com sucesso ou não.
token
Token da solicitação.
userId
Identificador do usuário fornecido para a solicitação.
imageUrl
Link temporário para a imagem, gerado pela nossa API.
personId
Identificador do usuário fornecido para o SDK.
sdkVersion
Versão do SDK em uso.
iat
Expiração do token.
A isAlive o parâmetro é MUITO IMPORTANTE, pois ele determina se o processo de validação prossegue ou é interrompido. Quando isAlive: true, o usuário tem permissão para continuar sua jornada; por outro lado, se isAlive: false, o usuário é considerado inválido e o acesso às próximas etapas da jornada deve ser negado. Este parâmetro desempenha um papel fundamental na condução do fluxo das operações.
Casos de erro
Consulte Detalhamento dos tipos de erro
Tipos de falha
O módulo Face Liveness fornece motivos detalhados de falha por meio do CafUnifiedEvent.failure caso. Esses tipos de falha ajudam a identificar problemas específicos durante a validação facial.
Todos os motivos de falha são retornados exclusivamente em fluxos de validação de liveness GPA. Em fluxos LA (Liveness Assurance), qualquer falha retornará consistentemente o genérico desconhecido erro.
desconhecido
Tente novamente
✅
❌
tooMuchMovement
Fique parado
✅
❌
tooBright
Vá para um lugar mais escuro
✅
❌
tooDark
Vá para um lugar mais claro
✅
❌
misalignedFace
Mantenha seu rosto dentro do oval
✅
❌
faceTooFar
Aproxime seu rosto da tela
✅
❌
faceTooClose
Afaste seu rosto da tela
✅
❌
sunglasses
Remova os óculos de sol
✅
❌
systemError
Erro do sistema
⚠️
✅
rejected
A transação não pôde ser concluída
⚠️
✅
faceNotFound
Posicione seu rosto no oval e tente ficar parado
⚠️
✅
obscuredFace
Certifique-se de que todo o seu rosto esteja visível e remova qualquer acessório que possa cobri-lo
✅
✅
timeout
Tempo limite do sistema
⚠️
✅
óculos
Remova seus óculos
⚠️
✅
multipleFaces
Certifique-se de que apenas uma pessoa esteja visível
✅
✅
eyesClosed
Certifique-se de que seus olhos estejam abertos
✅
✅
userNotFound
A transação não pôde ser concluída
⚠️
✅
lightingIssues
Certifique-se de que seu rosto esteja bem iluminado e sem reflexos
⚠️
✅
framesBlurry
Posicione seu rosto no oval e tente ficar parado
⚠️
✅
deviceIssue
Tente um dispositivo diferente
⚠️
✅
motionIssue
Posicione seu rosto no oval e tente ficar parado
⚠️
✅
backgroundIssue
Vá para outro local com um fundo neutro
⚠️
✅
deviceRestart
Reinicie seu dispositivo e tente novamente
⚠️
✅
processingFault
Tente novamente
⚠️
✅
Legenda: ✅ = será retornado, ❌ = não será retornado, ⚠️ = pode ser retornado no futuro
Configurações personalizadas - Document Detector
A DocumentDetector o módulo usa machine learning (via TensorFlow Lite) para detectar e validar documentos com segurança. Este módulo é altamente configurável, permitindo definir fluxos de documentos personalizados, telas de pré-visualização e configurações de captura manual.
Configuração do Document Detector
O objeto principal de configuração para este módulo é o CafDocumentDetectorConfig, que oferece opções como:
Fluxo: Uma matriz de
CafDocumentDetectorStepobjetos para determinar a ordem e o tipo das capturas de documentos.Personalização do layout: Defina a aparência da interface de captura usando a classe
DocumentDetectorLayoutAs cores são herdadas principalmente da configuração globalCafColorConfiguration.Configurações de upload: Controle o formato do arquivo, a compactação e o tamanho máximo do arquivo com
CafUploadSettings.Opções de captura manual: Ative a captura manual, ajuste o tempo limite.
Personalização de strings e ativos da interface: Use
ddCustomizationspara fornecer textos e imagens personalizados para telas específicas, como o pop-up de upload e a tela de pré-visualização.Configurações de proxy e tempo limite: Configure um proxy e ajuste o tempo limite da rede para uploads seguros de documentos (opcional).
Exemplo de código:
Documentos disponíveis e personalização
CafSDK fornece um conjunto de documentos pré-configurados (por exemplo, rgFront, cnhFront, passaporte, etc.). Você pode personalizar esses documentos ou criar seus próprios fluxos ajustando as propriedades de cada CafDocumentDetectorStep e CafDocument.
Como funciona
Quando documentConfig está definido em seu CafSDKConfiguration, o Document Detector módulo é executado automaticamente quando atinge sua posição designada no fluxo.
Após uma execução bem-sucedida, um CafUnifiedEvent.Success evento é disparado, contendo:
moduleName: O identificador do módulo (por exemplo,
"documentDetector").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.
Esses resultados são então processados na sua resposta unificada da chamada, permitindo que você prossiga com o fluxo ou armazene as informações capturadas conforme necessário.
Exemplo de código:
Após a captura e o processamento do documento serem concluídos, o Document Detector módulo aciona um CafUnifiedEvent.Success evento, que inclui:
moduleName: O identificador do módulo (por exemplo,
"documentDetector").result: Os dados do documento capturado.
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).
Personalizações de strings e ativos da UI para telas específicas.
Comportamento de upload.
Configurações de proxy.
Configuração principal
Propriedades de CafDocumentDetectorConfig .
flow
[CafDocumentDetectorStep]
Lista ordenada de etapas de captura de documentos.
[]
layout
CafDocumentDetectorLayout
Personalização da UI (botões, fontes, sobreposições de feedback). As cores são tematizadas principalmente pela configuração global CafColorConfiguration.
Layout padrão
instructionsConfig
CafInstructionsConfiguration
Personaliza a tela de instruções (título, etapas, imagens).
Veja abaixo
uploadSettings
CafUploadSettings
Controla o comportamento de upload de documentos.
enable: true
manualCaptureEnabled
Bool
Ativa o botão de captura manual.
true
manualCaptureTime
TimeInterval
Tempo limite (segundos) para captura manual. Use 0 para desativar o temporizador de contagem regressiva.
0
requestTimeout
TimeInterval
Tempo limite da solicitação HTTP.
60
showPopup
Bool
Mostra/oculta o pop-up inicial de instruções.
true
proxySettings
CafProxySettings?
Configuração de proxy reverso (host, porta, autenticação).
nil
previewShow
Bool
Ativa a tela de pré-visualização após a captura.
false
ddCustomizations
[CafDDCustomization]?
Matriz de personalizações de strings e ativos da UI para telas do Document Detector (por exemplo, pop-up de upload, tela de pré-visualização).
nil
enableMultiLanguage
Bool
Ativa a tradução automática das mensagens padrão.
true
allowedPassportCountryList
[CafCountryCodes]?
Lista de permissões de países permitidos para passaporte (por exemplo, .BR, .US).
nil
selectDocumentConfig
CafSelectDocumentConfig?
Configura a tela de seleção de documentos (título/descrição) e os títulos/descrições por documento por meio de customTitles/customDescriptions
nil
currentStepDoneDelay
TimeInterval
Atraso (em segundos) antes de prosseguir após concluir uma etapa de captura
1.0
maxRetryAttempts
Int
Número máximo de tentativas de repetição no fluxo de erro do servidor do DocumentCapture.
2
Personalização da tela de seleção de documento (CafSelectDocumentConfig)
Use CafSelectDocumentConfig para personalizar a tela de seleção de documentos. Você pode definir um título/descrição da tela e, opcionalmente, substituir os rótulos localizados padrão por tipo de documento.
screenTitle
String?
Título exibido no topo da tela de seleção.
description
String?
Subtítulo/descrição abaixo do título.
customTitles
[CafDocumentTypeKey: String]?
Substitui o título padrão de cada tipo de documento.
customDescriptions
[CafDocumentTypeKey: String]?
Substitui a descrição padrão de cada tipo de documento.
Sufixo lateral automático para documentos frente e verso
Quando você fornece customTitles e o fluxo inclui etapas de frente/verso para um tipo de documento, o SDK adiciona automaticamente um sufixo lateral localizado aos rótulos das etapas no fluxo após a seleção. Documentos de etapa única que representam um documento aberto (por exemplo, .rgFull ou .cnhFull) recebem um sufixo "Aberto", enquanto outros documentos de etapa única (por exemplo, passaporte) não recebem sufixo.
Exemplo (frente e verso: RG):
Exemplo (etapa única: Passaporte; sem sufixo):
Exemplo de código
Chaves de tipo de documento (CafDocumentTypeKey)
Use estas chaves ao personalizar os rótulos:
rgrgDigitalcnhcnhDigitalcrlvrnectpspassaporteany
Configuração da tela de instruções
O Document Detector também oferece suporte a uma tela de instruções usando instructionsConfig: CafInstructionsConfiguration, semelhante ao Face Liveness.
instructionsConfig
CafInstructionsConfiguration
Conteúdo da tela de instruções (veja as propriedades abaixo).
CafInstructionsConfiguration:
ativado
Bool
Mostra/oculta a tela de instruções.
true
captureTitle
String?
Título do cabeçalho da tela de captura.
nil
captureDescriptionText
String?
Breve descrição da tela de captura.
nil
captureSteps
[String]?
Lista ordenada de instruções para captura.
nil
captureButtonTitle
String?
Texto do botão de confirmação na tela de captura.
nil
captureHeaderImage
UIImage?
Imagem exibida no topo da tela de captura.
nil
uploadTitle
String?
Título do cabeçalho da tela de upload.
nil
uploadDescriptionText
String?
Breve descrição da tela de upload.
nil
uploadSteps
[String]?
Lista ordenada de instruções para upload.
nil
uploadButtonTitle
String?
Texto do botão de confirmação na tela de upload.
nil
uploadHeaderImage
UIImage?
Imagem exibida no topo da tela de upload.
nil
Exemplo:
Personalização do layout
Propriedades de CafDocumentDetectorLayout. As cores desses elementos são influenciadas principalmente pela configuração global CafColorConfiguration definida em CafSDKConfiguration.
closeButtonImage
UIImage?
Imagem para o botão de fechar.
Padrão do sistema
closeButtonColor
UIColor?
Cor do botão de fechar.
Global primaryColor
closeButtonSize
CGFloat?
Tamanho (largura/altura) do botão de fechar.
44
closeButtonContentMode
UIView.ContentMode?
Modo de conteúdo da imagem do botão de fechar.
.scaleAspectFit
feedbackColors
CafDocumentFeedbackColors
Cores para sobreposições de feedback (padrão/erro/sucesso).
Cores predefinidas
font
String?
Nome da fonte personalizada (por exemplo, "Avenir-Bold").
Fonte do sistema
Exemplo de código:
Personalização de strings da interface e recursos (CafDDCustomization)
A ddCustomizations propriedade em CafDocumentDetectorConfig permite fornecer uma matriz de objetos que estejam em conformidade com CafDDCustomization para substituir textos e imagens padrão em telas específicas do Document Detector.
Se um objeto de personalização para uma tela específica não for fornecido, ou se uma propriedade específica dentro desse objeto estiver nil, o SDK usará suas strings e recursos localizados padrão.
CafPreviewCustomization
Personaliza a tela de pré-visualização do documento exibida após uma imagem do documento ser capturada (se previewShow é true).
title
String?
Texto do título na tela de pré-visualização.
"A foto ficou boa?"
message
String?
Texto de subtítulo/mensagem na tela de pré-visualização.
"Verifique se todas as informações estão legíveis..."
okButton
String?
Texto do botão de confirmação ("aceitar").
"Sim, ficou boa!"
tryAgainButton
String?
Texto do botão de tentar novamente ("tirar de novo").
"Tirar de novo"
Exemplo:
CafDDUploadCustomization
Personaliza o pop-up exibido quando o usuário escolhe enviar um arquivo de documento.
image
UIImage?
Imagem exibida no topo do pop-up.
Ilustração padrão do SDK
title
String?
Texto do título do pop-up de envio.
"Enviar documento"
message
String?
Texto da mensagem dentro do pop-up de envio.
"Selecione o arquivo..."
uploadButton
String?
Texto do botão "Enviar".
"Enviar"
cancelButton
String?
Texto do botão "Cancelar".
"Cancelar"
Exemplo:
CafUploadMessagesCustomization
Personaliza as mensagens de qualidade no fluxo exibidas durante o agendamento do envio do documento.
sending
String?
Mensagem exibida quando o envio começa.
"Enviando documento... Aguarde..."
verifyingIntegrity
String?
Mensagem exibida enquanto a integridade do documento é verificada.
"Verificando a integridade do documento..."
processingData
String?
Mensagem exibida enquanto os dados estão sendo processados.
"Processando os dados do documento..."
almostDone
String?
Mensagem exibida quando o envio está quase concluído.
"Quase lá... Finalizando o envio..."
timeBetweenMessages
TimeInterval?
Intervalo (em segundos) entre cada mensagem.
15
Exemplo:
CafFailedPhotoCustomization
Personaliza a tela de falha exibida quando uma foto não consegue ser enviada.
title
String?
Texto do título exibido na tela de falha.
description
String?
Texto de descrição explicando a falha.
continueButton
String?
Texto do botão de tentar novamente.
Exemplo:
CafMessageCustomization
Personaliza várias mensagens no fluxo exibidas durante o processo de captura do documento (por exemplo, mensagens do sensor, feedback de IA).
waitMessage
Exibida durante a inicialização do SDK.
"Aguarde"
holdDocumentMessage
Exibida ao pedir ao usuário que mantenha o documento estável.
"Segure o documento"
fitTheDocumentMessage
Recomenda alinhar o documento à máscara.
"Encaixe o documento na marcação"
verifyingQualityMessage
Exibida durante a verificação de qualidade.
"Verificando a qualidade…"
lowQualityDocumentMessage
Exibida em caso de falha na captura devido à qualidade.
"Ops, tente novamente"
uploadingImageMessage
Exibida durante o envio da imagem.
"Enviando imagem..."
sensorLuminosityMessage
Aviso de pouca luminosidade.
"Ambiente muito escuro"
manualCaptureMessage
Texto do botão de captura manual.
"Captura manual"
sensorOrientationMessage
Aviso de orientação do dispositivo.
"O celular não está na horizontal"
sensorStabilityMessage
Aviso de estabilidade do dispositivo.
"Mantenha o celular estável"
popupDocumentSubtitleMessage
Subtítulo do pop-up inicial de instrução.
Subtítulo padrão da instrução
passportCountryNotValidMessage
Exibida se o país selecionado para o passaporte não for válido.
"O país selecionado não é válido"
passportCountryLoadingMessage
Exibida enquanto os dados do país do passaporte são carregados.
"Carregando países..."
aiScanDocumentMessage
Instrução para escanear um documento (IA).
"Escaneie um documento"
aiGetCloserMessage
Instrução para se aproximar (IA).
"Aproxime-se do documento"
aiCentralizeMessage
Instrução para centralizar o documento (IA).
"Centralize o documento"
aiMoveAwayMessage
Instrução para se afastar (IA).
"Afaste-se do documento"
aiAlignDocumentMessage
Instrução para alinhar o documento (IA).
"Alinhe o documento"
aiTurnDocumentMessage
Instrução para virar/girar o documento (IA).
"Vire o documento"
aiCapturedMessage
Confirmação de captura bem-sucedida (IA).
"Capturando o documento"
Exemplo:
Fluxo de captura de documento
Propriedades de CafDocumentDetectorStep.
stepType
CafDocumentStepType
Tipo de documento a ser capturado (por exemplo, .rgFront).
Sim
customStepLabel
String?
Texto exibido na parte inferior da tela para esta etapa.
Não
Rótulo padrão do documento
customIllustration
UIImage?
Imagem exibida no pop-up de instrução desta etapa.
Não
Ilustração padrão do documento
showStepLabel
Bool
Alterna a visibilidade do rótulo da etapa.
Não
true
customMessage
String?
Texto de mensagem personalizado para o pop-up de instrução desta etapa.
Não
Mensagem padrão do documento
customOkButtonTitle
String?
Texto personalizado para o botão 'OK' no pop-up de instrução desta etapa.
Não
"OK" (localizado)
Exemplo de código:
Personalização do envio
Propriedades de CafUploadSettings.
enable
Bool
Ativa a funcionalidade de envio de documentos.
true
compress
Bool
Compacta os arquivos antes do envio.
true
fileFormats
[FileFormat]
Formatos permitidos: .png, .jpeg, .pdf.
Todos os formatos
maximumFileSize
Int
Tamanho máximo do arquivo em KB.
10000 (10MB)
Exemplo de código:
Personalizações de proxy
Propriedades de CafProxySettings.
hostname
String
Host do proxy (ex.: "proxy.com").
Sim
porta
Int
Porta do proxy (ex.: 8080).
Sim
usuário
String?
Nome de usuário de autenticação.
Não
senha
String?
Senha de autenticação.
Não
Exemplo de código:
Documentos compatíveis no Document Detector
Use estes valores estáticos de CafDocumentStepType (que internamente mapeiam para CafDocument):
.rgFront
Frente do RG brasileiro
.rgBack
Verso do RG brasileiro
.rgFull
RG brasileiro (aberto, mostrando frente e verso)
.cnhFront
Frente da CNH brasileira
.cnhBack
Verso da CNH brasileira
.cnhFull
CNH brasileira (aberta)
.crlv
CRLV brasileiro
.rneFront
Frente do RNE brasileiro
.rneBack
Verso do RNE brasileiro
.ctpsFront
Frente da Carteira de Trabalho brasileira (CTPS)
.ctpsBack
Verso da Carteira de Trabalho brasileira (CTPS)
.passport
Passaporte (qualquer país)
.any
Documento genérico (sem validação específica)
Observação: Todos os casos do enum estão em camelCase (por exemplo, use .rgFront em vez de .RG_FRONT)
Exemplo de código:
Suporte técnico e dicas de uso
Para mais detalhes e cenários de uso avançado, consulte os seguintes recursos:
Repositório no GitHub: acesse o código-fonte, o acompanhamento de issues e as notas de lançamento no repositório GitHub do CafSDK.
Perguntas frequentes e solução de problemas: confira nossa seção de FAQ para problemas comuns e dicas de solução de problemas.
Suporte: para assistência adicional, entre em contato com nossa equipe de suporte ou participe do fórum da comunidade de desenvolvedores.
Atualizamos continuamente a documentação à medida que novos recursos e melhorias são lançados. Fique por dentro das próximas atualizações!
Notas de lançamento
CafSDK iOS v6.4.2
Melhorias em analytics
Melhoria na qualidade do payload: As análises agora incluem metadados mais ricos e mais padronizados em todos os fluxos de captura.
Melhorias de segurança
securityEnabledflag emCafSDKConfiguration: Adicionado um novosecurityEnabled: Bool = falsepropriedade aCafSDKConfiguration, permitindo que a aplicação de segurança seja alternada programaticamente. Quando definido comotrue, o SDK executa validação de segurança rigorosa durante a inicialização e a execução; se uma violação de segurança for detectada, o SDK lança umsecurityExceptione encerra o fluxo.Exemplo de código:
CAFEnforceSecurityremovido: ACAFEnforceSecurityInfo.plistflag não é mais lida pelo SDK. A aplicação de segurança agora é controlada exclusivamente pelo novosecurityEnabledpropriedade emCafSDKConfiguration. As integrações existentes que dependem da flag no Info.plist precisam migrar para definirsecurityEnabledprogramaticamente.
Correções de bugs
Document Detector — fluxo RG: Corrigidos problemas que afetavam o fluxo de captura do documento RG em
DocumentDetector.
CafSDK iOS v6.3.0
Atualizações de arquitetura
Remoção da dependência KMP/CafSolutions: A pilha do provedor de liveness não depende mais de
CafSolutions.
Melhorias em analytics
Melhoria na qualidade do payload: As análises agora incluem metadados mais ricos e mais padronizados.
CafSDK iOS v6.2.0
Versões anteriores à 6.2.0 farão com que o iProov Liveness deixe de funcionar a partir de 12 de março de 2026. Para garantir o funcionamento adequado e a continuidade do serviço, use a versão 6.2.0 ou posterior.
Mudanças incompatíveis
Versão mínima do iOS atualizada: O SDK agora requer iOS 15.0+.
Atualizações
Atualização de dependência: Dependência do iProov atualizada para 13.1.0.
Novas opções de falha: Adicionados novos casos de falha a
CafFailureTypepara um tratamento de falhas melhor:óculosfaceNotFoundframesBlurrylightingIssuesmotionIssuebackgroundIssuedeviceIssuedeviceRestartsystemErrorrejectedtimeoutuserNotFoundprocessingFault
Aviso importante
Aviso de descontinuação do reverse proxy: O suporte a reverse proxy será descontinuado em uma versão futura. Uma atualização necessária relacionada ao iProov é exigida para manter o iProov funcionando corretamente e evitar problemas de certificado. Após 15 de março de 2026, os serviços Faceliveness e Faceauth poderão ficar indisponíveis.
CafSDK iOS v6.1.0
Novos recursos
Integração avançada de analytics: Implementação de analytics atualizada.
CafSDK iOS v6.0.0
Mudanças incompatíveis
CafInstructionsConfigurationrenomeação de propriedades: As propriedades a seguir foram renomeadas para oferecer suporte às telas de instrução de captura e upload:title→captureTitledescriptionText→captureDescriptionTextsteps→captureStepsbuttonTitle→captureButtonTitleheaderImage→captureHeaderImageNovas propriedades adicionadas:
uploadTitle,uploadDescriptionText,uploadSteps,uploadButtonTitle,uploadHeaderImage
Melhorias de segurança
Proteção em tempo de execução: Implementamos verificações abrangentes para instrumentação dinâmica e melhorias de segurança.
Novo tipo de erro: Adicionado
securityExceptionaCafErrorType. O SDK agora encerrará imediatamente o fluxo e retornará esse erro se uma violação de segurança for detectada durante a inicialização ou execução.
CafSDK iOS v5.7.0
Novos recursos
Pré-carregamento de sessão para Face Liveness:
CafSDKProvideragora expõeloadSession()para pré-carregar a sessão do Face Liveness antes de chamarstart().Enquanto um pré-carregamento está em execução, o callback unificado emite
.loadinge.loadedeventos, permitindo que você atualize a UI de acordo.
Document Detector
Melhorias em analytics:
Novos campos de analytics foram adicionados para entender melhor o comportamento de captura de documentos.
Validação de fluxo e tratamento de erros:
Se
CafDocumentDetectorConfig.flowestiver vazio, o SDK agora falha rapidamente com umlibraryExceptionem vez de iniciar o fluxo de captura.A validação de attestation e token agora distingue entre erros de rede, tokens inválidos e respostas inválidas.
Mudanças de comportamento
Padrões de captura manual:
manualCaptureTimeemCafDocumentDetectorConfigagora usa como padrão0segundos (sem contagem regressiva). A captura manual ainda pode ser configurada explicitamente viamanualCaptureEnabledemanualCaptureTime.
CafSDK iOS v5.6.2
Novos recursos
Tratamento de erros de autenticação facial: Adicionado um novo
faceAuthenticationcaso aCafErrorTypepara lidar especificamente com erros de backend quandoexecuteFaceAuthestiver ativado.
Atualizações
Analytics: Validação de analytics melhorada.
CafSDK iOS v5.5.1
Correções de bugs
CafFaceliveness: Correção do fluxo de tentar novamente do CafFaceliveness.
Atualizações
Redução do Fingerprint
2.7.0>2.6.0devido a problemas de compatibilidade, será atualizada em versões futuras.
CafSDK iOS v5.5.0
Novos recursos
Integração do provedor PayFace (Fortface): Provedor opcional de Face Liveness agora disponível.
produto SPM:
FortfaceProvidersubspec do CocoaPods:
CafSDKiOS/FortfaceProvider
Personalizações genéricas do Face Liveness: Novo
flCustomizationspropriedade emCafFaceLivenessConfigcomCafFLPayFaceCustomizationpara personalizar os textos e a fonte da UI do PayFace.Sufixo de lado do documento para títulos personalizados: Ao usar
customTitlesemCafSelectDocumentConfig, o SDK agora adiciona automaticamente um sufixo localizado (por exemplo, "Frente"/"Verso") para documentos que têm dois lados.
Atualizações
Os exemplos de início rápido foram atualizados para incluir o provedor Fortface opcional e
flCustomizationsuso.
CafSDK iOS v5.4.4
Novos recursos
Personalização dos rótulos de seleção de documento: agora você pode substituir os títulos e descrições por documento na tela de seleção de documento por meio de
CafSelectDocumentConfig.customTitlesecustomDescriptionsusandoCafDocumentTypeKeychaves. Isso afeta tanto a lista de seleção quanto os rótulos das etapas aplicados após a seleção.
CafSDK iOS v5.4.3
Melhorias
Mensagens de erro e falha normalizadas: os callbacks agora exibem descrições mais limpas e legíveis, extraindo mensagens aninhadas dos payloads JSON quando disponíveis
A apresentação da tela de falha agora é em tela cheia para consistência
CafSDK iOS v5.4.2
Correções de bugs
Confiabilidade da conclusão quando nenhum modal é apresentado: os provedores agora garantem callbacks mesmo quando as telas de instrução/transição estão desativadas e nenhum view controller é apresentado
Lógica de dismiss mais segura tanto no Face Liveness quanto nos provedores do Document Detector para evitar callbacks perdidos ou UI travada em casos extremos
CafSDK iOS v5.4.1
Melhorias
Validação do upload de documentos: feedback mais claro para arquivos PDF, incluindo mensagens explícitas quando um arquivo está criptografado, bloqueado ou ilegível
Comportamento de cancelamento mais consistente durante o upload de documentos
Correções
Confiabilidade da conclusão do fluxo quando as telas de transição estão desativadas: as sessões agora são finalizadas corretamente e os callbacks são entregues tanto no modo em lote quanto no modo sem lote
A seleção de documentos agora preserva a ordem de documentos configurada ao confirmar seleções múltiplas
CafSDK iOS v5.4.0
Novos recursos
Controle aprimorado da tela de transição: Adicionado
enableTransitionScreensparâmetro aCafSDKConfigurationpara controlar se as telas de transição são exibidas entre os módulosQuando definido como
true(padrão), as telas de confirmação são exibidas entre os módulosQuando definido como
false, os módulos são executados sequencialmente sem telas intermediárias para uma experiência mais fluida
Tratamento de erros aprimorado: Gerenciamento e padronização de erros aprimorados em todos os módulos
Melhor categorização de erros com tipos de erro padronizados
Analytics aprimorados para rastreamento e depuração de erros
Integração avançada de analytics: Sistema de analytics atualizado com recursos abrangentes de rastreamento
Analytics de erro aprimorados com parâmetros de erro padronizados
Melhor rastreamento de sessão e ponto de entrada
Atualizações
Validação de token: Validação de token aprimorada com mensagens de erro melhores para tokens vazios e IDs de pessoa
Exemplo de código
CafSDK iOS v5.3.0
Novos recursos
Personalização aprimorada de diálogos: Adicionadas novas propriedades de configuração de cores para personalizar a aparência de diálogos e pop-ups:
dialogBackgroundColor: personalize a cor de fundo de diálogos e pop-ups (o padrão é uma cor dinâmica com base no estilo da interface:#1C1C1Epara o modo escuro,#FFFFFFpara o modo claro)dialogBorderColor: personalize a cor da borda de diálogos e pop-ups (o padrão é#E5E5E7)
Exemplo de código
CafSDK iOS v5.2.0
Novos recursos
Lógica aprimorada do fluxo de documentos: Quando documentos digitais (RG Digital ou CNH Digital) estão presentes no fluxo, o SDK agora automaticamente:
força a ativação do modo de upload
pula a tela de seleção da origem da foto
vai diretamente para o fluxo de upload para uma experiência de usuário mais fluida
Atualizações
Padrão das configurações de upload alterado:
CafUploadSettings.enableagora usa como padrãotrueem vez defalseIsso afeta
CafDocumentDetectorConfig,CafUploadSettings
Lógica de seleção de documentos: Lógica aprimorada para seleção de documentos RG e CNH:
Quando os documentos frente/verso e completo estão disponíveis, o SDK seleciona inteligentemente os documentos de frente e verso na ordem correta
As opções de documento digital têm prioridade e são exibidas primeiro nas telas de seleção
Correções
Fluxo de upload: Corrigido um problema relacionado a documentos incorretos que causavam um erro no fluxo de upload.
CafSDK iOS v5.1.0
Atualizações
Melhorias de segurança em DocumentDetector e CafFaceliveness
Novo parâmetro
maxRetryAttemptsno DocumentDetector para definir o número máximo de tentativas de repetição no fluxo de erro do servidor do DocumentCapture (o padrão é2)
Correções
inicialização de erro do CafSDKProvider, ambos
mobileTokenepersonIdsão obrigatórios
CafSDK iOS v5.0.2
Atualizações
Atualização da versão de build do Xcode de
16.2a16.4.
CafSDK iOS v5.0.1
Atualizações
Atualizado
Iproovversão de12.3.0a12.3.1.
Novos recursos
Atualizado
reverseProxyConfig: CafReverseProxyConfiga CafFaceLivenessConfig, consolidandoauthBaseUrl,livenessBaseUrl, ecertificatesparâmetros.Novo
executeFaceAuthparâmetro adicionado para definir se a autenticação facial deve ser realizada.Novo
maxRetryAttemptsmétodo paraCafFaceLivenessConfigdefinir o número máximo de tentativas de repetição para a validação de Face Liveness.
CafSDK iOS v4.1.1
Melhorias
Melhorias para analytics híbridas (
Flutter / React Native)
CafSDK iOS v4.1.0
Novos recursos
Adicionado
customLocalization: String?a FaceLiveness construtores.Novos tipos de personalização para o DocumentDetector:
CafUploadMessagesCustomizationCafFailedPhotoCustomization
CafSDK iOS v4.0.0
Mudanças significativas
API de resposta unificada:
CafUnifiedResponseagora expõe apenassignedResponse: String(não há mais[String: Any]dicionário de resultados).Tratamento de erros: Adicionado
invalidResponseExceptionaCafErrorType;Mudanças incompatíveis:
CafUnifiedResponsea assinatura do inicializador mudou: semresultparâmetro.Propriedade
resultremovido; substitua todos os usos porsignedResponse.
Retry atualizado no upload de documentos: em conexões mais lentas ou uploads interrompidos, o fluxo documentDetector integrou uma opção de retry para o upload de documentos
Guia de migração da v3.x
Atualizar dependência
SPM: use
from: "4.0.0"CocoaPods:
pod 'CafSDKiOS', '~> 4.0.0'
Tratamento de callbacks
Remover
response.resultTodas as referências ao
[String: Any]mapa result devem usar response.signedResponseem vez disso.
Trate
invalidResponseExceptionNo seu
.errorswitch, adicione um case para.invalidResponseException.
Fluxos do Document Detector
Se você dependia do antigo dicionário de resultados, faça a migração para analisar seu JWT de
signedResponse.
CafSDK iOS v3.0.0
Novos recursos
Análises aprimoradas
Tratamento de eventos de falha: Adicionado detalhado
falhacaso aCafUnifiedEventcom resposta do servidor, tipo de erro e descriçãoPersonalização da UI do Document Detector:
Introduzido
CafDDCustomizationprotocolo e tipos concretos (CafPreviewCustomization,CafDDUploadCustomization,CafMessageCustomization) para permitir substituir textos e imagens padrão em telas específicas do Document Detector (por exemplo, pré-visualização, pop-up de upload, mensagens no fluxo). Isso é configurado por meio do novoddCustomizationspropriedade emCafDocumentDetectorConfig.CafDocumentDetectorStepagora incluicustomMessageecustomOkButtonTitlepropriedades para personalizar o pop-up de instruções para cada etapa.
Atualização de tema:
Propriedades de cor específicas do Document Detector (como
primaryColor,uploadBackGroundColor,previewBackGroundColor) foram removidas deCafDocumentDetectorLayout. A UI agora herda principalmente seu tema do globalCafColorConfigurationdefinida emCafSDKConfiguration, garantindo uma aparência e sensação mais consistentes.
Atualizações
Melhor diferenciação no tratamento de erros:
Use
CafFailureTypetipo enum para falhas operacionais específicas do módulo do SDKUse
CafErrorTypetipo enum para erros gerais de execução
Mudanças incompatíveis
Atualizações na assinatura do evento:
Aplicação de segurança de tipos:
Todas as comparações de tipo de erro/falha devem usar casos de enum em vez de strings brutas
CafDocumentDetectorConfigAlterações:Removido
previewTitle,previewSubtitle,previewConfirmLabel,previewRetryLabelpropriedades. UseCafPreviewCustomizationdentro deddCustomizationsem vez disso.Removido
messageSettingspropriedade. UseCafMessageCustomizationdentro deddCustomizationsem vez disso.
CafDocumentDetectorLayoutAlterações:Removido
primaryColor,uploadBackGroundColor,previewBackGroundColorpropriedades. As cores agora são definidas globalmente por meio deCafColorConfiguration.
Guia de migração
Atualize para v3.0.0+.
Inclua o novo
.failureevento
Atualizar
.errorevento
Atualizar
CafDocumentDetectorConfig:Se você estava usando
previewTitle,previewSubtitle, etc., crie umCafPreviewCustomizationobjeto, defina suas propriedades e adicione-o aoddCustomizationsarray emCafDocumentDetectorConfig.Se você estava usando
messageSettings, crie umCafMessageCustomizationobjeto, defina suas propriedades e adicione-o aoddCustomizationsarray.
Atualizar
CafDocumentDetectorStep:Se você precisar personalizar a mensagem do pop-up de instruções ou o texto do botão OK para uma etapa específica, use os novos
customMessageecustomOkButtonTitleinicializadores/propriedades deCafDocumentDetectorStep.
Revisar tema:
Certifique-se de que seu global
CafColorConfiguration(emCafSDKConfiguration) esteja configurado conforme desejado, pois os elementos da UI do Document Detector agora usarão principalmente essas cores.
CafSDK iOS v2.0.0
Novos recursos
Flag de resultados em lote:
CafSDKConfiguration(waitForAllServices: true)agora agrega todas as respostas dos módulos em uma única.success(responses: [...]).Unificado
.successAtualização:.successagora sempre carrega um array de respostas.
Mudanças incompatíveis
Assinatura de
CafUnifiedEvent.successalterada parasuccess(responses: [CafUnifiedResponse]).
Guia de migração
Atualize para v2.0.0+.
Altere o manipulador para esperar um array:
CafSDK iOS v1.4.0
Novos recursos
Apresentando
CafSDKProvider: Um ponto de entrada unificado para integrar os módulos Face Liveness e Document Detector com uma única configuração.Padrão Builder: Inicialização simplificada usando
CafSDKProvider.Builderpara configuração modular e com segurança de tipos.Configuração unificada: Configure ambos os módulos usando
CafSDKConfiguration, incluindo a ordem de execução (presentationOrder) e a definição de tema da interface (CafColorConfiguration).Consistência entre módulos: Autenticação, ambiente e registro compartilhados entre os módulos.
Atualizações na documentação
Guias revisados para integração com Swift Package Manager (SPM) e CocoaPods.
Adicionados exemplos detalhados para
CafFaceLivenessConfigeCafDocumentDetectorConfig.
Melhorias na configuração
Face Liveness
Personalize instruções (
CafInstructionsConfiguration).Configure endpoints de proxy reverso (
authBaseUrl,livenessBaseUrl).
Document Detector
Defina fluxos de captura em várias etapas (
[CafDocumentDetectorStep]).Personalização da UI (
CafDocumentDetectorLayout,CafMessageSettings).Suporte a proxy (
CafProxySettings).
Mudanças incompatíveis
Novo módulo de integração:
CafSDKRenomeação de módulos:
FaceLiveness→CafFaceLiveness,DocumentDetector→CafDocumentDetectorDependências atualizadas: Requer Xcode 16.2+ e iOS 13.0+
Guia de migração
Substitua os inicializadores independentes do módulo por
CafSDKProviderAtualize os casos do enum para minúsculas (por exemplo,
.CNH_FRONT→.cnhFront)Use
CafDocumentDetectorStep(stepType:)em vez de construtores legados
Atualizado

