Saltar al contenido principal

Liveness (selfie biométrica)

Captura de selfie biométrica con verificación de liveness integrada. El SDK guía al usuario hasta obtener un frame biométricamente válido mediante SmartFrames y devuelve la imagen en Base64 + JWT.

Capability

Este tipo de captura utiliza la capability Liveness. Para una descripción conceptual de cómo funciona Liveness, consulta la página de la capability Liveness.

Cómo funciona

El SDK gestiona la sesión de captura completa:

  1. Abre la cámara con el overlay de SmartFrame.
  2. Guía al usuario para que posicione su rostro dentro del frame.
  3. Valida el liveness — la sesión solo se completa cuando el usuario está físicamente presente.
  4. Devuelve un objeto SelfieResult (alias ResultCamera) con base64 y encrypted (JWT).
Modo de cámara (captura inteligente)

El SDK tiene el encuadre inteligente y la captura automática habilitados por defecto. Configura el modo de cámara en tu builder de la siguiente manera:

unicoCheck.setSmartFrame(true)
unicoCheck.setAutoCapture(true)
Iniciar una captura de liveness
Paso 1 — Implementar AcessoBioManagerDelegate

AcessoBioManagerDelegate gestiona los callbacks del ciclo de vida del SDK. Implementa los cuatro métodos obligatorios:

MétodoCuándo se llama
onErrorAcessoBioManager(error)Ocurrió un error durante la operación del SDK
onUserClosedCameraManually()El usuario cerró la cámara manualmente
onSystemClosedCameraTimeoutSession()Se alcanzó el límite de sesión de 40 segundos
onSystemChangedTypeCameraTimeoutFaceInference()No se detectó ningún rostro durante 13 segundos — cambia a captura manual
class ViewController: UIViewController, AcessoBioManagerDelegate {
var unicoCheck: AcessoBioManager!

override func viewDidLoad() {
super.viewDidLoad()
unicoCheck = AcessoBioManager(viewController: self)
}

func onErrorAcessoBioManager(_ error: ErrorBio!) { }
func onUserClosedCameraManually() { }
func onSystemClosedCameraTimeoutSession() { }
func onSystemChangedTypeCameraTimeoutFaceInference() { }
}
Métodos de delegate obligatorios

Los cuatro métodos de delegate mencionados anteriormente deben crearse en tu proyecto (aunque no tengan ninguna lógica). De lo contrario, el proyecto no compilará correctamente.

Paso 2 — Implementar SelfieCameraDelegate y AcessoBioSelfieDelegate

Estos delegates gestionan los callbacks del resultado de la captura de selfie:

MétodoDescripción
onSuccessSelfie(result)Captura exitosa — devuelve SelfieResult con base64 (vista previa) y encrypted (JWT para la API)
onErrorSelfie(errorBio)Captura fallida — devuelve un ErrorBio con código y descripción
Expiración del token

El intervalo entre la generación de encrypted y su envío a la API no debe superar los 10 minutos.

class ViewController: UIViewController, AcessoBioManagerDelegate,
SelfieCameraDelegate, AcessoBioSelfieDelegate {

func onSuccessSelfie(_ result: SelfieResult!) { }
func onErrorSelfie(_ errorBio: ErrorBio!) { }
}
Paso 3 — Llamar a prepareSelfieCamera y open

Llama a prepareSelfieCamera pasando la configuración del SDK. Cuando la cámara esté lista, el evento onCameraReady se dispara con un AcessoBioCameraOpenerDelegate — abre la cámara mediante el método open():

  • onCameraReady(cameraOpener) — la cámara está lista; llama a open(self).
  • onCameraFailed(message) — la preparación de la cámara falló (ErrorPrepare es una extensión de ErrorBio).
@IBAction func openCamera(_ sender: Any) {
unicoCheck.build().prepareSelfieCamera(self, config: YourUnicoConfigClass())
}

func onCameraReady(_ cameraOpener: AcessoBioCameraOpenerDelegate!) {
cameraOpener.open(self)
}

func onCameraFailed(_ message: ErrorPrepare!) { }
Recopilación de datos de monitoreo

El método prepareSelfieCamera ofrece una sobrecarga que acepta metadatos mediante PrepareInfo para facilitar la identificación de la sesión del usuario y el flujo:

  • externalUserId (String, obligatorio) — Identificador del usuario en tu sistema. Se aplica automáticamente un hash SHA-256 antes de la transmisión.
  • useCase (String, opcional) — Identificador del contexto o flujo en ejecución (p. ej., "account_opening", "password_recovery"). Se transmite en texto plano.
let prepareInfo = PrepareInfo(
externalUserId: "external_user_id",
useCase: "use_case"
)
unicoCheck.build().prepareSelfieCamera(
self,
config: YourUnicoConfigClass(),
prepareInfo: prepareInfo
)

Para el manejo completo del resultado, consulta Recibir el resultado.