> 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/productos/idv-suite/flujos-and-integraciones/configuracion-tecnica-del-cliente/sdk-mobile/android-sdk/inicializacion.md).

# Inicialización

## Qué es IDV Mobile

**IDV (Identity Verification)** es el flujo que permite verificar y autenticar la identidad de una persona mediante la captura y validación de **rasgos biométricos**.

El flujo se configura previamente en la **plataforma de Facephi** y se ejecuta en la aplicación mediante su identificador (`flowId`).

## Dependencias necesarias

Para ejecutar flujos de IDV en Android debes añadir, además del SDK base, los **componentes específicos** que participen en el proceso.

```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:nfc_component:$version")
```

> Añade únicamente los componentes necesarios según el flujo configurado en plataforma. Los componentes de sdk y tracking deben integrarse **obligatoriamente** independientemente del flujo requerido.

Para facilitar el proceso de integración se deja evidencia de un tabla la cual hace referencia a la dependencia de cada componente:

<table data-full-width="true"><thead><tr><th width="166.7890625">Componente</th><th>Dependencia</th><th>Controlador</th></tr></thead><tbody><tr><td>Selfie</td><td>com.facephi.androidsdk:selphi_component</td><td><code>FSelphiController</code></td></tr><tr><td>Selfie (con funcionalidad IAD)</td><td>com.facephi.androidsdk:selphi_iad_component</td><td><code>FSelphiController</code></td></tr><tr><td>Documento</td><td>"com.facephi.androidsdk:selphid_component</td><td><code>FSelphIDController</code></td></tr><tr><td>Videograbación</td><td>com.facephi.androidsdk:video_recording_component</td><td><code>FStartVideoRecordingController</code> / <code>FStopVideoRecordingController</code></td></tr><tr><td>NFC</td><td>com.facephi.androidsdk:nfc_component</td><td><code>FNFCController</code></td></tr></tbody></table>

## Inicializar del SDK <a href="#iniciacion-de-sdk" id="iniciacion-de-sdk"></a>

El SDK se gestiona a través de un controlador principal (`SDKController`) que debe inicializarse antes de lanzar cualquier flujo.

El **apiKey de licencia** lo proporciona el equipo de Facephi una vez [publicada la integración](/productos/idv-suite/flujos-and-integraciones/integraciones-no-code-low-code.md).

```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")
    }
}
```

Tras una inicialización correcta, el SDK queda preparado para ejecutar los flujos configurados.

## Lanzar un flujo de IDV <a href="#lanzamiento-de-idv" id="lanzamiento-de-idv"></a>

El flujo de IDV se lanza mediante un `FlowController`, indicando:

* El **ID del flujo** configurado en plataforma (`flowId`).
* El **ID del cliente** (`customerId`).
* La lista de **controladores** que participan en el proceso.
* Opcionalmente, el **ID de autenticación** (`authenticationId`) para asociar el flujo a una autenticación concreta.
* Opcionalmente, los identificadores `resumeOperationId` y `resumeSessionId` para continuar una operación o sesión ya existente.

Ejemplos de controladores habituales:

* `FSelphiController` → Captura facial.
* `FSelphIDController` → Captura de documentos.
* `FStartVideoRecordingController` / `FStopVideoRecordingController` → Grabación del proceso.

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

```

Si no necesitas reanudar una operación, puedes omitir `authenticationId`, `resumeOperationId` y `resumeSessionId`. El SDK creará los identificadores internos durante el inicio del flujo.

Para recibir la salida del flujo, observa `stateFlow` antes o durante el lanzamiento:

```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 emisión devuelve un `SdkFlowResult` con el paso (`step`), el resultado del paso u operación (`result`) y el indicador `flowFinish`, que informa si el flujo ha finalizado.

## Consultar flujos disponibles

Si necesitas obtener los flujos disponibles antes de lanzar uno de ellos, utiliza:

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

La función devuelve un listado con los **ID de flujo** y su **tipo de operación**.
