> 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/caffacelivenesslite/start-sdk.md).

# Iniciar verificação de vivacidade

Links rápidos: [Visão geral](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite.md) | [Construindo o SDK](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/builder.md) | [Iniciar verificação de vivacidade](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/start-sdk.md) | [Personalização da interface](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/ui-customization.md) | [Instalação](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/installation.md) | [Versão atual](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/current-version.md) | [Requisitos](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/requirements.md) | [Código-fonte](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/source-code.md) | [Referência de resultado](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/result-reference.md) | [Notas de versão](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/release-notes.md) | [FAQ](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/faq_caf_face_liveness_sdk.md)

De **3.0.0** o fluxo tem três etapas: configure uma vez com `setup`, opcionalmente `preaquecer` a sessão e, em seguida, `startSDK` para exibir a tela de captura.

{% hint style="warning" %}
**Alterações na versão 3.0.0:** a configuração mudou de `startSDK` para `setup`. A antiga `startSDK(viewController:mobileToken:personId:…)` sobrecarga foi removida — as chamadas existentes não compilarão. Veja o [guia de migração](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/release-notes.md).
{% endhint %}

## Configurando com setup

Chame `setup` antes de iniciar. Ele apenas armazena sua configuração — não faz nenhuma solicitação de rede e não exibe nada.

| Parâmetro                                                     | Obrigatório | Descrição                                                                                         |
| ------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------- |
| `mobileToken: String`                                         | Sim         | Token de uso associado à sua conta CAF                                                            |
| `personId: String`                                            | Sim         | Identificador do usuário                                                                          |
| `customLocalization: String?`                                 | Não         | Nome da tabela de strings para localização personalizada do iProov (por exemplo, "stringsBundle") |
| `Bundle que contém a tabela de strings personalizada (iProov` | Não         | options.stringsBundle `uiCustomization: CerttaUiCustomization?`)                                  |
| `Personalização visual para a tela de liveness (padrão:`      | Não         | Identidade visual para a tela de liveness (padrão: `nil`, sem personalização)                     |
| `environment: CafEnvironment`                                 | Não         | `.dev`, `.beta`, `.prod` (padrão: `.prod`)                                                        |
| `loading: Bool`                                               | Não         | Exibir a tela de carregamento do SDK (padrão: `true`)                                             |

Você pode chamar `setup` novamente para alterar qualquer valor — por exemplo, para alternar `personId` entre usuários. Ao fazer isso, descarta uma sessão previamente preaquecida sempre que as credenciais ou o ambiente forem diferentes.

## Preaquecendo a sessão (opcional)

`prewarm()` faz a solicitação da sessão com antecedência para que `startSDK` possa abrir a câmera sem esperar a rede. Chame-o em qualquer momento em que o usuário já esteja ocupado — uma tela de instruções, uma etapa de consentimento, um formulário — e o tempo de ida e volta se sobrepõe ao tempo de leitura, em vez de aumentá-lo.

```swift
sdk.setup(mobileToken: "your_mobile_token", personId: "your_person_id")
sdk.prewarm()                       // por exemplo, quando a tela de instruções aparece
// … o usuário lê as instruções …
sdk.startSDK(viewController: self)  // consome a sessão prewarmed
```

`prewarm()` retorna imediatamente e não informa nada: não tem completion handler e nunca invoca o delegate. É seguro chamá-lo de qualquer thread e mais de uma vez — enquanto uma solicitação está em andamento, ou enquanto uma sessão válida já estiver em cache, ele não faz nada em vez de solicitar uma segunda sessão.

**O preaquecimento é sempre opcional e nunca pode quebrar uma captura.** Se nenhuma sessão válida estiver disponível quando `startSDK` for executado — porque o preaquecimento falhou, nunca foi chamado ou a sessão em cache não é mais utilizável — o SDK faz fallback silenciosamente para solicitar a sessão no momento, exatamente como fazia antes da versão 3.0.0.

Uma sessão preaquecida é descartada quando:

| Condição                                    | Detalhe                                                                                                              |
| ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| Ela tem mais de **90 segundos**             | Inicie a captura dentro dessa janela para se beneficiar do preaquecimento                                            |
| As credenciais ou o ambiente mudaram        | Uma posterior `setup` com um(a) diferente `mobileToken`, `personId` ou `ambiente` a invalida                         |
| O aplicativo foi enviado para segundo plano | A sessão em cache e as credenciais armazenadas são apagadas                                                          |
| Ela já foi usada                            | Cada sessão preaquecida é consumida por uma única `startSDK` chamada; chame `prewarm()` novamente para outra captura |

Dois comportamentos que vale observar ao integrar:

* **Não `loading()` / `loaded()` par é emitido para a solicitação da sessão no caminho preaquecido**, já que não há nada para esperar. Do **3.1.0** mesmo modo, nenhum é emitido após a captura, porque o resultado é entregue imediatamente. Não dependa de `loading()` como sinal de que a captura começou.
* `prewarm()` armazena o token móvel e o ID da pessoa no keychain antes de emitir a solicitação, porque a solicitação é autenticada a partir do keychain. Eles são removidos se o preaquecimento falhar ou se o aplicativo for colocado em segundo plano.

## Chamar startSDK

`startSDK` exibe a tela de captura usando a configuração fornecida para `setup`. Ele recebe apenas o view controller apresentador. Chame-o na thread principal.

| Parâmetro                          | Obrigatório | Descrição                      |
| ---------------------------------- | ----------- | ------------------------------ |
| `viewController: UIViewController` | Sim         | O view controller apresentador |

Chamar `startSDK` sem um(a) prévio(a) `setup` não apresenta nada — ele retorna `didFinishWithError(type: .invalidOptionsException, description:)` em vez disso. Veja [Referência de resultado](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/result-reference.md).

{% hint style="warning" %}
**Alterações na versão 2.0.0:** `executeFaceAuth` foi removido. O SDK inicia uma transação assíncrona e retorna apenas `signedResponse`. Recupere o resultado final de liveness do seu backend.
{% endhint %}

### Exemplo

```swift
import CafFaceLivenessLite

class ViewController: UIViewController {
    private let sdk = CafFaceLivenessLiteSDK()

    override func viewDidLoad() {
        super.viewDidLoad()
        sdk.delegate = self

        sdk.setup(
            mobileToken: "your_mobile_token",
            personId: "your_person_id",
            customLocalization: nil,
            customLocalizationBundle: nil,
            environment: .prod,
            loading: true
        )
        sdk.prewarm()
    }

    func startLiteLiveness() {
        sdk.startSDK(viewController: self)
    }
}
```

### Localização personalizada com um bundle de framework

Quando customizados `Localizable.strings` forem incluídos em um framework (ou outro bundle que não seja o principal), passe tanto o nome da tabela quanto o bundle:

```swift
sdk.setup(
    mobileToken: "your_mobile_token",
    personId: "your_person_id",
    customLocalization: "Localizable",
    customLocalizationBundle: Bundle(for: CafFaceLivenessLiteSDK.self),
    environment: .prod,
    loading: true
)
sdk.startSDK(viewController: self)
```

Referência de localização: [Localização do iProov](https://github.com/iProov/ios/wiki/Localization)

### Personalização da interface

Para personalizar a tela de liveness — barra de cabeçalho, prompt de orientação, área ao redor do oval do rosto e fonte — passe uma `CerttaUiCustomization` por meio do `uiCustomization` parâmetro de `setup`. Disponível em **2.1.0** e totalmente opcional. Veja [Personalização da interface](/caf-sdk/caf-sdk-pt-br/ios/standalone-modules/caffacelivenesslite/ui-customization.md).


---

# 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/caffacelivenesslite/start-sdk.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.
