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.plistcon los protocolos específicos para tu hardware (ej.,com.datecs.PIN pad,com.ingenico.easypayemv.spm-transaction, ocom.verifone.pmr.xpi). - Hardware: Usa un dispositivo iOS físico y un PIN pad certificado.
- Delegados: Tu clase debe implementar
RedsysDelegateGeneric,RedsysBTPinpadInitDelegateyRedsysBTPinpadPaymentDelegate.
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
- 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.
- 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. - 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
onInitFinishedgeneralmente indica unaclaveComercioincorrecta o un desajuste de FUC/Terminal en elMerchanDTO.
Próximos pasos
- Crear una venta - Usa tu PinpadConfig para iniciar una venta.
- Usar el entorno de pruebas - Configura modo “int” para pruebas iniciales.