Live ID ValidationIntégration mobile

Intégration mobile

Intégrez la page de capture hébergée Live ID dans une application native — configuration de la WebView et autorisations de caméra pour iOS, Android et .NET MAUI, ainsi que des exemples d'applications prêts à l'emploi.

Dans une application native, vous intégrez la page de capture hébergée dans une WebView plutôt que de construire votre propre interface de caméra. La WebView exécute le même parcours que sur le web — selfie, correspondance faciale, vivacité — et votre application lit le verdict en interrogeant la session.

La page hébergée définit frame-ancestors 'none' : elle ne peut donc pas être placée dans un iframe web. Une WebView native effectue un chargement au premier niveau, et non dans un iframe : c'est acceptable, et c'est le bon modèle (conception v1 verrouillée).

Le principe

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

Deux éléments sont indispensables sur chaque plateforme :

  1. Créer la session côté serveur et ne détenir que le jeton. L'application appelle votre backend, qui appelle POST /sessions de Certivant avec la clé d'identification. L'application ne reçoit que captureUrl et sessionToken.
  2. Accorder la demande de caméra de la WebView. getUserMedia dans une WebView est bloqué tant que vous ne l'avez pas explicitement accordé — le point d'accroche diffère selon la plateforme (voir ci-dessous).

Autorisation de la caméra par plateforme

iOS (WKWebView). Déclarez NSCameraUsageDescription, autorisez la lecture multimédia en ligne, et accordez la demande de capture 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). Ajoutez l'autorisation CAMERA dans le manifeste, demandez-la à l'exécution, et accordez la demande de la page dans 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. Personnalisez une seule fois le gestionnaire WebView partagé ; chaque plateforme branche ensuite sa propre autorisation (Android WebChromeClient, iOS/Mac WKUIDelegate, PermissionRequested de WebView2 sous Windows). Ajoutez NSCameraUsageDescription (iOS/Mac), l'autorisation CAMERA (Android) et 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
    });

Lire le résultat

Interrogez le point de terminaison de statut et arrêtez-vous lorsqu'il indique que la session est terminée :

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

matched === true → accorder la connexion. Votre backend peut aussi s'abonner au webhook live_id.validation.completed pour obtenir un signal serveur faisant foi : utile lorsque vous voulez que la décision d'accès relève entièrement de votre backend.

Applications exemples

Des références complètes et exécutables se trouvent dans le dépôt, sous samples/live-id-validation/ :

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

Chacune se réduit à un seul écran : appuyez sur Verify with selfie → WebView → résultat. Renseignez votre hôte et une source de session dans le LiveIdConfig de l'exemple (votre point de terminaison backend, ou un jeton créé par curl pour un test rapide), puis lancez-la. Consultez le README de chaque exemple pour les étapes de compilation et les fichiers exacts qui branchent l'autorisation de caméra et l'interrogation.