> 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/sdks/sdk-mobile/android-sdk/inicializacion/lanzamiento-simplificado.md).

# Lanzamiento simplificado

## Inicializar el SDK <a href="#id-22-inicializar-el-sdk" id="id-22-inicializar-el-sdk"></a>

El SDK funciona a través de un **controlador principal (`SDKController`)**. Facephi proporcionará el `apiKey` de la licencia necesario para la inicialización.

```kotlin
val sdkConfig = SdkConfigurationData(
    sdkApplication = SdkApplication(application),
    licensing = LicensingOnline(EnvironmentLicensingData(
            apiKey = "...")
      )),
)

val result = SDKController.initSdk(sdkConfig)

when (result) {
  is SdkResult.Success -> Log.d("APP: INIT SDK: OK")
  is SdkResult.Error -> Log.d(
          "APP: INIT SDK: KO - ${result.error.name}"
        )
}

if (BuildConfig.DEBUG) {
    SDKController.enableDebugMode()
}
```

## Iniciar operación <a href="#id-23-iniciar-operacion" id="id-23-iniciar-operacion"></a>

Antes de lanzar cualquier componente, es obligatorio **iniciar una operación**.

Este método tiene los siguientes parámetros de entrada:

1. **operationType**: Indica si se va a hacer un proceso de ONBOARDING o de AUTHENTICATION.
2. **customerId**: Identificador del usuario (controlado a nivel de aplicación).
3. **steps**: Lista de pasos de la operación si se han definido previamente.
4. **enableTracking**: Indica si la operación debe enviar eventos de tracking. Por defecto es `true`.

```kotlin
val result = SDKController.newOperation(
        operationType = OperationType.ONBOARDING,
        customerId = "customer_id",
        steps = listOf(Step.SELPHI_COMPONENT, Step.SELPHID_COMPONENT),
        enableTracking = true)
when (result) {
    is SdkResult.Success -> {
        Timber.d("APP: NEW OPERATION OK")
        Timber.d("Session ID: ${result.data.sessionId}")
        Timber.d("Operation ID: ${result.data.operationId}")
    }
    is SdkResult.Error -> {
        Timber.d("APP: NEW OPERATION ERROR: ${result.error.name}")
    }
}
```

Cuando la operación se crea correctamente, `result.data` contiene un `OperationResult` con `sessionId`, `operationId`, `type` y `customerId`. Estos valores identifican la sesión y la operación activa, y pueden usarse para trazabilidad o para enlazar llamadas posteriores con la plataforma.

{% hint style="info" %}
Si la creación de una nueva operación devuelve un error del tipo **INTERNAL\_ERROR** se debe principalmente a un problema de **seguridad**. Para poder investigar la causa, es posible recuperar el token asociado al error, el cual proporciona información adicional para su análisis.

```
if (result.error is SdkError.INTERNAL_ERROR){
    val token = (result.error as SdkError.INTERNAL_ERROR).error
}
```

{% endhint %}

## Lanzamiento de componentes <a href="#id-24-lanzamiento-de-los-componentes" id="id-24-lanzamiento-de-los-componentes"></a>

Cada componente tiene su propio controlador y se lanza desde `SDKController`.

```kotlin
val result = SDKController.launch(ExampleController(ConfigurationData()))
when (result) {
    is SdkResult.Success -> {
        //Result OK
        result.data
    }
    is SdkResult.Error -> {
        //Result KO
        result.error.name
    }
}
```

El resultado de `launch` mantiene la estructura común `SdkResult`: en `Success`, `data` contiene la salida propia del componente lanzado; en `Error`, `error` contiene el error específico del componente o del SDK.

***

## Seguridad <a href="#id-24-lanzamiento-de-los-componentes" id="id-24-lanzamiento-de-los-componentes"></a>

El SDK de Android incorpora un sistema de seguridad destinado a detectar y bloquear entornos potencialmente poco fiables o que puedan indicar intentos de ataque.<br>

Este mecanismo está habilitado por defecto, permite identificar situaciones que podrían comprometer la seguridad y previene la ejecución del SDK en contextos que no se consideran seguros:

```
SDKController.securityMode(enable: Boolean) 
```

***
