---
title: Liveness (selfie biométrica)
description: Captura de selfie biométrica con verificación de liveness integrada, que devuelve el frame capturado en Base64 y JWT.
canonical: https://developer.unico.io/es/dual-api/developers/sdks-and-tools/ios/capture-flow/capture-types/liveness
locale: es
generated_by: markdown-export
---

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.

:::secondary[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:

### Swift

  ```swift
  unicoCheck.setSmartFrame(true)
  unicoCheck.setAutoCapture(true)
  ```

### Objective-C

  ```objectivec
  [unicoCheck setSmartFrame:true];
  [unicoCheck setAutoCapture:true];
  ```

## Iniciar una captura de liveness

****Paso 2** — Implementar `SelfieCameraDelegate` y `AcessoBioSelfieDelegate`**

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

  | Método | Descripció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 |

  :::warning[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**.
  :::

  ### Swift

    ```swift
    class ViewController: UIViewController, AcessoBioManagerDelegate,
      SelfieCameraDelegate, AcessoBioSelfieDelegate {

      func onSuccessSelfie(_ result: SelfieResult!) { }
      func onErrorSelfie(_ errorBio: ErrorBio!) { }
    }
    ```

### Objective-C

    ```objectivec
    // .h
    @interface ViewController: UIViewController <AcessoBioManagerDelegate,
      SelfieCameraDelegate, AcessoBioSelfieDelegate> {
      AcessoBioManager *unicoCheck;
    }

    // .m
    - (void)onSuccessSelfie:(SelfieResult *)result {
        NSLog(@"%@", result.base64);
    }

    - (void)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`).

  ### Swift

    ```swift
    @IBAction func openCamera(_ sender: Any) {
      unicoCheck.build().prepareSelfieCamera(self, config: YourUnicoConfigClass())
    }

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

    func onCameraFailed(_ message: ErrorPrepare!) { }
    ```

### Objective-C

    ```objectivec
    - (IBAction)openCamera:(UIButton *)sender {
        [[unicoCheck build] prepareSelfieCamera:self config:[YourUnicoConfigClass new]];
    }

    - (void)onCameraReady:(id)cameraOpener {
        [cameraOpener open:self];
    }

    - (void)onCameraFailed:(ErrorPrepare *)message { }
    ```

Para el manejo completo del resultado, consulte [Recibiendo el resultado](/developers/sdks-and-tools/ios/capture-flow/receiving-the-result).