Aller au contenu principal
Capture iOS

Ouvrez la capture dans une session de navigateur système et ramenez la personne dans votre application.

Markdown

Votre back-end crée le processus dans Human Plugin avec un flux Journey et un callbackUri qui utilise le scheme d'URL de votre application. L'application ouvre le link de la réponse dans une ASWebAuthenticationSession. Lorsque la capture se termine, la session revient dans l'application via votre scheme.

Conservez l'id Human Plugin de la réponse de création. Votre back-end lit le résultat avec cet id.

Prérequis​

  • iOS 13 ou version ultérieure
  • Xcode 14 ou version ultérieure
  • Le framework AuthenticationServices (intégré)
  • Un scheme d'URL propre à votre application, tel que myapp

1. Créer le processus avec votre scheme​

Votre back-end envoie le scheme comme callbackUri :

{
"flow": "humantoken",
"clientId": "client-a",
"correlationId": "order-1001",
"credential": { "type": "DUI_TYPE_NG_BVN", "value": "<document number>" },
"callbackUri": "myapp://callback"
}

et renvoie id et link à l'application.

2. Créer le fournisseur de contexte de présentation​

import AuthenticationServices
import UIKit

class CaptureContextProvider: NSObject, ASWebAuthenticationPresentationContextProviding {
func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first else {
return ASPresentationAnchor()
}
return window
}
}

3. Créer le gestionnaire de session​

import AuthenticationServices

class CaptureSessionManager {
static let shared = CaptureSessionManager()
private var session: ASWebAuthenticationSession?
private let contextProvider = CaptureContextProvider()

/// Appelle completion avec true lorsque la capture est terminée, false lorsque la personne l'a fermée.
func start(link: URL, completion: @escaping (Bool) -> Void) {
let newSession = ASWebAuthenticationSession(
url: link,
callbackURLScheme: "myapp"
) { callbackURL, _ in
self.session = nil
completion(callbackURL != nil)
}
newSession.presentationContextProvider = contextProvider
newSession.prefersEphemeralWebBrowserSession = true
newSession.start()
session = newSession
}
}
info

callbackURLScheme n'accepte que le nom du scheme (myapp), sans ://.

4. Démarrer la capture​

guard let url = URL(string: link) else { return }

CaptureSessionManager.shared.start(link: url) { ended in
if ended {
// La capture est terminée. Demandez à votre back-end de lire le résultat
// avec GET /v1/processes/{id}, en utilisant l'id Human Plugin.
} else {
// La personne a fermé la session.
}
}

Récapitulatif​

FichierRôle
CaptureContextProvider.swiftFournisseur de contexte de présentation
CaptureSessionManager.swiftCycle de vie de ASWebAuthenticationSession