> 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/flutter/standalone-modules/deprecated-sdks/faceliveness.md).

# FaceLiveness

Confira a documentação do SDK em pub.dev para obter mais exemplos e informações adicionais:

* [versões abaixo de 5.0](https://pub.dev/packages/new_face_liveness)
* [versões 5.0 e acima](https://pub.dev/packages/caf_face_liveness)

## Requisitos

| Flutter | Versão |
| ------- | ------ |
| Flutter | 1.20+  |
| Dart    | 2.15+  |

| Android    | Versão |
| ---------- | ------ |
| minSdk     | 21     |
| compileSdk | 34     |

| iOS         | Versão |
| ----------- | ------ |
| Alvo do iOS | 13.0   |
| Xcode       | 15.4+  |
| Swift       | 5.3.2+ |

#### Enviando seu app para a Play Store

Para publicar seu app na *Google Play Store*, você precisa preencher um formulário de segurança de dados. Como integramos com o *SDK FingerPrintJS*, você precisará fornecer as seguintes informações:

| Pergunta no formulário de segurança de dados do Google Play Console         | Resposta                                                  |
| --------------------------------------------------------------------------- | --------------------------------------------------------- |
| Seu app coleta ou compartilha algum dos tipos de dados do usuário exigidos? | Sim.                                                      |
| Que tipo de dado é coletado?                                                | Identificadores do dispositivo ou outros identificadores. |
| Esse dado é coletado, compartilhado ou ambos?                               | Coletado.                                                 |
| Esse dado é processado de forma efêmera?                                    | Sim.                                                      |
| Por que esses dados do usuário são coletados?                               | Prevenção a fraudes, segurança e conformidade.            |

## Permissões em tempo de execução

### Android

| Permissão | Motivo                                                | Obrigatório |
| --------- | ----------------------------------------------------- | ----------- |
| `CÂMERA`  | Captura da selfie em políticas com verificação facial | Sim         |

### iOS

| Permissão                                  | Motivo                                                       | Obrigatório |
| ------------------------------------------ | ------------------------------------------------------------ | ----------- |
| `Privacidade - Descrição de Uso da Câmera` | Captura da selfie em políticas de verificação facial ao vivo | Sim         |

## Configurações da plataforma

### Android

Se a sua versão do Gradle for anterior à 7, adicione estas linhas ao seu `build.gradle`.

```groovy
allprojects {
  repositories {
    ...
    maven { url 'https://repo.combateafraude.com/android/release' }
    maven { url 'https://raw.githubusercontent.com/iProov/android/master/maven/' }
    maven { url 'https://maven.fpregistry.io/releases' }
    maven { url 'https://jitpack.io' }
  }
}
```

Se a sua versão do Gradle for 7 ou mais recente, adicione estas linhas ao seu `settings.gradle`.

```groovy
dependencyResolutionManagement {
  repositories {
    ...
    maven { url 'https://repo.combateafraude.com/android/release' }
    maven { url 'https://raw.githubusercontent.com/iProov/android/master/maven/' }
    maven { url 'https://maven.fpregistry.io/releases' }
    maven { url 'https://jitpack.io' }
  }
}
```

Adicione suporte ao Java 8 ao seu `build.gradle` arquivo. Ignore isto se o Java 8 estiver ativado.

```groovy
android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
```

### iOS

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

```swift
<key>NSCameraUsageDescription</key>
<string>Para capturar a selfie</string>
```

## Uso

| Parâmetro                                                                                                                                                                                                                                            | Obrigatório |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `mobileToken`: Token de uso associado à sua conta CAF                                                                                                                                                                                                | Sim         |
| `personId`: Identificador do usuário que realizará a verificação de vivacidade facial. Recomenda-se usar o documento de identificação do usuário neste campo, como o CPF (documento de identificação brasileiro), mas pode ser qualquer outro valor. | Sim         |

```dart
FaceLiveness faceLiveness =
        FaceLiveness(mobileToken: mobileToken, peopleId: personId);

// Seus parâmetros de personalização do SDK

final stream = faceLiveness.start();

    stream.listen((event) {

      if (event is FaceLivenessEventConnecting) {
        // O SDK está se conectando ao servidor. Você deve fornecer um indicador de progresso indeterminado
        // para informar ao usuário que a conexão está em andamento.
      } else if (event is FaceLivenessEventConnected) {
        // O SDK se conectou, e a interface do usuário do iProov será exibida agora. Você deve ocultar
        // qualquer indicação de progresso neste momento.
      } else if (event is FaceLivenessEventClosed) {
        // O usuário cancelou a verificação facial, seja pressionando o botão de fechar no topo da tela, ou enviando
        // o app para segundo plano.
      } else if (event is FaceLivenessEventSuccess) {
        // O usuário foi verificado/registrado com sucesso e o token foi validado.
        // Você pode acessar as seguintes propriedades:
        final signedResponse = event.signedResponse;
      } else if (event is FaceLivenessEventFailure) {
        // O usuário não foi verificado/registrado com sucesso, pois sua identidade não pôde ser verificada,
        // ou houve outro problema com sua verificação/registro (por exemplo, perda de conexão com a internet).
        // Você pode acessar as seguintes propriedades:
        final errorType = event.errorType
        final errorDescription = event.errorDescription
      }
    });
```

### Opções do FaceLiveness

| Opção                                                                                                                                                                                                                                                                                                                                           | Obrigatório | Valor Padrão               | Android | iOS |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | -------------------------- | ------- | --- |
| <p><code>.setStage(String stage)</code></p><p>Usado para redirecionar o SDK para o ambiente desejado na API CAF.</p>                                                                                                                                                                                                                            | Não         | `CafStage.prod`            | ✅       | ✅   |
| <p><code>.setFilter(String filter)</code></p><p>Define o filtro de câmera aplicado à pré-visualização da câmera.</p>                                                                                                                                                                                                                            | Não         | `CameraFilter.lineDrawing` | ✅       | ✅   |
| <p><code>.setEnableScreenshots(bool enable)</code></p><p>Usado para habilitar capturas de tela durante a varredura do SDK.</p>                                                                                                                                                                                                                  | Não         | `false`                    | ✅       | ❌   |
| <p><code>.setEnableLoadingScreen(bool enable)</code></p><p>Usado para determinar se a tela de carregamento do SDK será implementada no lado do cliente ou se será usada a tela padrão. Se definido como 'true', a tela de carregamento será uma tela padrão do SDK. Se 'false', você deve fornecer um indicador de progresso indeterminado.</p> | Não         | `false`                    | ✅       | ✅   |
| <p><code>.setImageUrlExpirationTime(String time)</code></p><p>Usado para alterar o tempo padrão de expiração da URL da imagem para recuperar a captura facial.</p>                                                                                                                                                                              | Não         | 30 min                     | ✅       | ✅   |
| <p><code>.setReverseProxySettings(ReverseProxySettings settings)</code></p><p>Usado para configurar as definições de proxy reverso para executar os serviços FaceLiveness e/ou Authentication.</p>                                                                                                                                              | Não         |                            | ✅       | ❌   |

### ReverseProxySettings

As definições de proxy reverso que serão usadas para executar os serviços FaceLiveness e Authentication. Esses dois serviços podem operar independentemente um do outro, FaceLiveness e Authentication.

**Proxy reverso do FaceLiveness:**

| Parâmetro                     | Descrição                                                                                                                                                                                                                 |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `String? faceLivenessBaseUrl` | A URL base do proxy reverso que será usada para executar o serviço FaceLiveness. **O protocolo da URL deve ser WSS**.                                                                                                     |
| `List<String>? certificates`  | Uma lista de certificados que será usada para autenticar o proxy reverso para executar o serviço FaceLiveness. Os certificados devem ser **hash SHA-256 codificado em base64 do Subject Public Key Info do certificado**. |

**Proxy reverso de autenticação:**

| Parâmetro                       | Descrição                                                                                                                 |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `String? authenticationBaseUrl` | A URL base do proxy reverso que será usada para executar o serviço Authentication. **O protocolo da URL deve ser HTTPS**. |

### Enumerações

#### CafStage

| Descrição                                                               | Valores                          |
| ----------------------------------------------------------------------- | -------------------------------- |
| Usado para definir o estágio do SDK em `.setStage(String stage)` opção. | `CafStage.prod`, `CafStage.beta` |

#### CameraFilter

| Descrição                                                                          | Valores                                            |
| ---------------------------------------------------------------------------------- | -------------------------------------------------- |
| Usado para definir o filtro de câmera do SDK em `.setFilter(String filter)` opção. | `CameraFilter.natural`, `CameraFilter.lineDrawing` |

#### Time

| Descrição                                                                                                    | Valores                              |
| ------------------------------------------------------------------------------------------------------------ | ------------------------------------ |
| Usado para definir o tempo de expiração da URL da imagem em `.setImageUrlExpirationTime(String time)` opção. | `Time.threeHours`, `Time.thirtyDays` |

## Streaming de eventos do FaceLiveness

### FaceLivenessEventConnecting

O SDK está carregando; você pode usar o retorno deste evento para definir uma ação no seu app, por exemplo, um indicador de carregamento.

### FaceLivenessEventConnected

O SDK não está mais carregando; você pode usar o retorno deste evento para definir uma ação no seu app, por exemplo, você pode parar o indicador de carregamento.

### FaceLivenessEventClosed

A execução foi cancelada pelo usuário.

### FaceLivenessEventSuccess

| Evento       | Descrição                                                                        |
| ------------ | -------------------------------------------------------------------------------- |
| `requestId`  | Identificador da solicitação.                                                    |
| `isAlive`    | Validação de uma pessoa viva, identifica se o usuário passou com sucesso ou não. |
| `token`      | Token da solicitação.                                                            |
| `userId`     | Identificador do usuário fornecido para a solicitação.                           |
| `imageUrl`   | Link temporário para a imagem, gerado pela nossa API.                            |
| `personId`   | Identificador do usuário fornecido para o SDK.                                   |
| `sdkVersion` | Versão do Sdk em uso.                                                            |
| `iat`        | Expiração do token.                                                              |

{% hint style="info" %}
O `isAlive` parâmetro é **muito importante**, com base nessa validação, o usuário pode ser orientado a continuar o fluxo ou não. Em caso de `isAlive: true`, ele poderá continuar com a jornada. Se `isAlive: false`, este usuário não é válido e deve ser impedido de continuar sua jornada.
{% endhint %}

### FaceLivenessEventFailure

| Parâmetro                 | Descrição                                         |
| ------------------------- | ------------------------------------------------- |
| `String errorType`        | Tipo de erro retornado pelo SDK                   |
| `String errorDescription` | Mensagem de descrição do erro retornada pelo SDK. |

| Casos de tipo de erro   | Descrição                                                                                                                                                                                                                     |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `dispositivoSemSuporte` | Esse erro pode ocorrer se o hardware ou software do dispositivo não atender aos requisitos mínimos para a funcionalidade de reconhecimento facial.                                                                            |
| `permissãoDaCâmera`     | Esse erro normalmente ocorre quando o usuário nega acesso à câmera ou se o app não tiver as permissões necessárias.                                                                                                           |
| `exceçãoDeRede`         | Esse erro pode ocorrer devido a vários problemas de rede, como falta de conexão com a internet, timeouts do servidor ou congestionamento da rede.                                                                             |
| `exceçãoDeToken`        | Esse erro pode ocorrer se o token de autenticação fornecido for inválido, estiver expirado ou não tiver as permissões necessárias para executar tarefas de reconhecimento facial.                                             |
| `exceçãoDoServidor`     | Esse erro normalmente é retornado quando há um problema com o servidor ao processar a solicitação de reconhecimento facial. Isso pode incluir erros no lado do servidor, configurações incorretas ou interrupções do serviço. |


---

# 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/flutter/standalone-modules/deprecated-sdks/faceliveness.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.
