LivenessIdentySDK para iOS e o fluxo completo de uma verificação de vivacidade.
API pública
A fachada do SDK fica emLivenessIdentySDKClient.shared:
initializeé assíncrona e lança (throws)LivenessIdentySDKInitErrorem caso de falha. Chame uma única vez, preferencialmente noAppDelegate.getSessionDatacoleta a assinatura de dispositivo (biblioteca de fingerprint) de forma best-effort e nunca falha — nem quando chamada antes deinitialize.startLivenessCheckrequer umaUIViewControllere osessionTokencriado pelo seu backend.optionsé opcional — veja Opções de captura.stop()libera o estado interno do SDK. Não chamar enquanto uma captura estiver em progresso.isInitializedindica seinitializefoi concluído com sucesso.
A classe inteira é isolada ao
@MainActor — todos os membros (initialize, getSessionData, startLivenessCheck, stop, isInitialized) devem ser acessados a partir do main actor. Nenhuma chave de API precisa ser fornecida pelo app consumidor: as credenciais do vendor, da biblioteca de fingerprint e do Sentry já estão embutidas e criptografadas dentro do XCFramework.Configuração
Dados de sessão (ssid)
getSessionData() coleta a assinatura de dispositivo via biblioteca de fingerprint 100% internamente — não há protocolo para implementar nem parâmetro a fornecer — e retorna LivenessIdentySDKSessionData diretamente (não é Result nem throws). Sem a dependência opcional shield-ptr-spm (veja Instalação), se a coleta falhar, ou se a função for chamada antes de initialize, ssid vem vazio — isso não é um erro. Nesse caso, omita o campo ssid ao criar a sessão.
Criação de sessão — responsabilidade do app consumidor
O SDK não cria a sessão sozinho. Depois de obterssid, seu app pede ao seu backend para criar a sessão; o seu backend chama POST /api/v1/sessions na Plataforma ID com a sua x-api-key:
A resposta fornece o
sessionToken usado em startLivenessCheck. Veja Serviços para a referência completa do endpoint.
Estados do AsyncStream
startLivenessCheck retorna um AsyncStream<LivenessIdentySDKLivenessState> que emite um único caminho loading → success ou loading → error antes de completar:
O XCFramework é compilado com library evolution e os enums públicos do SDK não são
@frozen. Por isso os exemplos usam @unknown default: nos switch — sem ele, o compilador emite avisos de exaustividade.Fluxo de uso
1
Inicializar o SDK
Chame
LivenessIdentySDKClient.shared.initialize uma única vez no início do ciclo de vida do app:2
Obter ssid e criar a sessão no backend
Chame
getSessionData() para obter o ssid e envie-o ao seu backend (omitindo-o se vier vazio) para criar a sessão (seção anterior), obtendo o sessionToken.3
Iniciar a verificação
Passe o A UI de captura é apresentada pelo próprio IDENTY Face AI SDK sobre o
sessionToken obtido no passo anterior:viewController passado.4
Tratar o resultado
Em
.success, verifique status (.passed/.failed) — sucesso no stream não significa aprovação biométrica. Em .error, mapeie cada caso de LivenessIdentySDKError — veja Solução de problemas.Opções de captura
startLivenessCheck aceita o parâmetro opcional options para ajustar, por captura, o nível de segurança do anti-spoofing, o nível de detecção de deepfake e os formatos de template retornados:
requiredTemplates sempre inclui .jpeg — mesmo que você não o liste, o SDK o coloca em primeiro lugar e remove duplicatas. Os formatos adicionais aparecem em LivenessIdentySDKResultData.templates, quando o backend os retorna. As opções valem só para a chamada em que foram passadas: uma captura sem options volta aos padrões.Parar e reinicializar o SDK
Campos de LivenessIdentySDKSessionData
Campos de LivenessIdentySDKResultData
status == .passed não é opcional de checar — é a única forma de saber se a verificação biométrica foi aprovada. O stream chegar a .success apenas significa que o fluxo técnico terminou sem erro.Erros possíveis
LivenessIdentySDKInitError
Lançados por initialize(config:):
LivenessIdentySDKError
Emitido como .error(LivenessIdentySDKError) pelo AsyncStream:
A hierarquia completa, com causa provável e ação recomendada para cada caso, está em Solução de problemas.
Próximos passos
Customização
Personalize o estilo da tela de captura
Solução de problemas
Hierarquia de erros e dicas de diagnóstico