Live ID ValidationOnboarding mobile

Onboarding mobile

Incorpori la pagina di acquisizione ospitata di Live ID in un'app nativa — configurazione della WebView e permessi della fotocamera per iOS, Android e .NET MAUI, con app di esempio pronte all'uso.

In un'app nativa incorpora la pagina di acquisizione ospitata in una WebView, invece di costruire una propria interfaccia di fotocamera. La WebView esegue lo stesso flusso del web — selfie, confronto del volto, vivacità — e la Sua app legge il verdetto interrogando la sessione.

La pagina ospitata imposta frame-ancestors 'none', quindi non può essere inserita in un iframe web. Una WebView nativa esegue un caricamento a livello principale, non un iframe, quindi va bene — ed è lo schema corretto (progettazione v1 bloccata).

Lo schema

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

Due cose sono necessarie su ogni piattaforma:

  1. Crei sul server, tenga solo il token. L'app chiama il Suo backend, che chiama POST /sessions di Certivant con la chiave di identificazione. L'app riceve solo captureUrl e sessionToken.
  2. Conceda la richiesta di fotocamera della WebView. getUserMedia all'interno di una WebView è bloccato finché non lo concede esplicitamente — il punto di aggancio varia per piattaforma (sotto).

Permesso della fotocamera per piattaforma

iOS (WKWebView). Dichiari NSCameraUsageDescription, consenta i media inline e conceda la richiesta di acquisizione tramite 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). Aggiunga il permesso CAMERA nel manifest, lo richieda a runtime e conceda la richiesta della pagina in 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. Personalizzi una volta sola l'handler WebView condiviso; ogni piattaforma collega la propria concessione (Android WebChromeClient, iOS/Mac WKUIDelegate, Windows WebView2 PermissionRequested). Aggiunga NSCameraUsageDescription (iOS/Mac), il permesso CAMERA (Android) e la capacità 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
    });

Lettura dell'esito

Interroghi l'endpoint di stato e si fermi quando la verifica è completata:

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

matched === true → conceda l'accesso. Il Suo backend può anche iscriversi al webhook live_id.validation.completed per un segnale autorevole lato server — utile quando vuole che la decisione di concedere l'accesso risieda interamente sul Suo backend.

App di esempio

Riferimenti completi e funzionanti si trovano nel repository sotto samples/live-id-validation/:

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

Ognuna è una sola schermata: tocchi Verifica con selfie → WebView → esito. Imposti il Suo host e una fonte di sessione nella LiveIdConfig dell'esempio (il Suo endpoint backend, oppure un token creato con curl per una prova rapida), poi esegua. Consulti il README di ogni esempio per i passaggi di compilazione e per i file esatti che collegano la concessione della fotocamera e l'interrogazione.