Saltar al contenido principal
Captura en iOS

Abre la captura en una sesión de navegador del sistema y devuelve a la persona a tu app.

Markdown

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​

ArchivoPropósito
CaptureContextProvider.swiftProveedor de contexto de presentación
CaptureSessionManager.swiftCiclo de vida de ASWebAuthenticationSession