Captura en iOS
Abre la captura en una sesión de navegador del sistema y devuelve a la persona a tu app.
Tu backend crea el proceso en Human Plugin con un flujo Journey y un callbackUri que usa el esquema de URL de tu app. La app abre el link de la respuesta en una ASWebAuthenticationSession. Cuando la captura termina, la sesión regresa a la app mediante tu esquema.
Conserva el id de Human Plugin de la respuesta de la creación. Tu backend lee el resultado con él.
Requisitos previos
- iOS 13 o posterior
- Xcode 14 o posterior
- El framework
AuthenticationServices(incluido en el sistema) - Un esquema de URL único para tu app, como
myapp
1. Crea el proceso con tu esquema
Tu backend envía el esquema como callbackUri:
{
"flow": "humantoken",
"clientId": "client-a",
"correlationId": "order-1001",
"credential": { "type": "DUI_TYPE_NG_BVN", "value": "<document number>" },
"callbackUri": "myapp://callback"
}
y devuelve id y link a la app.
2. Crea el proveedor de contexto de presentación
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. Crea el gestor de sesión
import AuthenticationServices
class CaptureSessionManager {
static let shared = CaptureSessionManager()
private var session: ASWebAuthenticationSession?
private let contextProvider = CaptureContextProvider()
/// Llama a completion con true cuando la captura terminó, false cuando la persona la cerró.
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
}
}
información
callbackURLScheme recibe solo el nombre del esquema (myapp), sin ://.
4. Inicia la captura
guard let url = URL(string: link) else { return }
CaptureSessionManager.shared.start(link: url) { ended in
if ended {
// La captura terminó. Pide a tu backend que lea el resultado
// con GET /v1/processes/{id}, usando el id de Human Plugin.
} else {
// La persona cerró la sesión.
}
}
Resumen
| Archivo | Propósito |
|---|---|
CaptureContextProvider.swift | Proveedor de contexto de presentación |
CaptureSessionManager.swift | Ciclo de vida de ASWebAuthenticationSession |