Inicializando o POS
Antes de poder processar quaisquer transações de pagamento, você deve inicializar o aplicativo Tap on Phone. O processo de inicialização estabelece uma sessão segura, aciona a validação de Single Sign-On (SSO) com o seu backend e configura o terminal para o lojista específico.
Normalmente, você realiza essa inicialização uma vez quando o lojista faz login no seu aplicativo cliente. A sessão permanece ativa entre as inicializações do app e as reinicializações do dispositivo até que você a redefina (reset) explicitamente.
Pré-requisitos
Antes de inicializar o POS, certifique-se de que você tem:
- O
userId,merchantIdeuserTokenatuais para o lojista autenticado. - O
ClientIDda sua organização, formatado como uma string JSON. - Implementou as APIs Activity Result do AndroidX para gerenciar a resposta do intent.
Passo 1: Registrar o Activity Result Launcher
O app Tap on Phone processa a inicialização de forma assíncrona e pode exibir uma interface para solicitar as permissões necessárias do dispositivo (como acesso à localização) ao lojista.
Você deve registrar um callback de Activity Result para gerenciar o resultado final:
val posInitResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
// The POS is initialized and ready to process transactions
} else if (result.resultCode == Activity.RESULT_CANCELED) {
// The initialization failed
val data = result.data
val errorCode = data?.getStringExtra("errorCode") ?: "None"
val errorName = data?.getStringExtra("errorName") ?: "None"
val errorMessage = data?.getStringExtra("errorMessage") ?: "None"
// Handle the error (e.g., prompt the user to retry or contact support)
}
}Passo 2: Construir o Intent de Inicialização
Crie um Android Intent explícito direcionado à InitActivity do aplicativo Tap on Phone. Você deve incluir o package name, o class name específico e os parâmetros obrigatórios como extras do intent.
- Defina a classe do componente como
com.dejamobile.cbp.sps.app.InitActivity. - Formate o seu Client ID como uma string JSON para passar no extra
operationMetadata. - Adicione o
userId,merchantIdeuserToken.
private fun startPosInit(userId: Int, merchantId: Int, userToken: String, clientId: String) {
// Format the Client ID as a JSON string
val operationMetadata \= "{\\"ClientID\\":\\"$clientId\\"}"
val intent \= Intent().apply {
setClassName(
"com.dejamobile.cbp.sps.app",
"com.dejamobile.cbp.sps.app.InitActivity"
)
putExtra("userId", userId)
putExtra("merchantId", merchantId)
putExtra("userToken", userToken)
putExtra("operationMetadata", operationMetadata)
}
// Launch the intent
posInitResult.launch(intent)
}Passo 3: Iniciar o Intent
Chame a sua função para iniciar o intent.
Quando você inicia este intent:
- O app Tap on Phone envia a solicitação de inicialização para o backend.
- O backend envia uma solicitação de permissão de SSO para o seu backend.
- Se o seu backend aprovar a solicitação (HTTP 200), o app Tap on Phone configura o terminal local.
- A Activity é finalizada e retorna
RESULT_OKpara o seu callback registrado.
Se você precisar trocar de usuários ou limpar a configuração atual, você deve enviar um broadcast de reset antes de chamar o intent de inicialização novamente. Veja Redefinindo o POS para obter instruções.