# Inicializar el SDK

Antes de procesar cualquier transacción, debes inicializar el Get Mini Android SDK. Este proceso establece el entorno, valida la licencia de tu aplicación y autentica tus credenciales de comercio para preparar el SDK para las operaciones de pago.

El ciclo de vida del SDK sigue una secuencia específica: **Configuración** → **Autenticación (Inicio de Sesión)** → **Inicialización del PIN pad**.

## Requisitos

Antes de comenzar, asegúrate de que se completen los siguientes pasos:
- **SDK Añadido**: El fichero `.jar` de la biblioteca debe estar en tu carpeta `libs/`.
- **Dependencias Obligatorias**: Asegúrate de que las siguientes bibliotecas se añadan a tu `build.gradle` (requeridas para el inicio de sesión y seguridad):
    - `org.bouncycastle:bcprov-jdk16:1.45`
    - `com.google.code.gson:gson:2.8.5`
- **Permisos**: Los siguientes permisos deben estar declarados y otorgados:
    - `android.permission.BLUETOOTH`
    - `android.permission.BLUETOOTH_ADMIN`
    - `android.permission.INTERNET`
    - `android.permission.ACCESS_NETWORK_STATE`
- **Credenciales**: Necesitas una **Licencia de Aplicación** y **Credenciales de Usuario** válidas (usuario/contraseña).

---

## Paso 1: Configuración de la biblioteca

El primer paso en el ciclo de vida del SDK es establecer la configuración global. Esto debe hacerse cada vez que se inicie la aplicación.

```kotlin
import redcls.itpvpc.RedCLSConfigurationLibrary
import redcls.itpvpc.constants.RedCLSConstantes

// 1. Establecer el entorno de ejecución (REAL por defecto)
RedCLSConfigurationLibrary.setiEntorno(RedCLSConstantes.ENTORNO_INTEGRACION)

// Entornos disponibles:
// RedCLSConstantes.ENTORNO_REAL
// RedCLSConstantes.ENTORNO_INTEGRACION
// RedCLSConstantes.ENTORNO_CCAL (Certificación)
// RedCLSConstantes.ENTORNO_DESARROLLO (reservado para Redsys)

// 2. Inicializar tu Licencia de Aplicación única
RedCLSConfigurationLibrary.setAppLicense("SU_CLAVE_DE_LICENCIA")
```

---

## Paso 2: Login del comercio

A continuación, debes autenticarte para recuperar los detalles del comercio y el terminal requeridos para las transacciones. Este paso es obligatorio antes de cualquier operación con el PIN pad.

```kotlin
import redcls.itpvpc.RedCLSMerchantConfigurationManager
import redcls.itpvpc.data.RedCLSLoginData

val loginData = RedCLSLoginData(context, "usuario", "contraseña")

Thread {
    val response = RedCLSMerchantConfigurationManager.login(loginData)

    if (response.code == 0) {
        // Recuperar el terminal específico que utilizará para las transacciones
        val terminal = response.merchantList[0].terminalList[0]
        Log.d("GetMini", "Inicio de sesión exitoso para FUC: ${terminal.fuc}")

        // Proceder a la configuración del PIN pad usando el objeto 'terminal'
    } else {
        Log.e("GetMini", "Inicio de sesión fallido: ${response.desc}")
    }
}.start()
```

<Callout type="warning">

Para evitar requerir credenciales de usuario en cada inicio de la aplicación, considera implementar **Login Transparente** (Autologin) después de la primera autenticación exitosa.

</Callout>

---

## Paso 3: Conexión e inicialización del PIN pad

La etapa final del ciclo de vida es vincular el SDK al PIN pad físico. Debes conectarte al dispositivo y realizar una inicialización única para sincronizar claves y parámetros del terminal.

1. **Implementar la Interfaz**: Tu clase debe implementar `RedCLSPinPadInterface` para escuchar eventos de conexión.
2. **Conectar**: Instancia `RedCLSPinPadManager` con un `RedCLSConfigurationPinPadData` que incluya el número de serie del PIN pad en el campo `name`, y luego llama a `connectWithPinPad()` (sin parámetros) para iniciar la conexión.
3. **Inicializar**: Una vez conectado, llama a `inicializarPinpad()`.

```kotlin
override fun conexionPinPadRealizada() {
    Log.d("GetMini", "Conexión establecida. Iniciando inicialización...")

    Thread {
        // RedCLSInitPinpadResponse contiene un campo 'status' (0 para OK)
        val initResponse = pinpadManager.inicializarPinpad()
        if (initResponse.status == 0) {
            Log.i("GetMini", "SDK Completamente Inicializado y Listo para Ventas")
        } else {
            Log.e("GetMini", "Fallo en la inicialización: ${initResponse.msgKO}")
        }
    }.start()
}
```

---

## Manejo de fallos en el ciclo de vida

- **Errores de Configuración**: Asegúrate de que la `Licencia de Aplicación` sea válida para el entorno actual. Una licencia generada para Integración no funcionará en el entorno Real.
- **Errores de Login**: Verifica la conectividad a Internet. El SDK debe comunicarse con el servidor de pagos para validar las credenciales.
- **Errores del PIN pad**: Asegúrate de que el PIN pad esté encendido, en modo de emparejamiento Bluetooth y dentro del alcance del dispositivo Android.

## Próximos pasos

Con el SDK inicializado con éxito, puedes explorar guías detalladas de conectividad y pago:

* [Gestionar la Conectividad Bluetooth](/es/get-mini/android-sdk/guides/manage-bluetooth-connectivity): Profundiza en el ciclo de vida del PIN pad y el monitoreo del estado.
* [Crear una venta](/es/get-mini/android-sdk/guides/process-single-step-payments): Ejecuta transacciones de venta estándar.
* [Seguridad y Vinculación de Dispositivos](/es/get-mini/android-sdk/core-concepts/security-device-binding): Comprende la asociación de terminales y la seguridad.