# Gestionar el PIN pad Bluetooth

El framework Get Mini gestiona la comunicación con dispositivos PIN pad físicos a través del `RedsysPinpadManager`. Esta guía explica cómo inicializar el administrador, escanear accesorios Bluetooth y establecer una conexión.

## Requisitos

- **Permisos**: Agrega "Supported external accessory protocols" a tu `Info.plist` con los protocolos específicos para tu hardware (ej., `com.datecs.PIN pad`, `com.ingenico.easypayemv.spm-transaction`, o `com.verifone.pmr.xpi`).
- **Hardware**: Usa un dispositivo iOS físico y un PIN pad certificado.
- **Delegados**: Tu clase debe implementar `RedsysDelegateGeneric`, `RedsysBTPinpadInitDelegate` y `RedsysBTPinpadPaymentDelegate`.

## Paso 1: Inicializar el administrador

A diferencia de un singleton, debes instanciar el administrador y especificar el tipo de tecnología Bluetooth. Para casi todos los dispositivos excepto FlyPOS, usa `pinpadBluetooth`; para FlyPOS usa `pinpadBluetoothPan`.

```
// Implementación Swift
import Redsys_SDK // Asegúrate de que los encabezados estén en tu bridging header

let pinpadManager = RedsysPinpadManager(bluetoothTech: .pinpadBluetooth)
```

## Paso 2: Escanear dispositivos

El SDK aprovecha el framework External Accessory de iOS. Para encontrar PIN pads cercanos, usa `findBluetoothDevices`. Los resultados se devuelven vía el callback `onProcessOK` como un array de objetos `EAAccessory`.

```
func scanForReaders() {
    // Esto dispara el proceso de descubrimiento
    pinpadManager.findBluetoothDevices(self)
}

// Callback del Delegado
func onProcessOK(_ result: Any!) {
    if let devices = result as? [EAAccessory], !devices.isEmpty {
        self.availableDevices = devices
        // Actualiza tu lista UI con device.name
    }
}

func onProcessError(_ error: Error!) {
    print("Error escaneando: \(error.localizedDescription)")
}
```

## Paso 3: Conectar y configurar

Conectar es un paso combinado donde enlazas el hardware seleccionado a tus credenciales de comercio. Debes proporcionar un objeto `MerchanDTO` conteniendo tu FUC, Terminal y Clave de Comercio.

```
func connectToDevice(device: EAAccessory) {
    let merchant = MerchanDTO()
    merchant.fuc = "999008881"
    merchant.terminal = "1"
    merchant.claveComercio = "su_clave"
    merchant.nombreComercio = "Mi Tienda"

    // Conecta e inicia el proceso de inicialización
    pinpadManager.connectAndConfigureDevice(
        device,
        merchan: merchant,
        withDelegate: self
    )
}
```

## Paso 4: Monitorear el estado de inicialización

Dado que los PIN pads requieren configuración interna (claves, parámetros), el SDK proporciona callbacks específicos para monitorear este progreso.

```
// Llamado durante diferentes fases de configuración
func onInitProcess(_ result: Any!) {
    print("Progreso de Configuración: \(result as? String ?? "")")
}

// Resultado final de la conexión/configuración
func onInitFinished(_ result: PinpadConfig!, orError error: Error!) {
    if let config = result {
        print("PIN pad listo para pagos")
        self.activeConfig = config // Almacena esto para llamadas payWithPinpadBluetooth
    } else {
        print("Inicialización fallida: \(error.localizedDescription)")
    }
}
```

## Solución de problemas

**Dispositivo No Aparece en la Lista**

1. **Emparejamiento del Sistema**: Asegúrate de que el PIN pad esté emparejado en la Configuración de Bluetooth del Sistema iOS primero. El SDK solo "ve" dispositivos que el sistema ha autorizado.
2. **Protocolos**: Verifica dos veces tu `Info.plist`. Si la cadena de protocolo (ej., `com.datecs.PIN pad`) falta o está mal escrita, el SDK ignorará el dispositivo.
3. **PPID**: Al enviar a la App Store, debes informar a Apple del PPID proporcionado por el fabricante del hardware o solicitado a través de Redsys (solo para PIN pads certificados).

**Errores de Conexión**

- **En Uso**: Asegúrate de que ninguna otra app esté actualmente conectada al PIN pad.
- **Clave de Comercio**: Un error "STATUS KO" durante `onInitFinished` generalmente indica una `claveComercio` incorrecta o un desajuste de FUC/Terminal en el `MerchanDTO`.

## Próximos pasos

- [Crear una venta](/es/get-mini/ios-sdk/guides/single-step-payment-ios) - Usa tu PinpadConfig para iniciar una venta.
- [Usar el entorno de pruebas](/es/get-mini/ios-sdk/guides/use-test-environment) - Configura modo "int" para pruebas iniciales.