> 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/passivefaceliveness.md).

# PassiveFaceLiveness (Obsoleto)

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

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

| **Permissão**                                  | **Motivo**                        | **Obrigatório?** |
| ---------------------------------------------- | --------------------------------- | ---------------- |
| **`Privacidade - Descrição de Uso da Câmera`** | Para capturar a selfie do usuário | Sim              |

## **Utilização**

Primeiro, instancie um objeto do tipo \*\* `PassiveFaceLiveness`:\*\*

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

### **PassiveFaceLiveness.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 com a finalidade de identificar um perfil fraudulento</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | Não, é usado apenas para [analytics](https://github.com/combateafraude/public-docs/blob/docs-sdks/analytics.md)                                                                                      |
| <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 celular parado" e 1,5, respectivamente                                                                                                                                   |
| <p><strong><code>.setCaptureSettings( beforePictureInterval: TimeInterval?)</code></strong></p><p>Altera as configurações usadas para capturar a selfie. O parâmetro indica o tempo em milissegundos entre o enquadramento correto do rosto e a captura real da foto.</p>                                                                                                                                                                                                                                                                                                                                                                                                  | Não. O padrão é 2,0                                                                                                                                                                                  |
| <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 na parte superior 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>.showStepLabel(show: Bool)</code></strong></p><p>Mostrar/ocultar o rótulo central inferior (que contém o nome do documento)</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | Não. O padrão é **`true`**                                                                                                                                                                           |
| <p><strong><code>.showStatusLabel(show: Bool)</code></strong></p><p>Mostrar/ocultar o rótulo central (que contém o status)</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>.setProxySettings(proxySettings: ProxySettings?)</code></strong></p><p>Define as configurações do proxy, conforme explicado <a href="https://github.com/combateafraude/public-docs/blob/docs-sdks/ios/configurations/proxy-configuration.md">aqui</a></p>                                                                                                                                                                                                                                                                                                                                                                                                 | Não. O padrão é **`nil`**                                                                                                                                                                            |
| <p><strong><code>.showPreview(\_ show: Bool, title: String?, subtitle: String?, confirmLabel: String?, retryLabel: String?)</code></strong></p><p>Ativa/desativa a pré-visualização da captura. Se <strong><code>mostrar</code></strong> tem <strong><code>true</code></strong>, após cada captura, o SDK fornece uma tela para o usuário aprovar ou refazer a captura. Para os demais parâmetros, informe <code>nil</code> para usar o valor padrão ou uma String para um texto personalizado.</p>                                                                                                                                                                        | Não. O padrão é **`false`**                                                                                                                                                                          |
| <p><strong><code>.setCompressSettings(compressionQuality: CGFloat)</code></strong></p><p>Permite definir a qualidade no processo de compressão. Por padrão, todas as capturas são comprimidas. O método espera valores entre 0 e 1,0 como parâmetros, sendo 1,0 a melhor qualidade de compressão (recomendada).</p>                                                                                                                                                                                                                                                                                                                                                        | Não. O padrão é 1.0                                                                                                                                                                                  |
| <p><strong><code>.setMessageSettings(waitMessage: String?, stepName: String?, faceNotFoundMessage: String?, faceTooFarMessage: String?, faceNotFittedMessage: String?, holdItMessage: String?, invalidFaceMessage: String?, multipleFaceDetectedMessage: String?, sensorStabilityMessage: String?, verifyingLivenessMessage: String?, eyesClosedMessage: String?)</code></strong></p><p>Permite personalizar as mensagens exibidas no balão de "status" durante o processo de captura e análise.</p>                                                                                                                                                                       | Não. O padrão é [este](#messagesettings)                                                                                                                                                             |
| <p><strong><code>.setPersonCPF(personCPF: String)</code></strong></p><p>Vincula uma tentativa de prova de vida a um CPF</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | Não. O padrão é **`nil`**                                                                                                                                                                            |
| <p><strong><code>.setPersonName(personName: String)</code></strong></p><p>Vincula uma tentativa de prova de vida a um nome</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | Não. O padrão é **`nil`**                                                                                                                                                                            |
| <p><strong><code>.setManualCaptureSettings(enable: Bool, time: TimeInterval)</code></strong></p><p>Habilita/desabilita a captura manual. O <strong><code>tempo</code></strong> parâmetro define o tempo para que o modo de captura seja habilitado.</p>                                                                                                                                                                                                                                                                                                                                                                                                                    | Não. O padrão é desativado                                                                                                                                                                           |
| <p><strong><code>.enableMultiLanguage(\_ enable: Bool)</code></strong></p><p>Habilitar/desabilitar suporte a vários idiomas</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | Não. O padrão é habilitado                                                                                                                                                                           |
| <p><strong><code>.setVideoCaptureSettings(time: TimeInterval)</code></strong></p><p>Permite habilitar e configurar a captura de vídeo.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | Não. O padrão é desativado                                                                                                                                                                           |
| <p><strong><code>.setGetImageUrlExpireTime(expireTime: String)</code></strong></p><p>Define por quanto tempo a URL da imagem ficará disponível no servidor até expirar. Espere receber um intervalo de tempo entre "30m" e "30d".</p><p>Exemplos:</p><ul><li><strong><code>setGetImageUrlExpireTime("30m")</code></strong>: Para definir apenas minutos</li><li><strong><code>setGetImageUrlExpireTime("24h")</code></strong>: Para definir apenas hora(s)</li><li><strong><code>setGetImageUrlExpireTime("1h 10m")</code>:</strong> Para definir hora(s) e minuto(s)</li><li><strong><code>setGetImageUrlExpireTime("10d")</code>:</strong> Para definir dia(s)</li></ul> | Não. O padrão é **`3h`**                                                                                                                                                                             |
| <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 é **`false`** e para **`timeManualCapture`** o padrão é 20 (segundos). |
| <p><strong><code>.setMask(type: MaskType)</code></strong></p><p>Define o tipo de máscara usado nas capturas. Há três tipos:</p><ul><li><strong><code>.standard</code></strong>, com o padrão pontilhado no formato do documento;</li><li><code>.</code><strong><code>vazia</code></strong>, que remove completamente a máscara.</li></ul>                                                                                                                                                                                                                                                                                                                                  | Não. O padrão é `.`**`padrão`**                                                                                                                                                                      |
| <p><strong><code>.setCurrentStepDoneDelay(currentStepDoneDelay: TimeInterval)</code></strong></p><p>Atrasa a atividade após a conclusão de cada etapa. Este método pode ser usado para exibir uma mensagem de sucesso na própria tela após a captura, por exemplo.</p>                                                                                                                                                                                                                                                                                                                                                                                                     | Não. O padrão é **`false`**                                                                                                                                                                          |
| <p><strong><code>.setEyesClosedSettings(threshold: Double, isEnable: Bool)</code></strong></p><p>Permite personalizar as configurações de validação de olhos abertos do SDK. O método recebe como parâmetro <strong><code>isEnable</code></strong> para habilitar ou desabilitar a validação, e <strong><code>limite</code></strong>, valor entre 0,0 e 1,0</p>                                                                                                                                                                                                                                                                                                            | Não. O padrão é **`true`** e **`0.5`**                                                                                                                                                               |
| <p><strong><code>.setResolutionSettings(resolution: Resolution)</code></strong></p><p>Permite definir a resolução de captura. O método recebe como parâmetro um <strong><code>Resolução</code></strong>, que possui as seguintes opções:</p>                                                                                                                                                                                                                                                                                                                                                                                                                               | Não. O padrão é **`hd1280x720`**                                                                                                                                                                     |

| **Resolução**                                                                                                                                                                                                                                             | **Descrição**                                                                                                                               |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **`low`**                                                                                                                                                                                                                                                 | Especifica as configurações de captura apropriadas para taxas de bits de vídeo e áudio de saída adequadas para compartilhamento via 3G      |
| **`medium`**                                                                                                                                                                                                                                              | Especifica as configurações de captura apropriadas para as taxas de bits de vídeo e áudio de saída adequadas para compartilhamento via WiFi |
| **`high`**                                                                                                                                                                                                                                                | Especifica as configurações de captura apropriadas para saída de vídeo e áudio em alta qualidade                                            |
| **`photo`**                                                                                                                                                                                                                                               | Especifica as configurações de captura apropriadas para saída de qualidade de foto em alta resolução                                        |
| **`inputPriority`**                                                                                                                                                                                                                                       | Especifica as configurações de captura apropriadas para saída de qualidade de foto em alta resolução                                        |
| **`hd1280x720`**                                                                                                                                                                                                                                          | Especifica as configurações de captura apropriadas para saída de vídeo em qualidade 720p (1280 x 720 pixels)                                |
| **`hd1920x1080`**                                                                                                                                                                                                                                         | Configurações de captura adequadas para saída de vídeo em qualidade 1080p (1920 x 1080 pixels)                                              |
| **`hd4K3840x2160`**                                                                                                                                                                                                                                       | Configurações de captura adequadas para saída de vídeo em qualidade 2160p (3840 x 2160 pixels)                                              |
|                                                                                                                                                                                                                                                           |                                                                                                                                             |
| <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 %}

### **MessageSettings**

| **Atributo**                                                                                                                                                             | **Valor Padrão**                                                     |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------- |
| <p><strong><code>waitMessage: String</code></strong></p><p>Mensagem exibida quando o SDK está em processo de abertura</p>                                                | "Aguarde..."                                                         |
| <p><strong><code>stepName: String</code></strong></p><p>Rótulo estático presente na parte inferior da activity</p>                                                       | "Registro facial"                                                    |
| <p><strong><code>faceNotFoundMessage: String</code></strong></p><p>Mensagem exibida quando o algoritmo não reconhece um rosto</p>                                        | "Não encontramos nenhum rosto"                                       |
| <p><strong><code>faceNotFittedMessage: String</code></strong></p><p>Mensagem exibida quando o rosto não está encaixado corretamente na máscara</p>                       | "Encaixe seu rosto"                                                  |
| <p><strong><code>faceTooFarMessage: String</code></strong></p><p>Mensagem exibida quando há um rosto muito pequeno</p>                                                   | "Aproxime o rosto"                                                   |
| <p><strong><code>multipleFaceDetectedMessage: String</code></strong></p><p>Mensagem exibida quando mais de um rosto é detectado</p>                                      | "Mais de um rosto detectado"                                         |
| <p><strong><code>holdItMessage: String</code></strong></p><p>Mensagem exibida quando o usuário está na posição correta para a captura</p>                                | "Segure assim"                                                       |
| <p><strong><code>invalidFaceMessage: String</code></strong></p><p>Mensagem exibida quando a verificação de prova de vida rejeita a selfie</p>                            | "Não conseguimos capturar seu rosto. Tente novamente."               |
| <p><strong><code>verifyingLivenessMessage: String</code></strong></p><p>Mensagem exibida durante a verificação de prova de vida.</p>                                     | "Verificando selfie…"                                                |
| <p><strong><code>captureProcessingErrorMessage: String</code></strong></p><p>Mensagem exibida quando ocorre um problema de processamento ou erro na resposta da API.</p> | "Ops, tivemos um problema ao processar sua imagem. Tente novamente." |
| <p><strong><code>eyesClosedMessage: String</code></strong></p><p>Mensagem exibida quando ambos os olhos estão fechados.</p>                                              | "Não use óculos escuros e mantenha os olhos abertos."                |

Depois de criar um objeto do tipo **`PassiveFaceLiveness`**, inicie a **`PassiveFaceLivenessController`** passando este objeto como parâmetro no construtor:

```swift
let passiveVC = PassiveFaceLivenessController(passiveFaceLiveness: passiveFaceLiveness)
passiveVC.passiveFaceLivenessDelegate = self
present(passiveVC, animated: true, completion: nil)
```

## **Obtendo o resultado**

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

```swift
class YouController: UIViewController, PassiveFaceLivenessControllerDelegate{
    
    // MARK: - Delegados do Passive Face Liveness
    
    func passiveFaceLivenessController(_ passiveFacelivenessController: PassiveFaceLivenessController, didFinishWithResults results: PassiveFaceLivenessResult) {
        //Chamado quando o processo foi executado com sucesso
        //A variável result contém os dados obtidos
    }
    
    func passiveFaceLivenessControllerDidCancel(_ passiveFacelivenessController: PassiveFaceLivenessController) {
        //Chamado quando o processo foi cancelado pelo usuário
    }
    
    func passiveFaceLivenessController(_ passiveFacelivenessController: PassiveFaceLivenessController, didFailWithError error: PassiveFaceLivenessFailure) {
        //Chamado quando o processo termina com um erro
        //A variável error contém informações sobre o erro
    }
}
```

### **PassiveFaceLivenessResult**

| **Parâmetro**                                                                                                                                                                                                                                                                                                                                                                                                                                  | **Pode ser nulo?**                                                                               |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| <p><strong><code>image: UIImage?</code></strong></p><p>Foto da selfie tirada ou imagem do melhor quadro capturada do vídeo - se o formato VideoCapture estiver habilitado.</p>                                                                                                                                                                                                                                                                 | Sim, em caso de erro                                                                             |
| <p><strong><code>capturePath: String?</code></strong></p><p>Caminho do vídeo no dispositivo</p>                                                                                                                                                                                                                                                                                                                                                | Sim, em caso de erro                                                                             |
| <p><strong><code>imageUrl: String</code></strong></p><p>URL contendo a selfie em JPEG em nosso servidor temporário</p>                                                                                                                                                                                                                                                                                                                         | Sim, em caso de erro                                                                             |
| <p><strong><code>signedResponse: String</code></strong></p><p>Resposta assinada do servidor CAF que confirmou que a selfie capturada tem um rosto real (não é uma foto ou vídeo). Use este parâmetro se quiser uma camada extra de segurança, verificando se a assinatura da resposta não foi comprometida, causada por uma interceptação da requisição. Se ela estiver comprometida, isso indica fortemente a interceptação da requisição</p> | Sim, em caso de erro ou indisponibilidade do servidor                                            |
| <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>                                                                                                                                                                                 | Sim, se o usuário definir **`useAnalytics = false`** ou as chamadas de analytics não funcionarem |
| <p><strong><code>lensFacing: Int</code></strong></p><p>Define o lado da câmera que foi usado. Use <strong><code>PassiveFaceLivenessResult.LENS\_FACING\_FRONT</code></strong> ou <strong><code>PassiveFaceLivenessResult.LENS\_FACING\_FRONT</code></strong> para validar.</p>                                                                                                                                                                 | Não                                                                                              |

### **PassiveFaceLivenessFailure**

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

| **isKindOfClass()**      | **Descrição**                                                    | **Exemplo**                                                                   |
| ------------------------ | ---------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| **`InvalidTokenReason`** | O token informado não é válido para o produto correspondente     | Parametrize "test123" como token no builder do SDK                            |
| **`PermissionReason`**   | Falta alguma permissão obrigatória para executar o SDK           | Iniciar o DocumentDetector sem permissão de câmera concedida                  |
| **`NetworkReason`**      | Falha na conexão com a internet                                  | O usuário estava sem internet durante o facematch no FaceAuthenticator        |
| **`ServerReason`**       | Quando uma requisição do SDK recebe um código de status de falha | Em teoria, isso não deveria acontecer. Se acontecer, nos avise!               |
| **`StorageReason`**      | Não há espaço no armazenamento interno do dispositivo do usuário | Quando não há espaço no armazenamento interno ao capturar a foto do documento |

## **Exemplos**

### **Personalizando o layout**

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

```swift
let layout = PassiveFaceLivenessLayout()

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.setFont = UIImage(named: "my_font")

let passiveFacelivenessConfiguration = PassiveFaceLivenessBuilder(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/passivefaceliveness.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.
