> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/docs.facephi-pt-br/sdks/sdk-mobile/android-sdk/inicializacion/integracion-idv-mobile.md).

# Integração IDV Mobile

## O que é IDV Mobile

**IDV (Verificação de Identidade)** é o fluxo que permite verificar e autenticar a identidade de uma pessoa por meio da captura e validação de **características biométricas**.

O fluxo é configurado previamente na **plataforma da Facephi** e é executado no aplicativo por meio do seu identificador (`flowId`).

## Dependências necessárias

Para executar fluxos de IDV em Android, você deve adicionar, além do SDK base, os **componentes específicos** que participem do processo.

```kotlin
implementation("com.facephi.androidsdk:sdk:$version") 
implementation("com.facephi.androidsdk:tracking_component:$version") 
implementation("com.facephi.androidsdk:selphi_component:$version") 
implementation("com.facephi.androidsdk:selphid_component:$version")
implementation("com.facephi.androidsdk:video_recording_component:$version")
implementation("com.facephi.androidsdk:capture_component:$version")
```

> Adicione apenas os componentes necessários de acordo com o Fluxo configurado na plataforma.

## Inicialização do SDK <a href="#iniciacion-de-sdk" id="iniciacion-de-sdk"></a>

O SDK é gerenciado por meio de um controlador principal (`SDKController`) que deve ser inicializado antes de iniciar qualquer fluxo.

O **apiKey de licença** é fornecido pela equipe da Facephi.

```kotlin
val sdkConfig = SdkConfigurationData(
    sdkApplication = SdkApplication(application),
    licensing = LicensingOnline(EnvironmentLicensingData(
        apiKey = "..."
    )),
    trackingController = TrackingController()
)
val result = SDKController.initSdk(sdkConfig)
when (result) {
    is SdkResult.Error -> {
        Log.d("INIT SDK ERROR: ${result.error}")
    }
    is SdkResult.Success -> {
        Log.d("INIT SDK OK")
    }
}
```

Após uma inicialização bem-sucedida, o SDK fica pronto para executar os fluxos configurados.

## Iniciar um fluxo de IDV <a href="#lanzamiento-de-idv" id="lanzamiento-de-idv"></a>

O fluxo de IDV é iniciado por meio de um `FlowController`, informando:

* O **ID do fluxo** configurado na plataforma (`flowId`).
* O **ID do cliente** (`customerId`).
* A lista de **controladores** que participam do processo.
* Opcionalmente, o **ID de autenticação** (`authenticationId`) para associar o fluxo a uma autenticação específica.
* Opcionalmente, os identificadores `resumeOperationId` e `resumeSessionId` para continuar uma operação ou sessão já existente.

Exemplos de controladores usuais:

* `FSelphiController` → Captura Facial.
* `FSelphIDController` → Captura de documentos.
* `FStartVideoRecordingController` / `FStopVideoRecordingController` → Gravação do processo.

```kotlin
val flowController = FlowController (
     FlowConfigurationData(
            id = "flowId",
            controllers = listOf(FSelphiController(), FSelphIDController()),
            customerId = "customerId",
            authenticationId = "authenticationId",
            resumeOperationId = "operationId",
            resumeSessionId = "sessionId",
        ))
SDKController.launch(flowController)

```

Se não precisar retomar uma operação, você pode omitir `authenticationId`, `resumeOperationId` e `resumeSessionId`. O SDK criará os identificadores internos durante o início do fluxo.

Para receber a saída do fluxo, observe `stateFlow` antes ou durante o início:

```kotlin
viewModelScope.launch {
    flowController.stateFlow.collect { flowResult ->
        val result = flowResult.result
        when (result) {
            is SdkResult.Success -> {
                val step = flowResult.step
                val data = result.data
                val isFlowFinished = flowResult.flowFinish
            }
            is SdkResult.Error -> {
                val error = result.error
            }
        }
    }
}
```

Cada emissão retorna um `SdkFlowResult` com a etapa (`step`), o resultado da etapa ou operação (`result`) e o indicador `flowFinish`, que informa se o fluxo foi finalizado.

## Consultar fluxos disponíveis

Se precisar obter os fluxos disponíveis antes de iniciar um deles, use:

```kotlin
val list = SDKController.getFlowIntegrationData()
```

A função retorna uma lista com os **ID do fluxo** e seu **tipo de operação**.
