Cambios de estado y traer tu aplicación al primer plano

  • Actualización

El interceptor entrega respuestas a las solicitudes que enviaste. Hay un segundo canal asíncrono separado: el observador de eventos, que te informa sobre el estado de la aplicación de pago — cuándo comienza un pago y cuándo termina — independientemente de quién lo haya iniciado. Esta guía explica ese canal y la única cosa que los desarrolladores más desean de él: traer su propia aplicación de vuelta al primer plano en el momento adecuado.


Dos canales, dos funciones

Mantén estas diferencias claras en tu mente:

  • El interceptor (cubierto en Cómo funciona el modelo de mensajes) recibe respuestas DomainMessage — el resultado de una solicitud que enviaste.
  • El observador de eventos recibe notificaciones de estado ObservableEvent — lo que la aplicación de pago está haciendo en este momento.

Registras el observador de eventos en la inicialización del SDK con bindEventObserver. El evento que más te interesa es ObservableEvent.TransactionStateChanged.

.bindEventObserver { event ->
    when (event) {
        is ObservableEvent.ServerEvent ->
            Logger.d("la aplicación de pago emitió un evento del servidor")
        is ObservableEvent.TransactionStateChanged ->
            when (event.state) {
                is PaymentTransactionState -> { /* un pago ha comenzado */ }
                is IdleTransactionState    -> { /* la aplicación de pago ha terminado */ }
                else -> { /* ignorar otros estados */ }
            }
    }
}

Los dos estados que importan

EstadoSignificadoLo que típicamente haces
PaymentTransactionStateEl procesamiento del pago ha comenzado. Opcional: trae tu aplicación al frente para mostrar una pantalla personalizada durante la autorización (tu marca, detalles de la transacción, un anuncio) en lugar de la interfaz predeterminada de la aplicación de pago.
IdleTransactionStateLa aplicación de pago ha terminado con la transacción. Recomendado: trae tu aplicación al frente para mostrar el resultado final al operador.

La razón por la que este canal existe separado de las respuestas: durante un pago, la aplicación de pago está en primer plano manejando la interacción con la tarjeta, no tu aplicación. Los eventos de estado te permiten decidir cuándo recuperar la pantalla.


Traer tu aplicación al primer plano

bringToForeground(MainActivity::class.java) trae tu aplicación de vuelta al frente de la aplicación de pago. Conéctalo a los estados que te interesan:

.bindEventObserver { event ->
    when (event) {
        is ObservableEvent.TransactionStateChanged ->
            when (event.state) {
                // Recomendado: venir al frente cuando el pago termina,
                // para mostrar el resultado.
                is IdleTransactionState -> bringToForeground(MainActivity::class.java)
                // Opcional: venir al frente mientras la autorización está en progreso,
                // por ejemplo, para mostrar tu propia interfaz en lugar del spinner de la aplicación de pago.
                is PaymentTransactionState -> bringToForeground(MainActivity::class.java)
                else -> { /* ignorar */ }
            }
        is ObservableEvent.ServerEvent -> Logger.d("evento del servidor")
    }
}

Si tu aplicación es de una sola actividad, simplemente pasa la clase de tu actividad principal — no necesitas preocuparte por qué pantalla estaba mostrando; el SDK trae la actividad al frente y se preserva tu propio estado de navegación.

Permiso requerido. bringToForeground solo funciona si tu aplicación ha recibido el permiso SYSTEM_ALERT_WINDOW. Sin él, la llamada no hace nada. Solicítalo como parte de la configuración de tu aplicación; en muchas versiones de terminal debe ser concedido explícitamente.


Elegir qué estados manejar

  • La mayoría de las integraciones solo manejan IdleTransactionState — vienen al frente cuando el pago termina para mostrar el resultado. Ese es el mínimo recomendado.
  • Maneja PaymentTransactionState también solo si tienes una razón para estar al frente durante la autorización — una pantalla de progreso personalizada, detalles de la transacción o publicidad. Si no, deja la aplicación de pago al frente; tiene su propia interfaz para el titular de la tarjeta.
  • Todo lo demás puede ser ignorado.

Relacionado

  • Cómo funciona el modelo de mensajes — el canal interceptor, el contraparte de este.
  • Inicio rápido — donde se registra por primera vez el observador de eventos.
  • Guía: pago — la operación cuyo estado rastrean estos eventos.

¿Fue útil este artículo?

Usuarios a los que les pareció útil: 0 de 0