Inicializando el POS
Antes de poder procesar cualquier transacción de pago, debes inicializar la app Tap on Phone. El proceso de inicialización establece una sesión segura, activa la validación de Single Sign-On (SSO) con tu backend y configura el terminal para el comercio específico.
Normalmente, realizas esta inicialización una vez cuando el comercio inicia sesión en tu app cliente. La sesión permanece activa entre los inicios de la app y los reinicios del dispositivo hasta que la restablece explícitamente.
Prerrequisitos
Antes de inicializar el POS, asegúrate de que tienes:
- El
userId,merchantIdyuserTokenactuales para el comercio autenticado. - El Client ID de tu organización, formateado como una cadena JSON.
- La integración de las APIs Activity Result de AndroidX para gestionar la respuesta del intent.
Paso 1: Registrar el Activity Result Launcher
La app Tap on Phone procesa la inicialización de forma asíncrona y podría mostrar una interfaz para solicitar al comercio los permisos necesarios del dispositivo (como el acceso a la ubicación).
Debes registrar un callback de Activity Result para gestionar el 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)
}
}Paso 2: Construir el Intent de inicialización
Crea un Android Intent explícito dirigido a la InitActivity de la app Tap on Phone. Debes incluir el nombre del paquete, el nombre de la clase específico y los parámetros obligatorios como extras del intent.
- Establece la clase del componente en
com.dejamobile.cbp.sps.app.InitActivity. - Formatea tu Client ID como una cadena JSON para pasarlo en el extra
operationMetadata. - Añade el
userId,merchantIdyuserToken.
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)
}Paso 3: Iniciar el Intent
Llama a tu función para iniciar el intent.
Cuando inicias este intent:
- La app Tap on Phone envía la solicitud de inicialización al backend.
- El backend envía una solicitud de permiso de SSO a tu backend.
- Si tu backend aprueba la solicitud (estado 200), la app Tap on Phone configura el terminal local.
- La Activity finaliza y devuelve
RESULT_OKa tu callback registrado.
Si necesitas cambiar de usuario o borrar la configuración actual, debes enviar un broadcast de reset antes de volver a llamar al intent de inicialización. Consulta Restablecimiento del POS para obtener instrucciones.