entry.url ao chamar criar verificação.
Pré-requisitos
- Xcode 26 ou superior. A interface de módulo Swift é compatível só para frente: o piso é a versão que compilou o release, então Xcode mais antigo não compila.
- iOS 17 ou superior, como deployment target.
- Um embed URL emitido pelo seu backend, como em emitir a credencial.
- O
.xcframeworkda versão que você vai usar. Peça ao suporte qual versão indicar.
Confira o exemplo
Os arquivos desta integração, com o destino de cada um.
Configure o projeto
1
Embuta o .xcframework
A SDK é distribuída como Confira a integridade antes de embutir:No Xcode, vá ao target do app em General → Frameworks, Libraries, and Embedded Content,
clique em +, escolha Add Other → Add Files… e selecione o
.xcframework fechado. Não há SPM nem CocoaPods.Cada versão fica num caminho fixo e imutável, com o SHA-256 ao lado:Conferir o SHA-256
.xcframework. Confirme
que o Embed está como Embed & Sign.2
Declare as três permissões
A verificação usa câmera para o documento e a selfie, microfone para a prova de vida e
localização para antifraude. O seu app, não a SDK, declara as três chaves. Sem elas o processo
é encerrado quando o widget tenta acessar o hardware.Se o target usa
Info.plist
GENERATE_INFOPLIST_FILE = YES e não tem Info.plist físico, declare as
mesmas chaves como build settings, com o prefixo INFOPLIST_KEY_.Escreva o texto para o titular, não para a App Review. É ele que aparece no alerta.3
Valide o embed URL
LegitimuzEmbedURL.parse(_:) aceita https:// ou http://localhost — é o que o WebKit exige
para liberar câmera e microfone.VerificationFlow.swift
init da sessão valida de novo e lança
LegitimuzEmbedURL.ValidationError. Ele existe para dar o retorno ao titular mais cedo.4
Crie a sessão
VerificationFlow.swift
Pedir as permissões por conta própria
5
Apresente a verificação
LegitimuzVerificationView não tem NavigationStack nem toolbar próprios. Você decide como
apresentá-la: sheet, fullScreenCover ou push.VerificationScreen.swift
6
Observe os eventos e o desfecho
session.events é um AsyncStream. session.outcome() suspende até a verificação chegar a um
estado terminal.VerificationFlow.swift
Confira que funcionou
O fluxo abre na primeira etapa e o console registrasession.started. No dashboard, a verificação
sai de not_opened e passa a started.
Eventos
Não intercepte
terms.open nem redirect.open: a LegitimuzVerificationView já apresenta essas
URLs num Safari embutido.
event.payload é um JSONValue?, um envelope JSON genérico para as etapas que emitem dados extras:
Ler o payload
Tratamento de erros
Validação do embed URL, antes da sessão
Validação do embed URL, antes da sessão
LegitimuzEmbedURL.ValidationError, devolvido por parse(_:). O errorDescription já vem em
pt-BR, pronto para exibir.Erros durante a verificação
Erros durante a verificação
LegitimuzPublicError chega em session.outcome() como .failed(error).Exiba sempre
displayMessage: ele já resolve a prioridade entre userMessage, message e o
texto genérico.Só erro com recoverable == false encerra a sessão. Erro recuperável aparece em
session.events como session.error e o fluxo continua. O catálogo de códigos está em
tratamento de erros.Falha ao carregar a página
Falha ao carregar a página
.loadFailed(message) é problema de rede, DNS ou TLS ao abrir o embed URL, não erro da
verificação. A própria view já mostra a tela de “Não foi possível abrir a verificação” com botão
de tentar de novo.outcome() pode ser chamado de novo depois disso, por causa desse retry.Casos de borda
O titular negou a câmera
O titular negou a câmera
No iOS a negativa é definitiva dentro do app: só os Ajustes resolvem. Explique por que a câmera
é necessária e leve o titular para lá.
Abrir os Ajustes
O embed URL expirou
O embed URL expirou
O embed URL vale até o
expires_at da verificação. Expirado, peça um novo ao seu backend e crie
outra sessão. Não reaproveite o antigo.Próximo passo
Android
O mesmo fluxo em Java.
Receber a decisão
Onde o desfecho realmente chega.