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 :
- Créer la session côté serveur et ne détenir que le jeton. L'application appelle votre backend,
qui appelle
POST /sessionsde Certivant avec la clé d'identification. L'application ne reçoit quecaptureUrletsessionToken. - Accorder la demande de caméra de la WebView.
getUserMediadans 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/ :
| Exemple | Technologie | Cibles |
|---|---|---|
android-kotlin/ | Kotlin | Android |
ios-swiftui/ | SwiftUI | iOS 15+ |
maui/ | .NET MAUI | Android · 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.
Référence de l'API Live ID
Points de terminaison de Live ID Validation — émettre une clé d'identification, créer une session de capture, ouvrir la page de capture hébergée, soumettre un selfie, interroger le résultat, et charge utile du webhook de validation.
Serveur MCP
Connectez un assistant IA à Certivant via le Model Context Protocol — triez la file de vérification, envoyez et suivez des formulaires, relancez les demandeurs inactifs, expliquez les décisions et produisez des rapports, le tout avec votre clé d'API existante.