> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/sdks/sdk-mobile/ios-sdk/modulos/captura-de-huellas.md).

# Captura de huellas - Phingers

## Introducción <a href="#id-1-introduccion" id="id-1-introduccion"></a>

El *Componente* tratado en el documento actual recibe el nombre de ***Phingers Component***. Éste se encarga de realizar la captura de las huellas de los dedos (fingerprints) del usuario y la posterior extracción de las plantillas de las huellas posteriores. Sus principales funcionalidades son las siguientes:

* Dos modos de funcionamiento: extracción de los cuatro dedos de la mano (excepto el pulgar), o extracción únicamente del pulgar.
* Gestión interna de cámara.
* Gestión de permisos.
* Detección de vivacidad incorporada.
* Asistente en los procesos de captura de las huellas.
* Generación de las plantillas con las características de las huellas, imágenes y puntuaciones.

En el apartado de [Lanzamiento simplificado](/sdks/sdk-mobile/ios-sdk/inicializacion/lanzamiento-simplificado.md) se detallan los pasos necesarios para la integración básica del SDK. En esta sección se añade la información para el lanzamiento de este componente.

## **Dependencias**

Para evitar conflictos y problemas de compatibilidad, en caso de querer instalar el componente en un proyecto que contenga una versión antigua de las librerías de Facephi (*Widgets*), éstos deberán eliminarse por completo antes de la instalación de los componentes de la **SDKMobile**.

### Cocoapods

```sh
pod 'FPHISDKMainComponent', '~> $VERSION'
```

* Para instalar el componente actual deberá incluirse la siguiente entrada en el Podfile de la aplicación:

```sh
pod 'FPHISDKPhingersTFComponent', '~> $VERSION'
```

* Una vez instaladas las dependencias, se podrá hacer uso de las diferentes funcionalidades del componente.

### **SPM**

* Las dependencias obligatorias que deberán haberse instalado previamente son:

```swift
//HTTPS
https://github.com/facephi-clienters/SDK-SdkPackage-SPM.git
//SSH
git@github.com:facephi-clienters/SDK-SdkPackage-SPM.git
```

* Para instalar el componente de Selphid deberá incluirse en los módulos del proyecto:

<pre class="language-swift"><code class="lang-swift"><strong>//HTTPS
</strong>https://github.com/facephi-clienters/SDK-PhingersTF_Component-SPM.git
//SSH
git@github.com:facephi-clienters/SDK-PhingersTF_Component-SPM.git
</code></pre>

## Permisos

En la aplicación cliente donde se vayan a integrar los componentes es necesario incorporar el siguiente elemento en el fichero **Info.plist**:

```
Es necesario permitir el uso de la cámara (Privacy - Camera Usage Description)
```

## Controladores disponibles

<table data-header-hidden><thead><tr><th width="184.63671875"></th><th></th></tr></thead><tbody><tr><td><strong>Controlador</strong></td><td><strong>Descripción</strong></td></tr><tr><td>PhingersController</td><td>Controlador principal de captura de huellas</td></tr></tbody></table>

## Lanzamiento simplificado

```swift
let controller = PhingersController(data: phingersConfigurationData, output: { sdkResult in
        // Do whatever with the result
        ...
    }, viewController: viewController)
SDKController.shared.launch(controller: controller)

```

## Configuración básica <a href="#id-5-configuracion-basica" id="id-5-configuracion-basica"></a>

Para lanzar el componente actual, se deberá crear un objeto *PhingersConfigurationData* que será la configuración del controlador del componente.

La configuración básica necesaria para es la siguiente:

```swift
static var phingersConfiguration: PhingersConfigurationData{
   var configPhingers = PhingersConfigurationData()
   configPhingers.reticleOrientation = .LEFT
   configPhingers.fingerFilter = .SLAP
   return configPhingers
}
```

Las diferentes orientaciones son:

* LEFT
* RIGHT

Los diferentes filtros son:

* SLAP
* ALL\_4\_FINGERS\_ONE\_BY\_ONE
* ALL\_5\_FINGERS\_ONE\_BY\_ONE
* INDEX\_FINGER
* MIDDLE\_FINGER
* RING\_FINGER
* LITTLE\_FINGER
* THUMB\_FINGER

## Recepción del resultado <a href="#id-7-recepcion-del-resultado" id="id-7-recepcion-del-resultado"></a>

Los controllers devolverán la información necesaria en formato SdkResult.

### Recepción de errores <a href="#id-71-recepcion-de-errores" id="id-71-recepcion-de-errores"></a>

En la parte del error, dispondremos de la clase común *ErrorType:*

* PHG\_CANCEL\_BY\_USER: El usuario ha cancelado el proceso.
* PHG\_COMPONENT\_LICENSE\_ERROR: La licencia del componente no es correcta.
* PHG\_EMPTY\_LICENSE: El String de licencia está vacío.
* PHG\_INITIALIZATION\_ERROR: Error de inicialización.
* PHG\_INTERNAL\_ERROR: Error interno.
* PHG\_LOW\_QUALITY: Baja calidad de la imagen.
* PHG\_OPERATION\_NOT\_CREATED: No hay ninguna operación en curso.
* PHG\_CAMERA\_PERMISSION\_DENIED: El usuario ha rechazado los permisos.
* PHG\_CAMERA\_FAILURE: Fallo de la cámara.
* PHG\_FINGERPRINT\_TEMPLATE\_IO\_ERROR: Fallo IO
* PHG\_NO\_FINGERS\_DETECTED: Error en la detección de huellas
* PHG\_TIMEOUT: Timeout en el proceso.

### Recepción de ejecución correcta - *data* <a href="#id-72-recepcion-de-ejecucion-correcta-data" id="id-72-recepcion-de-ejecucion-correcta-data"></a>

En la parte de *data*, dispondremos de la clase *PhingersResult*.

El campo *data* es variable y dependerá de qué componente se ha devuelto el resultado. En el caso de este componente, los campos devueltos son los siguientes:

#### **Fingers**

**position**

Devuelve un entero que representa el elemento capturado. Este valor se establece según las instrucciones del NIST\_POS\_CODE.

**displayImage**

Contiene la imagen procesada.

**wsq**

La huella dactilar en formato WSQ.

**minutiaesNumber**

Devuelve el número de minucias encontradas en la captura biométrica.

**quality**

Entero que representa la calidad del elemento procesado.

**nistQuality**

Entero que representa la calidad del elemento procesado usando los estándares NIST.

**nist2Quality**

Entero que representa la calidad del elemento procesado usando una versión alternativa de los estándares NIST.

**livenessScore**

Contiene un valor del indicador de confianza en la captura.

**template**

Contiene la template generada.

#### **SlapImages**

**position**

Devuelve un entero que representa el elemento capturado. Este valor se establece según las instrucciones del NIST\_POS\_CODE.

**image**

Contiene la imagen procesada.

**livenessScore**

Contiene un valor del indicador de confianza en la captura.

## Información avanzada

Este apartado amplía la información del componente.

### Configuración avanzada del componente <a href="#id-71-configuracion-avanzada-del-componente" id="id-71-configuracion-avanzada-del-componente"></a>

Para lanzar el componente actual, se deberá crear un objeto *PhingersConfigurationData* que será la configuración del controlador del componente.

A continuación se detallan todos los campos que forman parte de esta clase.

**reticleOrientation**

Configura qué mano se va a proceder a capturar. Los valores permitidos son:

* **LEFT**: Activa la captura de los dedos de la mano **izquierda**.
* **RIGHT**: Activa la captura de los dedos de la mano **derecha**.

**fingerFilter**

Configura el modo de detección de huellas dactilares que se usará durante la captura. Los valores permitidos son:

* **INDEX\_FINGER**: Configura la captura con el dedo **índice**.
* **MIDDLE\_FINGER**: Configura la captura con el dedo **corazón**.
* **RING\_FINGER**: Configura la captura con el dedo **anular**.
* **LITTLE\_FINGER**: Configura la captura con el dedo **meñique**.
* **THUMB\_FINGER**: Configura la captura con el dedo **pulgar**.
* **SLAP**: Configura la captura de los **cuatro** dedos con una solo foto.
* **ALL\_4\_FINGERS\_ONE\_BY\_ONE**: Configura la captura de los **cuatro** dedos haciendo una foto por cada uno de ellos.
* **ALL\_5\_FINGERS\_ONE\_BY\_ONE**: Configura la captura de los **cinco** dedos haciendo una foto por cada uno de ellos.

**templateType**

Especifica la plantilla con la que se devolverá la huella dactilar en el resultado. El enumerado ***TemplateType*** tiene los siguientes valores posibles:

* **ISO\_TEMPLATE**: Este template hace referencia al estandar **ISO/IEC 19794-4**.
* **NIST\_TEMPLATE**: Este template hace referencia al estandar NIST.
* **NIST\_TF\_TEMPLATE**: **Este es el valor por defecto.** Este template hace referencia a una variante del estandar NIST que facilita el procesado y evaluación de la muestra.

**extractionTimeout**

Establece el tiempo máximo que se puede realizar la lectura.

**showPreviousTip**

Muestra una pantalla previa al lanzamiento de la captura con información sobre el proceso a realizar y un botón para el lanzamiento.

**showTutorial**

Indica si el componente activa la pantalla de tutorial. En esta vista se explica de forma intuitiva cómo se realiza la captura.

**vibrationEnabled**

Si se le da valor true, se activa la vibración en errores y si la respuesta del widget es OK.

**showDiagnostic**

Mostrar pantallas de diagnóstico al final del proceso.

**livenessThreshold**

Configura el umbral de **liveness** del detector de huellas. Sustituye al antiguo parámetro único **`threshold`** (desde **2.8.1**). **Valor por defecto: 0.9.**

**detectorThreshold**

Configura el umbral del **detector** de huellas. Sustituye al antiguo parámetro único **`threshold`** (desde **2.8.1**). **Valor por defecto: 0.9.**

{% hint style="warning" %}
En versiones **2.8.0** y anteriores existía un único parámetro **`threshold`** (por defecto **0.7**). Al actualizar a **2.8.1**, sustitúyelo por **`livenessThreshold`** y **`detectorThreshold`** (por defecto **0.9**).
{% endhint %}

**enableFlash**

Activa el flash durante la captura. **Valor por defecto: `false`.** Desde **2.8.1**, el flash también puede activarse de forma automática si el proceso detecta **poca luz** en la imagen para mejorar el proceso de captura, aunque el parámetro esté en `false`.

**showEllipses**

Dibuja una elipsa durante la captura cuando se detecta una posible huella.

**cropWidth & cropHeight**

Indica un ancho y alto para realizar un recorte de la captura.

**showPreviousFingerSelector**

Indica si se muestra o no la pantalla "showPreviousFingerSelector".

**fingerSelectorHandOrientation**

Indica qué opciones de mano se mostrarán en la pantalla `PreviousFingerSelectorView`.

**fingerSelectorOptions**

Indica qué opciones de dedos se mostrarán en la pantalla `PreviousFingerSelectorView`.

## Personalización del componente

Aparte de los cambios que se pueden realizar a nivel de SDK (los cuales se explican en el documento de *Personalización del SDK*), este componente en concreto permite la modificación de su interfaz.

### Textos <a href="#id-81-textos" id="id-81-textos"></a>

Los textos pueden personalizarse sobrescribiendo el valor de las siguientes claves en un **Localizable.strings**. Las claves que contienen el sufijo ***\_alt*** son los literales utilizados en las etiquetas de accesibilidad necesarias para la funcionalidad de ***VoiceOver***.

```xml
<!-- Previous Tip -->
    <string name="phingers_widget_tip_title">Captura de huellas</string>
    <string name="phingers_widget_tip_message">Coloca tu dedo dentro de la marca</string>
    <string name="phingers_widget_tip_message_alt">Coloca tu dedo dentro de la marca</string>
    <string name="phingers_widget_tip_button">Comenzar</string>
    <string name="phingers_widget_tip_button_alt">Comenzar captura de huellas</string>
    <string name="phingers_widget_tip_close_button_alt">Volver</string>
    <string name="phingers_widget_tip_info_button_alt">Ver consejos</string>
    <string name="phingers_widget_tip_anim_desc">Animación de instrucciones para la captura de huella</string>
    <!-- Previous Tip (tipos específicos) -->
    <string name="phingers_widget_tip_title_left_slap">Huellas mano izquierda</string>
    <string name="phingers_widget_tip_message_left_slap">Junta tus dedos. Acerca o aleja la mano hasta que se enfoquen tus huellas.</string>
    <string name="phingers_widget_tip_title_right_slap">Huellas mano derecha</string>
    <string name="phingers_widget_tip_message_right_slap">Junta tus dedos. Acerca o aleja la mano hasta que se enfoquen tus huellas.</string>
    <string name="phingers_widget_tip_title_left_finger">Huellas mano izquierda</string>
    <string name="phingers_widget_tip_message_left_finger">Enfoca el dedo índice en el recuadro. Acerca o aleja el dedo hasta que se enfoque tu huella.</string>
    <string name="phingers_widget_tip_title_right_finger">Huellas mano derecha</string>
    <string name="phingers_widget_tip_message_right_finger">Enfoca el dedo índice en el recuadro. Acerca o aleja el dedo hasta que se enfoque tu huella.</string>
    <string name="phingers_widget_tip_title_thumb">Huella dedo pulgar</string>
    <string name="phingers_widget_tip_message_thumb">Enfoca el dedo pulgar en el recuadro. Acerca o aleja el dedo hasta que se enfoque tu huella.</string>
    <!-- Selector de dedos -->
    <string name="phingers_widget_selector_hand_question">¿Qué mano utilizarás?</string>
    <string name="phingers_widget_selector_hand_left">Izquierda</string>
    <string name="phingers_widget_selector_hand_right">Derecha</string>
    <string name="phingers_widget_selector_secondary_question">¿Qué huellas quieres escanear?</string>
    <string name="phingers_widget_selector_option_index">Dedo índice</string>
    <string name="phingers_widget_selector_option_middle">Dedo corazón</string>
    <string name="phingers_widget_selector_option_ring">Dedo anular</string>
    <string name="phingers_widget_selector_option_little">Dedo meñique</string>
    <string name="phingers_widget_selector_option_thumb">Dedo pulgar</string>
    <string name="phingers_widget_selector_option_all4">4 dedos (índice, corazón, anular y meñique)</string>
    <string name="phingers_widget_selector_option_all4_sequence">4 dedos (uno a uno)</string>
    <string name="phingers_widget_selector_option_all5_sequence">5 dedos (uno a uno)</string>
    <string name="phingers_widget_selector_primary_button">Continuar</string>
    <!-- Capture -->
    <string name="phingers_widget_capture_close_button_alt">Volver</string>
    <!-- Tutorial -->
    <string name="phingers_widget_tutorial_message_1">Coloca tu cara en el centro y mira de frente a la cámara.</string>
    <string name="phingers_widget_tutorial_message_2">Retira cualquier elemento que cubra tu cara.</string>
    <string name="phingers_widget_tutorial_message_3">Busca un entorno bien iluminado, sin sombras sobre tu rostro.</string>
    <string name="phingers_widget_tutorial_message_1_anim_desc">La foto se realiza cuando la persona está en el centro.</string>
    <string name="phingers_widget_tutorial_message_2_anim_desc">Una persona se quita las gafas de sol y se retira el pelo de los ojos.</string>
    <string name="phingers_widget_tutorial_message_3_anim_desc">La imagen aparece oscura y una persona enciende la luz.</string>
    <string name="phingers_widget_tutorial_close_button_alt">Volver al tutorial previo</string>
    <!-- Confirmation -->
    <string name="phingers_widget_image_captured">Imagen capturada</string>
    <string name="phingers_widget_confirmation_message">¿Tu foto se ve de forma clara y nítida?</string>
    <string name="phingers_widget_confirmation_retry">Reintentar</string>
    <string name="phingers_widget_confirmation_continue">Continuar</string>

    <!-- Camera status (ES) -->
    <string name="phingers_widget_camera_status_position_fingers">Coloca tus dedos dentro de la marca</string>
    <string name="phingers_widget_camera_status_processing">Procesando…</string>
    <string name="phingers_widget_camera_status_too_far">Acerca la mano</string>
    <string name="phingers_widget_camera_status_too_close">Aleja la mano</string>
    <string name="phingers_widget_camera_status_low_focus">Mueve el dedo para enfocar</string>
    <string name="phingers_widget_camera_status_good_focus">Mantén el dedo quieto</string>
    <string name="phingers_widget_camera_status_wrong_angle">Coloca el dedo en vertical</string>
    <string name="phingers_widget_camera_status_too_few">No se ha detectado el dedo</string>
    <string name="phingers_widget_camera_status_too_many">Varios dedos detectados</string>
    <string name="phingers_widget_camera_status_wrong_hand_left">Debes poner el dedo de la mano izquierda</string>
    <string name="phingers_widget_camera_status_wrong_hand_right">Debes poner el dedo de la mano derecha</string>
    <string name="phingers_widget_camera_status_error">Error en la captura</string>
    <string name="phingers_widget_camera_status_timeout">Tiempo de captura agotado</string>
    <string name="phingers_widget_camera_status_success">¡Huella capturada!</string>
    <string name="phingers_widget_camera_status_keep_hand_steady">Mantén tu mano firme</string>
    <string name="phingers_widget_timeout_desc">La captura ha superado el tiempo. Inténtalo de nuevo.</string>

    <!-- Dynamic finger hint (ES) -->
    <!-- %1$s = lado (izquierdo/derecho), %2$s = dedo (índice/medio/anular/meñique/pulgar) -->
    <string name="phingers_widget_hint_place_finger_mark">Coloca tu %2$s %1$s dentro de la marca</string>
    <string name="phingers_widget_side_left">izquierdo</string>
    <string name="phingers_widget_side_right">derecho</string>
    <string name="phingers_widget_finger_index">índice</string>
    <string name="phingers_widget_finger_middle">medio</string>
    <string name="phingers_widget_finger_ring">anular</string>
    <string name="phingers_widget_finger_little">meñique</string>
    <string name="phingers_widget_finger_thumb">pulgar</string>
```

De este modo, si se desea modificar por ejemplo el texto “*Comenzar*” de la clave `phingers_widget_tip_button` para el idioma **es**, se deberá ir al archivo **Localizable.strings** de la carpeta **es.lproj** si es que existe (si no, se deberá crear) y ahí, añadir:

`"phingers_widget_tip_button"="Start";`

Si un mensaje no se especifica en el fichero del idioma, este se rellenará con el mensaje por defecto.

## Animaciones

Si se desea modificar las animaciones (lottie) de la SDK habría que incluir las animaciones con el mismo nombre en la carpeta Resources de la aplicació.

```
phingers_anim_left_finger
phingers_anim_left
phingers_anim_right_finger
phingers_anim_right
phingers_anim_thumb_right
phingers_anim_thumb_left
```
