FINORA Merchant · Guía
Operación: lector precalentado y medición de tiempos
Objetivo
Sección titulada «Objetivo»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.
Dónde se va el tiempo
Sección titulada «Dónde se va el tiempo»Medido el 2026-10-21 en un teléfono Android de gama media con lector Bluetooth, antes del lector precalentado:
| Tramo | Lector frío (primer cobro) | Lector ya conectado |
|---|---|---|
| Conexión Bluetooth | ≈ 2,3 s | 0 s |
| Lector listo para leer (tablas EMV) | ≈ 8 s más | Inmediato |
| 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.
Pasos: precalentar el lector
Sección titulada «Pasos: precalentar el lector»-
Llama a
prepararLectoren 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} -
Si quieres, espera a que quede listo antes de habilitar «Cobrar»: consulta
FinoraPago.estado(context)cada medio segundo hastalectorListo, con un tope de 30 s. No es obligatorio: con el lector frío FINORA Pago cobra igual, solo tarda más. -
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ó.
lectorEstado | Significado |
|---|---|
LISTO | Conectado y con las tablas confirmadas |
CONECTANDO, PREPARANDO | FINORA Pago lo está dejando listo |
DESCONECTADO | Se conectará al preparar o al cobrar |
ERROR | Apagado, fuera de alcance o sin vincular; motivo lo explica |
NO_APLICA | Lector interno o simulado: siempre listo |
null | FINORA Pago anterior a 0.16.0: prepararLector no hace nada y tu app no se rompe |
Pasos: medir
Sección titulada «Pasos: medir»-
Conecta el teléfono por USB con la depuración activada.
-
Haz varios cobros (por ejemplo cinco con el lector frío y cinco precalentado) en la variante de demostración.
-
Lee las marcas de FINORA Pago, etiqueta
FinoraTiempos:Ventana de terminal adb logcat -s FinoraTiemposI/FinoraTiempos: id=3 ref=FNR123 origen=SDK tramo=LECTOR_LISTO t=<ms> d=<ms> arranque=CALIENTEI/FinoraTiempos: resumen id=3 ref=FNR123 origen=SDK arranque=CALIENTE desenlace=Aprobado total=<ms> marcas=… -
Compara la mediana de cada tramo entre
arranque=FRIOyarranque=CALIENTE.
| Tramo | Qué marca |
|---|---|
SOLICITUD | Llegó tu petición |
ESPERANDO_TARJETA | La pantalla pide la tarjeta |
LECTOR_LISTO | El lector está listo (FRIO o CALIENTE) |
TARJETA_PRESENTADA, DATOS_LEIDOS | El cliente presentó la tarjeta / la lectura terminó |
ENVIO_AUTORIZACION, VEREDICTO | Sale la autorización / llega la respuesta |
FIRMA, RECIBO | Firma (si aplica) / recibo en pantalla |
RESPUESTA_INTEGRADOR | Tu 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.
Ejemplo de operación diaria
Sección titulada «Ejemplo de operación diaria»| Momento | Qué hace la app | Qué gana el cliente |
|---|---|---|
| El motorizado abre el pedido | prepararLector() | El lector conecta mientras maneja |
| Llega a la puerta | estado().lectorListo = true → botón «Cobrar» habilitado | Acerca la tarjeta y paga sin esperar |
| Pasan 15 min sin pedidos | FINORA Pago suelta el lector | Se ahorra batería del teléfono y del lector |
Verificación
Sección titulada «Verificación»- Con el lector apagado,
prepararLector()devuelvelectorEstado = ERRORcon su motivo. - Con el lector encendido, tras unos segundos
estado()devuelvelectorListo = true. - En
adb logcat -s FinoraTiempos, el primer cobro tras precalentar sale conarranque=CALIENTEy el tramo hastaLECTOR_LISTOes claramente menor que conFRIO.
Fin del curso
Sección titulada «Fin del curso»Has recorrido el cobro a domicilio completo. Vuelve a la página del curso para el ejercicio final y la lista de errores frecuentes.