Integração móvel
Incorpore a página de captura hospedada do Live ID em um aplicativo nativo — configuração do WebView e permissões de câmera para iOS, Android e .NET MAUI, além de aplicativos de exemplo prontos para executar.
Em um aplicativo nativo, você incorpora a página de captura hospedada em um WebView, em vez de criar sua própria interface de câmera. O WebView executa o mesmo fluxo da web — selfie, comparação facial, prova de vida — e o seu aplicativo lê o veredito consultando a sessão.
A página hospedada define frame-ancestors 'none', então ela não pode ser colocada em um iframe web. Um WebView nativo faz um carregamento de nível superior, não um iframe, então isso está adequado — e é o padrão correto (design v1 já definido).
O padrão
graph TD
A[App: user taps Log in] --> B[Ask your backend to mint a session]
B --> C[Backend returns captureUrl + sessionToken]
C --> D[Open captureUrl in a WebView]
D --> E[WebView: selfie -> face match + liveness]
A --> F[Poll GET …/sessions/sessionToken every 2s]
E --> F
F --> G{status == completed?}
G -->|yes| H[Read matched -> grant or deny, close WebView]
G -->|no| F
Duas coisas que todas as plataformas precisam:
- Crie no servidor, guarde apenas o token. O aplicativo chama o seu backend, que chama
POST /sessionsda Certivant com a Chave de Identificação. O aplicativo recebe apenascaptureUrl+sessionToken. - Conceda a solicitação de câmera do WebView. O
getUserMediadentro de um WebView fica bloqueado até que você o autorize explicitamente — o gancho muda em cada plataforma (veja abaixo).
Permissão de câmera por plataforma
iOS (WKWebView). Declare NSCameraUsageDescription, permita a reprodução
de mídia inline e conceda a solicitação de captura via WKUIDelegate (iOS 15+):
let config = WKWebViewConfiguration()
config.allowsInlineMediaPlayback = true
config.mediaTypesRequiringUserActionForPlayback = []
// WKUIDelegate:
func webView(_ webView: WKWebView,
requestMediaCapturePermissionFor origin: WKSecurityOrigin,
initiatedByFrame frame: WKFrameInfo,
type: WKMediaCaptureType,
decisionHandler: @escaping (WKPermissionDecision) -> Void) {
decisionHandler(.grant)
}
Android (WebView). Adicione a permissão CAMERA no manifesto, solicite-a
em tempo de execução e conceda a solicitação da página em WebChromeClient:
webView.settings.javaScriptEnabled = true
webView.settings.mediaPlaybackRequiresUserGesture = false
webView.webChromeClient = object : WebChromeClient() {
override fun onPermissionRequest(req: PermissionRequest) {
runOnUiThread { req.grant(arrayOf(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) }
}
}
.NET MAUI. Personalize o WebView compartilhado uma única vez; cada
plataforma configura a sua própria concessão (WebChromeClient no Android,
WKUIDelegate no iOS/Mac, PermissionRequested do WebView2 no Windows).
Adicione NSCameraUsageDescription (iOS/Mac), a permissão CAMERA (Android)
e o recurso de webcam (Windows).
Microsoft.Maui.Handlers.WebViewHandler.Mapper.AppendToMapping(
"LiveIdCamera", (handler, view) => {
#if ANDROID
handler.PlatformView.SetWebChromeClient(new LiveIdChromeClient());
#elif IOS || MACCATALYST
handler.PlatformView.UIDelegate = new LiveIdUIDelegate();
#elif WINDOWS
// CoreWebView2.PermissionRequested -> Allow (Camera)
#endif
});
Como ler o resultado
Consulte o endpoint de status e pare quando a sessão for concluída:
GET https://app.certivant.com/api/kyc/public/live-id/sessions/{sessionToken}
→ { "status": "completed", "matched": true, … }
matched === true → conceda o login. Seu backend também pode assinar o webhook live_id.validation.completed para ter um sinal autoritativo no servidor — útil quando você quer que a decisão de conceder o acesso fique inteiramente no seu backend.
Aplicativos de exemplo
Referências completas e executáveis estão no repositório, em samples/live-id-validation/:
| Exemplo | Stack | Plataformas |
|---|---|---|
android-kotlin/ | Kotlin | Android |
ios-swiftui/ | SwiftUI | iOS 15+ |
maui/ | .NET MAUI | Android · iOS · Windows · macOS |
Cada um tem uma única tela: toque em Verify with selfie → WebView → resultado. Defina o seu host e uma fonte de sessão no LiveIdConfig do exemplo (o endpoint do seu backend ou um token gerado com curl para um teste rápido) e execute. Veja o README de cada exemplo para as etapas de build e os arquivos exatos que configuram a permissão da câmera e a consulta de status.
Referência da API do Live ID
Endpoints do Live ID Validation — emita uma Chave de Identificação, crie uma sessão de captura, abra a página de captura hospedada, envie uma selfie, consulte o resultado e o payload do webhook de validação.
Servidor MCP
Conecte um assistente de IA à Certivant pelo Model Context Protocol — organize a fila de verificação, envie e acompanhe formulários, cobre solicitantes inativos, explique decisões e gere relatórios, tudo com a sua chave de API atual.