> 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/docs.facephi-pt-br/sdks/sdk-mobile/ios-sdk/modulos/captura-de-huellas.md).

# Captura de Impressão Digital - Phingers

## Introdução <a href="#id-1-introduccion" id="id-1-introduccion"></a>

O *Componente* tratado no documento atual recebe o nome de ***Phingers Component***. Ele é responsável por realizar a captura das impressões digitais dos dedos (fingerprints) do usuário e a posterior extração dos templates das impressões digitais subsequentes. Suas principais funcionalidades são as seguintes:

* Dois modos de funcionamento: extração dos quatro dedos da mão (exceto o polegar) ou extração apenas do polegar.
* Gerenciamento interno da câmera.
* Gerenciamento de permissões.
* Detecção de vivacidade incorporada.
* Assistente nos processos de captura das impressões digitais.
* Geração dos templates com as características das impressões digitais, imagens e pontuações.

Na seção de [Lançamento simplificado](/docs.facephi-pt-br/sdks/sdk-mobile/ios-sdk/inicializacion/lanzamiento-simplificado.md) são detalhados os passos necessários para a integração básica do SDK. Nesta seção é adicionada a informação para o lançamento deste componente.

## **Dependências**

Para evitar conflitos e problemas de compatibilidade, caso se queira instalar o componente em um projeto que contenha uma versão antiga das bibliotecas da Facephi (*Widgets*), eles deverão ser removidos completamente antes da instalação dos componentes da **SDKMobile**.

### CocoaPods

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

* Para instalar o componente atual, deverá ser incluída a seguinte entrada no Podfile da aplicação:

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

* Uma vez instaladas as dependências, será possível fazer uso das diferentes funcionalidades do componente.

### **SPM**

* As dependências obrigatórias que deverão ter sido instaladas previamente são:

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

* Para instalar o componente de Selphid, deverá ser incluído nos módulos do projeto:

<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>

## Permissões

Na aplicação cliente onde os componentes forem integrados, é necessário incorporar o seguinte elemento no arquivo **Info.plist**:

```
É necessário permitir o uso da câmera (Privacy - Camera Usage Description)
```

## Controladores disponíveis

<table data-header-hidden><thead><tr><th width="184.63671875"></th><th></th></tr></thead><tbody><tr><td><strong>Controlador</strong></td><td><strong>Descrição</strong></td></tr><tr><td>PhingersController</td><td>Controlador principal de captura de impressões digitais</td></tr></tbody></table>

## Lançamento simplificado

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

```

## Configuração básica <a href="#id-5-configuracion-basica" id="id-5-configuracion-basica"></a>

Para lançar o componente atual, deverá ser criado um objeto *PhingersConfigurationData* que será a configuração do controlador do componente.

A configuração básica necessária é a seguinte:

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

As diferentes orientações são:

* LEFT
* RIGHT

Os diferentes filtros são:

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

## Recebimento do resultado <a href="#id-7-recepcion-del-resultado" id="id-7-recepcion-del-resultado"></a>

Os controllers devolverão a informação necessária no formato SdkResult.

### Recebimento de erros <a href="#id-71-recepcion-de-errores" id="id-71-recepcion-de-errores"></a>

Na parte do erro, teremos a classe comum *ErrorType:*

* PHG\_CANCEL\_BY\_USER: O usuário cancelou o processo.
* PHG\_COMPONENT\_LICENSE\_ERROR: A licença do componente não está correta.
* PHG\_EMPTY\_LICENSE: O String da licença está vazia.
* PHG\_INITIALIZATION\_ERROR: Erro de inicialização.
* PHG\_INTERNAL\_ERROR: Erro interno.
* PHG\_LOW\_QUALITY: Baixa qualidade da imagem.
* PHG\_OPERATION\_NOT\_CREATED: Não há nenhuma operação em andamento.
* PHG\_CAMERA\_PERMISSION\_DENIED: O usuário recusou as permissões.
* PHG\_CAMERA\_FAILURE: Falha da câmera.
* PHG\_FINGERPRINT\_TEMPLATE\_IO\_ERROR: Falha de I/O
* PHG\_NO\_FINGERS\_DETECTED: Erro na detecção de impressões digitais
* PHG\_TIMEOUT: Timeout no processo.

### Recebimento de execução correta - *data* <a href="#id-72-recepcion-de-ejecucion-correcta-data" id="id-72-recepcion-de-ejecucion-correcta-data"></a>

Na parte de *data*, teremos a classe *PhingersResult*.

O campo *data* é variável e dependerá de qual componente devolveu o resultado. No caso deste componente, os campos devolvidos são os seguintes:

#### **Fingers**

**position**

Retorna um inteiro que representa o elemento capturado. Este valor é definido de acordo com as instruções do NIST\_POS\_CODE.

**displayImage**

Contém a imagem processada.

**wsq**

A impressão digital em formato WSQ.

**minutiaesNumber**

Retorna o número de minúcias encontradas na captura biométrica.

**quality**

Inteiro que representa a qualidade do elemento processado.

**nistQuality**

Inteiro que representa a qualidade do elemento processado usando os padrões NIST.

**nist2Quality**

Inteiro que representa a qualidade do elemento processado usando uma versão alternativa dos padrões NIST.

**livenessScore**

Contém um valor do indicador de confiança na captura.

**template**

Contém o template gerado.

#### **SlapImages**

**position**

Retorna um inteiro que representa o elemento capturado. Este valor é definido de acordo com as instruções do NIST\_POS\_CODE.

**image**

Contém a imagem processada.

**livenessScore**

Contém um valor do indicador de confiança na captura.

## Informações avançadas

Esta seção amplia as informações do componente.

### Configuração avançada do componente <a href="#id-71-configuracion-avanzada-del-componente" id="id-71-configuracion-avanzada-del-componente"></a>

Para lançar o componente atual, deverá ser criado um objeto *PhingersConfigurationData* que será a configuração do controlador do componente.

A seguir, são detalhados todos os campos que fazem parte desta classe.

**reticleOrientation**

Configura qual mão será capturada. Os valores permitidos são:

* **LEFT**: Ativa a captura dos dedos da mão **esquerda**.
* **RIGHT**: Ativa a captura dos dedos da mão **direita**.

**fingerFilter**

Configura o modo de detecção de impressões digitais que será usado durante a captura. Os valores permitidos são:

* **INDEX\_FINGER**: Configura a captura com o dedo **indicador**.
* **MIDDLE\_FINGER**: Configura a captura com o dedo **médio**.
* **RING\_FINGER**: Configura a captura com o dedo **anelar**.
* **LITTLE\_FINGER**: Configura a captura com o dedo **mindinho**.
* **THUMB\_FINGER**: Configura a captura com o dedo **polegar**.
* **SLAP**: Configura a captura dos **quatro** dedos com uma só foto.
* **ALL\_4\_FINGERS\_ONE\_BY\_ONE**: Configura a captura dos **quatro** dedos fazendo uma foto para cada um deles.
* **ALL\_5\_FINGERS\_ONE\_BY\_ONE**: Configura a captura dos **cinco** dedos fazendo uma foto para cada um deles.

**templateType**

Especifica o template com o qual a impressão digital será devolvida no resultado. O enumerado ***TemplateType*** tem os seguintes valores possíveis:

* **ISO\_TEMPLATE**: Este template faz referência ao padrão **ISO/IEC 19794-4**.
* **NIST\_TEMPLATE**: Este template faz referência ao padrão NIST.
* **NIST\_TF\_TEMPLATE**: **Este é o valor padrão.** Este template faz referência a uma variante do padrão NIST que facilita o processamento e a avaliação da amostra.

**extractionTimeout**

Define o tempo máximo que a leitura pode durar.

**showPreviousTip**

Mostra uma tela prévia ao lançamento da captura com informações sobre o processo a ser realizado e um botão para o lançamento.

**showTutorial**

Indica se o componente ativa a tela de tutorial. Nesta visualização é explicado de forma intuitiva como a captura é realizada.

**vibrationEnabled**

Se receber o valor true, a vibração é ativada em erros e quando a resposta do widget é OK.

**showDiagnostic**

Mostrar telas de diagnóstico ao final do processo.

**livenessThreshold**

Configura o limiar de **liveness** do detector de impressões digitais. Substitui o antigo parâmetro único **`threshold`** (desde **2.8.1**). **Valor padrão: 0,9.**

**detectorThreshold**

Configura o limiar do **detector** de impressões digitais. Substitui o antigo parâmetro único **`threshold`** (desde **2.8.1**). **Valor padrão: 0,9.**

{% hint style="warning" %}
Nas versões **2.8.0** e anteriores existia um único parâmetro **`threshold`** (por padrão **0.7**). Ao atualizar para **2.8.1**, substitua-o por **`livenessThreshold`** e **`detectorThreshold`** (por padrão **0.9**).
{% endhint %}

**enableFlash**

Ativa o flash durante a captura. **Valor padrão: `false`.** A partir de **2.8.1**, o flash também pode ser ativado automaticamente se o processo detectar **pouca luz** na imagem para melhorar o processo de captura, embora o parâmetro esteja em `false`.

**showEllipses**

Desenha uma elipse durante a captura quando uma possível impressão digital é detectada.

**cropWidth & cropHeight**

Indica uma largura e altura para realizar um recorte da captura.

**showPreviousFingerSelector**

Indica se a tela "showPreviousFingerSelector" é exibida ou não.

**fingerSelectorHandOrientation**

Indica quais opções de mão serão mostradas na tela `PreviousFingerSelectorView`.

**fingerSelectorOptions**

Indica quais opções de dedos serão mostradas na tela `PreviousFingerSelectorView`.

## Personalização do componente

Além das mudanças que podem ser feitas no nível do SDK (as quais são explicadas no documento de *Personalização do SDK*), este componente em específico permite a modificação de sua interface.

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

Os textos podem ser personalizados sobrescrevendo o valor das seguintes chaves em um **Localizable.strings**. As chaves que contêm o sufixo ***\_alt*** são os literais utilizados nas etiquetas de acessibilidade necessárias para a funcionalidade de ***VoiceOver***.

```xml
<!-- Previous Tip -->
    <string name="phingers_widget_tip_title">Captura de Impressão Digital</string>
    <string name="phingers_widget_tip_message">Coloque seu dedo dentro da marca</string>
    <string name="phingers_widget_tip_message_alt">Coloque seu dedo dentro da marca</string>
    <string name="phingers_widget_tip_button">Começar</string>
    <string name="phingers_widget_tip_button_alt">Começar captura de impressões digitais</string>
    <string name="phingers_widget_tip_close_button_alt">Voltar</string>
    <string name="phingers_widget_tip_info_button_alt">Ver dicas</string>
    <string name="phingers_widget_tip_anim_desc">Animação de instruções para a captura da impressão digital</string>
    <!-- Previous Tip (tipos específicos) -->
    <string name="phingers_widget_tip_title_left_slap">Impressões digitais da mão esquerda</string>
    <string name="phingers_widget_tip_message_left_slap">Junte os dedos. Aproxime ou afaste a mão até que suas impressões digitais fiquem em foco.</string>
    <string name="phingers_widget_tip_title_right_slap">Impressões digitais da mão direita</string>
    <string name="phingers_widget_tip_message_right_slap">Junte os dedos. Aproxime ou afaste a mão até que suas impressões digitais fiquem em foco.</string>
    <string name="phingers_widget_tip_title_left_finger">Impressões digitais da mão esquerda</string>
    <string name="phingers_widget_tip_message_left_finger">Posicione o dedo indicador no quadro. Aproxime ou afaste o dedo até que sua impressão digital fique em foco.</string>
    <string name="phingers_widget_tip_title_right_finger">Impressões digitais da mão direita</string>
    <string name="phingers_widget_tip_message_right_finger">Posicione o dedo indicador no quadro. Aproxime ou afaste o dedo até que sua impressão digital fique em foco.</string>
    <string name="phingers_widget_tip_title_thumb">Impressão digital do dedo polegar</string>
    <string name="phingers_widget_tip_message_thumb">Posicione o dedo polegar no quadro. Aproxime ou afaste o dedo até que sua impressão digital fique em foco.</string>
    <!-- Selector de dedos -->
    <string name="phingers_widget_selector_hand_question">Qual mão você usará?</string>
    <string name="phingers_widget_selector_hand_left">Esquerda</string>
    <string name="phingers_widget_selector_hand_right">Direita</string>
    <string name="phingers_widget_selector_secondary_question">Quais impressões digitais você quer escanear?</string>
    <string name="phingers_widget_selector_option_index">Dedo indicador</string>
    <string name="phingers_widget_selector_option_middle">Dedo médio</string>
    <string name="phingers_widget_selector_option_ring">Dedo anelar</string>
    <string name="phingers_widget_selector_option_little">Dedo mindinho</string>
    <string name="phingers_widget_selector_option_thumb">Dedo polegar</string>
    <string name="phingers_widget_selector_option_all4">4 dedos (indicador, médio, anelar e mindinho)</string>
    <string name="phingers_widget_selector_option_all4_sequence">4 dedos (um a um)</string>
    <string name="phingers_widget_selector_option_all5_sequence">5 dedos (um a um)</string>
    <string name="phingers_widget_selector_primary_button">Continuar</string>
    <!-- Capture -->
    <string name="phingers_widget_capture_close_button_alt">Voltar</string>
    <!-- Tutorial -->
    <string name="phingers_widget_tutorial_message_1">Coloque seu rosto no centro e olhe de frente para a câmera.</string>
    <string name="phingers_widget_tutorial_message_2">Remova qualquer elemento que cubra seu rosto.</string>
    <string name="phingers_widget_tutorial_message_3">Busque um ambiente bem iluminado, sem sombras sobre seu rosto.</string>
    <string name="phingers_widget_tutorial_message_1_anim_desc">A foto é tirada quando a pessoa está no centro.</string>
    <string name="phingers_widget_tutorial_message_2_anim_desc">Uma pessoa tira os óculos de sol e afasta o cabelo dos olhos.</string>
    <string name="phingers_widget_tutorial_message_3_anim_desc">A imagem aparece escura e uma pessoa acende a luz.</string>
    <string name="phingers_widget_tutorial_close_button_alt">Voltar ao tutorial anterior</string>
    <!-- Confirmation -->
    <string name="phingers_widget_image_captured">Imagem capturada</string>
    <string name="phingers_widget_confirmation_message">Sua foto está clara e nítida?</string>
    <string name="phingers_widget_confirmation_retry">Tentar novamente</string>
    <string name="phingers_widget_confirmation_continue">Continuar</string>

    <!-- Camera status (ES) -->
    <string name="phingers_widget_camera_status_position_fingers">Coloque seus dedos dentro da marca</string>
    <string name="phingers_widget_camera_status_processing">Processando…</string>
    <string name="phingers_widget_camera_status_too_far">Aproxime a mão</string>
    <string name="phingers_widget_camera_status_too_close">Afaste a mão</string>
    <string name="phingers_widget_camera_status_low_focus">Mova o dedo para focar</string>
    <string name="phingers_widget_camera_status_good_focus">Mantenha o dedo parado</string>
    <string name="phingers_widget_camera_status_wrong_angle">Posicione o dedo na vertical</string>
    <string name="phingers_widget_camera_status_too_few">O dedo não foi detectado</string>
    <string name="phingers_widget_camera_status_too_many">Vários dedos detectados</string>
    <string name="phingers_widget_camera_status_wrong_hand_left">Você deve colocar o dedo da mão esquerda</string>
    <string name="phingers_widget_camera_status_wrong_hand_right">Você deve colocar o dedo da mão direita</string>
    <string name="phingers_widget_camera_status_error">Erro na captura</string>
    <string name="phingers_widget_camera_status_timeout">Tempo de captura esgotado</string>
    <string name="phingers_widget_camera_status_success">Impressão digital capturada!</string>
    <string name="phingers_widget_camera_status_keep_hand_steady">Mantenha sua mão firme</string>
    <string name="phingers_widget_timeout_desc">A captura excedeu o tempo limite. Tente novamente.</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">Coloque seu %2$s %1$s dentro da marca</string>
    <string name="phingers_widget_side_left">esquerdo</string>
    <string name="phingers_widget_side_right">direito</string>
    <string name="phingers_widget_finger_index">indicador</string>
    <string name="phingers_widget_finger_middle">médio</string>
    <string name="phingers_widget_finger_ring">anelar</string>
    <string name="phingers_widget_finger_little">mindinho</string>
    <string name="phingers_widget_finger_thumb">polegar</string>
```

Dessa forma, se desejar modificar, por exemplo, o texto “*Começar*” da chave `phingers_widget_tip_button` para o idioma **es**, deverá-se ir ao arquivo **Localizable.strings** da pasta **es.lproj** se ele existir (se não, deverá ser criado) e, então, adicionar:

`"phingers_widget_tip_button"="Start";`

Se uma mensagem não for especificada no arquivo do idioma, ela será preenchida com a mensagem padrão.

## Animações

Se desejar modificar as animações (lottie) do SDK, seria necessário incluir as animações com o mesmo nome na pasta Resources da aplicação.

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