Verificando o Status do POS
Antes de iniciar uma transação, você pode verificar se o aplicativo Tap on Phone está inicializado corretamente e pronto. Para fazer isso, você envia uma solicitação de status usando um Broadcast do Android.
Este guia mostra como solicitar o status atual do Ponto de Venda (POS) e como gerenciar a resposta.
Passo 1: Registrar um Broadcast Receiver
O aplicativo Tap on Phone processa sua solicitação de status de forma assíncrona e retorna o resultado via um broadcast. Você deve registrar um BroadcastReceiver para escutar esta resposta.
Você pode escutar a ação de resposta padrão (com.dejamobile.cbp.sps.STATUS_BROADCAST_RESPONSE) ou definir um nome de ação 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)Passo 2: Enviar o Broadcast de Status
Assim que o seu receiver estiver escutando, construa e envie o intent de broadcast para solicitar o status.
Você deve especificar o pacote do Tap on Phone e a classe 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 Resposta de Status
Quando o seu receiver captura a resposta, o intent contém vários extras. O mais importante é a string Status, que determina se você pode prosseguir com um pagamento.
| Valor de Status | Significado |
|---|---|
Initialized | O app POS foi inicializado com sucesso e está pronto para processar transações. |
None | O app POS não está inicializado. Você deve iniciar a InitActivity antes de processar pagamentos. |
Failed | A solicitação falhou. Tente abrir o aplicativo POS manualmente e tente novamente. |
Se o status for Initialized, o intent de resposta também inclui os seguintes extras opcionais:
merchantId: O ID do lojista atual.userId: O ID do usuário atual.merchantContractCode: O código de contrato do lojista atual.
Use o broadcast de status para garantir que o POS esteja pronto quando o seu aplicativo for retomado (onResume). Se o status retornar None, redirecione o lojista para o seu fluxo de inicialização.