Live ID ValidationIntegração móvel

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:

  1. Crie no servidor, guarde apenas o token. O aplicativo chama o seu backend, que chama POST /sessions da Certivant com a Chave de Identificação. O aplicativo recebe apenas captureUrl + sessionToken.
  2. Conceda a solicitação de câmera do WebView. O getUserMedia dentro 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/:

ExemploStackPlataformas
android-kotlin/KotlinAndroid
ios-swiftui/SwiftUIiOS 15+
maui/.NET MAUIAndroid · 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.