Live ID ValidationIncorporación móvil

Incorporación móvil

Integre la página alojada de captura de Live ID en una aplicación nativa: configuración del WebView y permisos de cámara para iOS, Android y .NET MAUI, además de aplicaciones de ejemplo listas para ejecutar.

En una aplicación nativa, integra la página alojada de captura en un WebView en lugar de construir su propia interfaz de cámara. El WebView ejecuta el mismo flujo que en la web (selfi, comparación facial y prueba de vida), y su aplicación lee el veredicto consultando la sesión.

La página alojada establece frame-ancestors 'none', por lo que no puede incrustarse en un iframe web. Un WebView nativo realiza una carga de nivel superior, no un iframe, así que esto no es un problema, y es el patrón correcto (diseño v1 bloqueado).

El patrón

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

Dos cosas que toda plataforma necesita:

  1. Cree la sesión en el servidor y conserve solo el token. La aplicación llama a su backend, que llama al POST /sessions de Certivant con la clave de identificación. La aplicación recibe únicamente captureUrl y sessionToken.
  2. Conceda la solicitud de cámara del WebView. getUserMedia dentro de un WebView está bloqueado hasta que lo conceda explícitamente; el punto de enganche varía según la plataforma (más abajo).

Permiso de cámara por plataforma

iOS (WKWebView). Declare NSCameraUsageDescription, permita la reproducción multimedia en línea y conceda la solicitud de captura mediante 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). Añada el permiso de manifiesto CAMERA, solicítelo en tiempo de ejecución y conceda la solicitud de la página en 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. Personalice una vez el manejador compartido de WebView; cada plataforma conecta su propia concesión (Android WebChromeClient, iOS/Mac WKUIDelegate, PermissionRequested de WebView2 en Windows). Añada NSCameraUsageDescription (iOS/Mac), el permiso CAMERA (Android) y la capacidad 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
    });

Lectura del resultado

Consulte el endpoint de estado periódicamente y deténgase cuando se complete:

GET https://app.certivant.com/api/kyc/public/live-id/sessions/{sessionToken}
→ { "status": "completed", "matched": true, … }

matched === true → conceda el inicio de sesión. Su backend también puede suscribirse al webhook live_id.validation.completed para obtener una señal autoritativa en el servidor, lo que resulta útil si quiere que la decisión de conceder el acceso resida por completo en su backend.

Aplicaciones de ejemplo

Hay referencias completas y ejecutables en el repositorio, en samples/live-id-validation/:

EjemploStackDestinos
android-kotlin/KotlinAndroid
ios-swiftui/SwiftUIiOS 15+
maui/.NET MAUIAndroid · iOS · Windows · macOS

Cada una es una sola pantalla: toque Verificar con selfi → WebView → resultado. Configure su host y una fuente de sesiones en el LiveIdConfig del ejemplo (su endpoint de backend, o un token creado con curl para una prueba rápida), y ejecútela. Consulte el README de cada ejemplo para los pasos de compilación y los archivos exactos que conectan la concesión de la cámara y el sondeo.