# Arquitectura

Esta página explica la arquitectura técnica de la integración Get Smart App2App para Android, detallando cómo interactúan y se comunican los componentes.

## Resumen del sistema

La integración App2App se basa en los mecanismos estándar de `Intent` de Android para facilitar la comunicación entre dos aplicaciones distintas instaladas en el mismo dispositivo:

1. **La aplicación externa (tu aplicación)** inicia el proceso y recibe el resultado.
2. **La aplicación Get Smart** procesa la transacción segura y gestiona la lógica de pago.

Esta separación de responsabilidades permite que tu aplicación aproveche la funcionalidad de pago sin necesidad de implementar los complejos requisitos de seguridad y cumplimiento del procesamiento de pagos.

## Arquitectura de componentes

La integración App2App involucra dos componentes distintos que trabajan juntos para procesar pagos. Comprender las responsabilidades de cada componente te ayudará a implementar la integración correctamente y a solucionar problemas de manera eficaz.

### Tu aplicación

Tu aplicación es responsable de:

* Generar la solicitud de pago con los detalles de la transacción (importe, tipo, número de pedido).
* Crear y lanzar el `Intent` de Android con el nombre de acción específico.
* Recibir y procesar el resultado de la transacción.
* Gestionar escenarios de error (p. ej., si falta la aplicación Get Smart).
* Administrar tu lógica de negocio basada en los resultados del pago.

### Aplicación Get Smart

La aplicación Get Smart (*Aplicación de Cobro*) gestiona:

* Lectura de la tarjeta.
* Comunicación con los sistemas de autorización.
* Seguridad de la transacción.
* Impresión de boletas (copias para el comercio y el cliente).

## Mecanismo de comunicación

La integración utiliza la comunicación estándar entre aplicaciones de Android a través de Intents.

### Comunicación basada en Intent

La comunicación sigue este patrón:

1. **Creación del Intent**: Tu aplicación crea un Intent con un nombre de acción específico.
2. **Paso de parámetros**: Los parámetros de la transacción se añaden como extras del Intent.
3. **Lanzamiento de la Activity**: El Intent se lanza mediante `startActivityForResult`.
4. **Procesamiento de la transacción**: La aplicación Get Smart toma el control y procesa el pago.
5. **Retorno del resultado**: La aplicación Get Smart devuelve el control con los resultados de la transacción como extras del Intent.
6. **Gestión del resultado**: Tu aplicación procesa el resultado en `onActivityResult`.

### Nombre de acción del Intent

El nombre de acción específico utilizado para las solicitudes de pago es:

```
es.android.redsys.mPOS.movil.tpvAndroid_PAYMENT_REQUEST
```

Este nombre de acción es el identificador único que dirige el Intent a la aplicación Get Smart.

## Flujo de datos

El flujo de datos entre aplicaciones sigue esta secuencia:

![](https://static-devportal-ux.sensedia-eng.com/Pagonxt/staging/documentations/diagram-app2app-architecture-1773237824924-0sljfuhd.png)

## Consideraciones de seguridad

La arquitectura App2App está diseñada con la seguridad como principio fundamental, aprovechando el aislamiento de aplicaciones de Android para proteger los datos de pago sensibles. Comprender cómo funciona el modelo de seguridad te ayudará a implementar la integración correctamente.

### Aislamiento de aplicaciones

Cada aplicación se ejecuta en su propio sandbox de seguridad. Tu aplicación nunca tiene acceso directo a:

* Datos de la tarjeta (PAN, CVV, fecha de caducidad).
* Entradas de PIN.

La aplicación Get Smart gestiona todos los datos sensibles dentro de su entorno seguro.

### Transmisión de datos

Solo se transmiten metadatos de transacción no sensibles entre aplicaciones:

* Importe de la transacción.
* Tipo de operación (venta/devolución).
* Números de factura/pedido.
* Resultados de autorización.
* Códigos de respuesta.

### Ahorro en certificación

Como la aplicación Get Smart es el único componente que maneja los datos de la tarjeta y
la comunicación con los sistemas de autorización, tu aplicación evita el coste de
certificar una solución de pago completa.

## Requisitos de configuración

La arquitectura requiere una configuración mínima:

### Sin permisos especiales

Tu `AndroidManifest.xml` no requiere ningún permiso especial para:

* Comunicación entre aplicaciones.
* Procesamiento de pagos.
* Lectura de tarjetas.
* Acceso a la red.

El mecanismo estándar `startActivityForResult` funciona sin configuración adicional.

### Sin dependencias externas

Tu aplicación no necesita:

* Incluir ningún SDK o biblioteca de Get Smart.
* Configurar claves de API o credenciales.
* Gestionar el emparejamiento o registro de dispositivos.

La integración depende totalmente del sistema de Intent nativo de Android.

## Gestión de errores

Una gestión de errores adecuada garantiza que tu aplicación administre de forma elegante los escenarios en los que la aplicación Get Smart no esté disponible o sea incompatible. La implementación de estas comprobaciones de errores mejora la experiencia del usuario y ayuda a prevenir fallos en la aplicación.

### Aplicación ausente

Si la aplicación Get Smart no está instalada, Android lanzará una `ActivityNotFoundException`. Tu aplicación debe capturar esta excepción e informar al usuario.

### Versión de la aplicación

Asegúrate siempre de que la aplicación Get Smart esté instalada y actualizada a la última versión.

## Próximos pasos

* Comprende el flujo de transacción detallado en [Flujo de la transacción](/es/get-smart/get-smart-app2app/core-concepts/transaction-flow)
* Aprende a crear un pago en [Crear un pago](/es/get-smart/get-smart-app2app/transaction-guides/transactions/create-a-single-step-payment)