> For the complete documentation index, see [llms.txt](https://docs.caf.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.caf.io/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/deprecated-sdks/faceauthenticator-deprecated.md).

# FaceAuthenticator (Obsoleto)

## **Permissões obrigatórias**

No **`info.plist`** arquivo, adicione as permissões abaixo:

<table data-header-hidden><thead><tr><th width="402"></th><th width="228.33333333333331"></th><th></th></tr></thead><tbody><tr><td><strong>Permissão</strong></td><td><strong>Motivo</strong></td><td><strong>Obrigatório?</strong></td></tr><tr><td><strong><code>Privacidade - Descrição de Uso da Câmera</code></strong></td><td>Para capturar a selfie do usuário</td><td>Sim</td></tr></tbody></table>

## **Utilização**

Primeiro, instancie um objeto do tipo **`FaceAuthenticator`**:

```swift
let faceAuthenticator = FaceAuthenticator.Builder(mobileToken: "mobileToken")
    // veja a tabela abaixo
    .build()
```

### **FaceAuthenticator.Builder**

| **Parâmetro**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | **Obrigatório?**                                                                                                                                                                               |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>String mobileToken</code></strong></p><p>Token de uso associado à sua conta CAF</p>                                                                                                                                                                                                                                                                                                                                                                                                                                          | Sim                                                                                                                                                                                            |
| <p><strong><code>.setPeopleId(\_ peopleId: String)</code></strong></p><p>Identificador do usuário no qual está registrada a face do usuário que realizará o facematch. Atualmente, esse valor aceita apenas o CPF do usuário</p>                                                                                                                                                                                                                                                                                                              | Sim                                                                                                                                                                                            |
| <p><strong><code>.setAnalyticsSettings(useAnalytics: Bool)</code></strong></p><p>Habilita/desabilita a coleta de dados para <a href="https://github.com/combateafraude/public-docs/blob/docs-sdks/analytics.md">analytics</a></p>                                                                                                                                                                                                                                                                                                             | Não. O padrão é **`true`**                                                                                                                                                                     |
| <p><strong><code>.setStabilitySensorSettings(message: String?, stabilityThreshold: Double?)</code></strong></p><p>Altera as configurações padrão do sensor de estabilidade. O limite deste sensor está na faixa das duas últimas acelerações coletadas do dispositivo.</p>                                                                                                                                                                                                                                                                    | Não. O padrão é "Mantenha o telefone parado" e 0,3, respectivamente                                                                                                                            |
| <p><strong><code>.setLayout(layout: PassiveFaceLivenessLayout)</code></strong></p><p>Altera as máscaras do documento para sucesso, falha e normal.</p><p>Também permite alterar os botões de som e cancelar, que ficam no topo da tela</p>                                                                                                                                                                                                                                                                                                    | Não                                                                                                                                                                                            |
| <p><strong><code>.setColorTheme(color: UIColor)</code></strong></p><p>Altere a cor dos botões de som e cancelar que ficam no topo da tela. Também altere a cor dos botões do popup, exibidos antes de cada documento.</p>                                                                                                                                                                                                                                                                                                                     | Não                                                                                                                                                                                            |
| <p><strong><code>.enableSound(enableSound: Bool)</code></strong></p><p>Habilita/desabilita os sons e o ícone de som no SDK</p>                                                                                                                                                                                                                                                                                                                                                                                                                | Não. O padrão é **`true`**                                                                                                                                                                     |
| <p><strong><code>.setNetworkSettings(requestTimeout:TimeInterval)</code></strong></p><p>Altere as configurações padrão de rede</p>                                                                                                                                                                                                                                                                                                                                                                                                            | Não. O padrão é 60 (segundos)                                                                                                                                                                  |
| <p><strong><code>.setImageCaptureSettings(beforePictureInterval: TimeInterval!, enableManualCapture: Bool, timeManualCapture: TimeInterval)</code></strong></p><p>Permite definir a captura por imagem. O atributo beforePictureInterval define o tempo que o usuário deve permanecer com o rosto encaixado na máscara. O <strong><code>enableManualCapture</code></strong> atributo habilita ou desabilita a captura manual. E <strong><code>timeManualCapture</code></strong> define o momento em que a captura manual será habilitada.</p> | Não. O padrão é habilitado. Para beforePictureInterval, o padrão é 2 (segundos). Para **`enableManualCapture`** o padrão é **`true`** e para **`timeManualCapture`** o padrão é 10 (segundos). |
| <p><strong><code>.setVideoCaptureSettings(time: TimeInterval)</code></strong></p><p>Método de configuração de captura de vídeo</p>                                                                                                                                                                                                                                                                                                                                                                                                            | Não                                                                                                                                                                                            |
| <p><strong><code>.setEyesClosedSettings(threshold: Double, isEnable: Bool, errorMessage: String)</code></strong></p><p>Permite personalizar as configurações de validação de olhos fechados do SDK. O método recebe como parâmetro <strong><code>isEnable</code></strong> para habilitar ou desabilitar a validação, <strong><code>limite</code></strong>, valor entre 0,0 e 1,0, e errorMessage, para definir a mensagem caso olhos fechados sejam detectados.</p>                                                                           | Não. O padrão é **`true`**, 0,5 é "Não use óculos escuros e mantenha os olhos abertos".                                                                                                        |
| <p><strong><code>.setStage(stage: CAFStage)</code></strong></p><p>Permite escolher o ambiente em que o SDK será executado (produção, beta). O método recebe como parâmetro um enum <strong><code>CAFStage</code></strong> para selecionar o ambiente:</p>                                                                                                                                                                                                                                                                                     | Não. O padrão é **`.PROD`**                                                                                                                                                                    |
| **Enum**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | **Descrição**                                                                                                                                                                                  |
| **`.PROD`**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | Usará a Trust Platform **produção** para registrar as execuções do SDK.                                                                                                                        |
| **`.BETA`**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | Usará a Trust Platform **beta** para registrar as execuções do SDK.                                                                                                                            |

{% hint style="warning" %}
Cada ambiente (beta e produção) requer seu próprio mobileToken específico, gerado na Trust Platform do respectivo ambiente.
{% endhint %}

Depois de criar o **`FaceAuthenticator`** objeto de tipo, você pode iniciar o **`FaceAuthenticatorController`** passando-o como parâmetro no construtor:

```swift
let faceAuthController = FaceAuthenticatorController(faceAuthenticator: faceAuthenticator)
faceAuthController.faceAuthenticatorDelegate = self
present(faceAuthController, animated: true, completion: nil)
```

## **Obtendo o resultado**

Para obter o resultado, você deve implementar o **`FaceAuthenticatorControllerDelegate`** delegate no seu controlador:

```swift
class YouController: UIViewController, FaceAuthenticatorControllerDelegate{
    
    // MARK: Delegados Face Auht
    
    func faceAuthenticatorController(_ faceAuthenticatorController: FaceAuthenticatorController, didFinishWithResults results: FaceAuthenticatorResult) {
        //Chamado quando o processo foi executado com sucesso
        //A variável result contém os dados obtidos
    }
    
    func faceAuthenticatorControllerDidCancel(_ faceAuthenticatorController: FaceAuthenticatorController) {
        //Chamado quando o processo foi cancelado pelo usuário
    }
    
    func faceAuthenticatorController(_ faceAuthenticatorController: FaceAuthenticatorController, didFailWithError error: FaceAuthenticatorFailure) {
        //Chamado quando o processo termina com um erro
        //A variável error contém informações sobre o erro
    }
}
```

### **FaceAuthenticatorResult**

<table data-header-hidden><thead><tr><th width="530"></th><th></th></tr></thead><tbody><tr><td><strong>Parâmetro</strong></td><td><strong>Pode ser nulo?</strong></td></tr><tr><td><p><strong><code>authenticated: Bool</code></strong></p><p>Indicador que informa se a selfie do usuário passou no facematch com a foto armazenada no servidor da CAF com o respectivo CPF</p></td><td>Não</td></tr><tr><td><p><strong><code>signedResponse: String</code></strong></p><p>Resposta assinada do servidor da CAF que realizou o facematch. Use este parâmetro se quiser uma camada extra de segurança, verificando se a assinatura da resposta não está quebrada, o que pode ser causado por uma requisição interceptada. Se estiver quebrada, há uma forte indicação de interceptação da requisição</p></td><td>Sim, em caso de erro</td></tr><tr><td><p><strong><code>trackingId: String?</code></strong></p><p>Identificador desta execução em nossos servidores. Se possível, salve este campo e envie-o para nossa API. Dessa forma, teremos mais dados sobre como o usuário se comportou durante a execução</p></td><td>Sim, se o usuário definir <strong><code>useAnalytics = false</code></strong> ou as chamadas de analytics não funcionarem</td></tr><tr><td><p><strong><code>lensFacing: Int</code></strong></p><p>Define o lado da câmera que foi usado. Use <strong><code>FaceAuthenticatorResult.LENS_FACING_FRONT</code></strong> ou <strong><code>FaceAuthenticatorResult.LENS_FACING_FRONT</code></strong> para validar.</p></td><td>Não</td></tr></tbody></table>

### **FaceAuthenticatorFailure**

Superclasse que leva ao encerramento do SDK. Para descobrir qual foi o motivo, identifique qual classe de objeto tem o **`isKindOfClass()`** método, equivalente a **`instanceof`** em Java e **`is`** em Dart:

<table data-header-hidden><thead><tr><th width="236.33333333333331"></th><th></th><th></th></tr></thead><tbody><tr><td><strong>isKindOfClass()</strong></td><td><strong>Descrição</strong></td><td><strong>Exemplo</strong></td></tr><tr><td><strong><code>InvalidTokenReason</code></strong></td><td>O token informado não é válido para o produto correspondente</td><td>Parametrize "test123" como token no builder do SDK</td></tr><tr><td><strong><code>PermissionReason</code></strong></td><td>Falta alguma permissão obrigatória para executar o SDK</td><td>Iniciar o DocumentDetector sem permissão de câmera concedida</td></tr><tr><td><strong><code>NetworkReason</code></strong></td><td>Falha na conexão com a internet</td><td>O usuário estava sem internet durante o facematch no FaceAuthenticator</td></tr><tr><td><strong><code>ServerReason</code></strong></td><td>Quando uma requisição do SDK recebe um código de status de falha</td><td>Em teoria, isso não deveria acontecer. Se acontecer, nos avise!</td></tr><tr><td><strong><code>StorageReason</code></strong></td><td>Não há espaço no armazenamento interno do dispositivo do usuário</td><td>Quando não há espaço no armazenamento interno ao capturar a foto do documento</td></tr><tr><td><strong><code>InvalidFaceReason</code></strong></td><td>Não há registro de face para o <strong><code>peopleId</code></strong></td><td>Quando o usuário se autentica com um <code>peopleId</code> que não possui registro de face</td></tr></tbody></table>

## **Exemplos**

### **Personalizando o layout**

Você pode personalizar o layout criando um objeto do tipo **`FaceAuthenticatorLayout`** e passando-o como parâmetro para o **`FaceAuthenticatorBuilder`**:

```swift
let layout = FaceAuthenticatorLayout()

layout.changeMaskImages(
    greenMask: UIImage(named: "my_green_mask"),
    whiteMask: UIImage(named: "my_white_mask"),
    redMask: UIImage(named: "my_red_mask"))

layout.changeSoundImages(soundOn: UIImage(named: "my_sound_on_image"),
                        soundOff: UIImage(named: "my_sound_off_image"))

layout.closeImage = UIImage(named: "my_close_image")
layout.buttonSize = CGFloat(50)
layout.buttonContentMode = .scaleAspectFill

let faceAuthenticatorConfiguration = FaceAuthenticatorBuilder(apiToken: "API_TOKEN")
    .setLayout(layout: layout)
    .build()
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.caf.io/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/deprecated-sdks/faceauthenticator-deprecated.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
