Comprobación del estado del POS
Antes de iniciar una transacción, puedes verificar si la app Tap on Phone está correctamente inicializada y lista. Para ello, envía una solicitud de estado utilizando un broadcast de Android.
Esta guía muestra cómo solicitar el estado actual del Punto de Venta (POS) y cómo gestionar la respuesta.
Paso 1: Registrar un Broadcast Receiver
La app Tap on Phone procesa tu solicitud de estado de forma asíncrona y devuelve el resultado a través de un broadcast. Debes registrar un BroadcastReceiver para escuchar esta respuesta.
Puedes escuchar la acción de respuesta predeterminada (com.dejamobile.cbp.sps.STATUS_BROADCAST_RESPONSE) o definir un nombre de acción personalizado.
// Define your broadcast action (default or custom)
val responseAction = "com.dejamobile.cbp.sps.STATUS_BROADCAST_RESPONSE"
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val status = intent?.getStringExtra("Status") ?: "Unknown"
val info = intent?.getStringExtra("Info") ?: ""
when (status) {
"Initialized" -> println("POS is ready to process payments.")
"None" -> println("POS is not initialized. Call InitActivity first.")
"Failed" -> println("The status request failed. Try launching the POS app and retry.")
else -> println("Unknown status received.")
}
// Unregister the receiver once handled
context?.unregisterReceiver(this)
}
}
// Register the receiver
val filter \= IntentFilter(responseAction)
registerReceiver(receiver, filter)Paso 2: Enviar el broadcast de estado
Una vez que tu receiver esté escuchando, construye y envía el intent de broadcast para solicitar el estado.
Debes especificar el paquete de Tap on Phone y la clase StatusBroadcastReceiver.
val intent = Intent().apply {
action = "com.dejamobile.cbp.sps.STATUS_BROADCAST"
component = ComponentName(
"com.dejamobile.cbp.sps.app",
"com.dejamobile.cbp.sps.app.broadcast.StatusBroadcastReceiver"
)
addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
// Optional: Specify your custom response action
// putExtra("ResponseAction", responseAction)
}
// Send the broadcast
sendBroadcast(intent)Parámetros de respuesta de estado
Cuando tu receiver captura la respuesta, el intent contiene varios extras. El más importante es la cadena Status, que determina si puedes continuar con un pago.
| Valor de Estado | Significado |
|---|---|
Initialized | La app POS se ha inicializado correctamente y está lista para procesar transacciones. |
None | La app POS no está inicializada. Debes iniciar la InitActivity antes de procesar pagos. |
Failed | La solicitud ha fallado. Intenta abrir la app POS manualmente y vuelve a intentarlo. |
Si el estado es Initialized, el intent de respuesta también incluye los siguientes extras opcionales:
merchantId: El ID del comercio actual.userId: El ID del usuario actual.merchantContractCode: El código de contrato del comercio actual.
Utiliza el broadcast de estado para asegurarte de que el POS está listo cuando se reanuda tu app (onResume). Si el estado devuelve None, redirige al comercio a tu flujo de inicialización.