Ir al contenido
FINORA Academy
SistemaFINORA Merchant

FINORA Merchant · Guía

Operación: lector precalentado y medición de tiempos

PilotoImplementadoIntermedio15 min

Que el cliente no espere al lector en la puerta y que puedas medir cuánto tarda cada parte del cobro, con cifras y no con impresiones.

Medido el 2026-10-21 en un teléfono Android de gama media con lector Bluetooth, antes del lector precalentado:

TramoLector frío (primer cobro)Lector ya conectado
Conexión Bluetooth≈ 2,3 s0 s
Lector listo para leer (tablas EMV)≈ 8 s másInmediato
Autorización ida y vuelta≈ 0,5 s≈ 0,5 s

El cuello de botella no es la red ni la autorización: es conectar el lector y dejarlo listo. Desde FINORA Pago 0.16.0 el lector recuerda sus tablas y al reconectar solo las confirma; y tu app puede prepararlo antes del cobro.

  1. Llama a prepararLector en cuanto sepas que viene un cobro (al abrir el pedido, al llegar a la dirección, al mostrar el total). No abre pantalla, no crea órdenes, no lee tarjetas:

    lifecycleScope.launch {
    val e = withContext(Dispatchers.IO) { FinoraPago.prepararLector(context) }
    if (e.lectorEstado == Contrato.EstadoLector.ERROR) avisar(e.motivo) // lector apagado o lejos
    }
  2. Si quieres, espera a que quede listo antes de habilitar «Cobrar»: consulta FinoraPago.estado(context) cada medio segundo hasta lectorListo, con un tope de 30 s. No es obligatorio: con el lector frío FINORA Pago cobra igual, solo tarda más.

  3. Ajusta la ventana en la que el lector se mantiene listo. El comercio la cambia por terminal en su consola, parámetro «Lector listo (minutos)»: de 0 a 240, 15 por defecto; 0 apaga el precalentado. Mientras haya actividad, FINORA Pago revisa el enlace cada 30 s y lo reconecta si se cayó.

lectorEstadoSignificado
LISTOConectado y con las tablas confirmadas
CONECTANDO, PREPARANDOFINORA Pago lo está dejando listo
DESCONECTADOSe conectará al preparar o al cobrar
ERRORApagado, fuera de alcance o sin vincular; motivo lo explica
NO_APLICALector interno o simulado: siempre listo
nullFINORA Pago anterior a 0.16.0: prepararLector no hace nada y tu app no se rompe
  1. Conecta el teléfono por USB con la depuración activada.

  2. Haz varios cobros (por ejemplo cinco con el lector frío y cinco precalentado) en la variante de demostración.

  3. Lee las marcas de FINORA Pago, etiqueta FinoraTiempos:

    Ventana de terminal
    adb logcat -s FinoraTiempos
    I/FinoraTiempos: id=3 ref=FNR123 origen=SDK tramo=LECTOR_LISTO t=<ms> d=<ms> arranque=CALIENTE
    I/FinoraTiempos: resumen id=3 ref=FNR123 origen=SDK arranque=CALIENTE desenlace=Aprobado total=<ms> marcas=…
  4. Compara la mediana de cada tramo entre arranque=FRIO y arranque=CALIENTE.

TramoQué marca
SOLICITUDLlegó tu petición
ESPERANDO_TARJETALa pantalla pide la tarjeta
LECTOR_LISTOEl lector está listo (FRIO o CALIENTE)
TARJETA_PRESENTADA, DATOS_LEIDOSEl cliente presentó la tarjeta / la lectura terminó
ENVIO_AUTORIZACION, VEREDICTOSale la autorización / llega la respuesta
FIRMA, RECIBOFirma (si aplica) / recibo en pantalla
RESPUESTA_INTEGRADORTu app ya tiene el resultado

t son milisegundos desde la solicitud y d desde la marca anterior. Las líneas no llevan datos de tarjeta ni del cliente: solo la referencia de la orden, el tramo y los tiempos.

MomentoQué hace la appQué gana el cliente
El motorizado abre el pedidoprepararLector()El lector conecta mientras maneja
Llega a la puertaestado().lectorListo = true → botón «Cobrar» habilitadoAcerca la tarjeta y paga sin esperar
Pasan 15 min sin pedidosFINORA Pago suelta el lectorSe ahorra batería del teléfono y del lector
  • Con el lector apagado, prepararLector() devuelve lectorEstado = ERROR con su motivo.
  • Con el lector encendido, tras unos segundos estado() devuelve lectorListo = true.
  • En adb logcat -s FinoraTiempos, el primer cobro tras precalentar sale con arranque=CALIENTE y el tramo hasta LECTOR_LISTO es claramente menor que con FRIO.

Has recorrido el cobro a domicilio completo. Vuelve a la página del curso para el ejercicio final y la lista de errores frecuentes.