Statuswijzigingen en het naar de voorgrond brengen van je app

  • Bijgewerkt

De interceptor levert reacties op verzoeken die je hebt verzonden. Er is een tweede, aparte asynchrone kanaal: de event observer, die je vertelt over de status van de betaalapplicatie — wanneer een betaling start en wanneer deze eindigt — ongeacht wie deze heeft geïnitieerd. Deze gids legt dat kanaal uit en het belangrijkste wat ontwikkelaars ervan willen: je eigen app op het juiste moment weer naar de voorgrond halen.


Twee kanalen, twee taken

Houd deze duidelijk gescheiden in je gedachten:

  • De interceptor (besproken in Hoe het berichtmodel werkt) ontvangt DomainMessage reacties — het resultaat van een verzoek dat je hebt verzonden.
  • De event observer ontvangt ObservableEvent statusmeldingen — wat de betaalapplicatie op dit moment doet.

Je registreert de event observer bij SDK-initialisatie met bindEventObserver. Het event dat je het meest interesseert is ObservableEvent.TransactionStateChanged.

.bindEventObserver { event ->
    when (event) {
        is ObservableEvent.ServerEvent ->
            Logger.d("betaalapplicatie heeft een server event uitgezonden")
        is ObservableEvent.TransactionStateChanged ->
            when (event.state) {
                is PaymentTransactionState -> { /* een betaling is gestart */ }
                is IdleTransactionState    -> { /* de betaalapplicatie is klaar */ }
                else -> { /* negeer andere statussen */ }
            }
    }
}

De twee belangrijke statussen

StatusBetekenisWat je doorgaans doet
PaymentTransactionStateDe betalingsverwerking is gestart. Optioneel: breng je app naar voren om een aangepaste scherm te tonen tijdens de autorisatie (jouw branding, transactiegegevens, een advertentie) in plaats van de standaard UI van de betaalapp.
IdleTransactionStateDe betaalapplicatie is klaar met de transactie. Aangeraden: breng je app naar voren om het eindresultaat aan de operator te tonen.

De reden dat dit kanaal losstaat van reacties: tijdens een betaling staat de betaalapplicatie op de voorgrond en bestuurt de kaartinteractie, niet jouw app. De status-events laten je beslissen wanneer je het scherm terugneemt.


Je app naar de voorgrond brengen

bringToForeground(MainActivity::class.java) haalt je applicatie weer naar voren, voor de betaalapplicatie. Koppel het aan de status(sen) die je interesseren:

.bindEventObserver { event ->
    when (event) {
        is ObservableEvent.TransactionStateChanged ->
            when (event.state) {
                // Aanbevolen: naar voren komen wanneer de betaling eindigt,
                // om het resultaat te tonen.
                is IdleTransactionState -> bringToForeground(MainActivity::class.java)
                // Optioneel: naar voren komen terwijl de autorisatie bezig is,
                // bijvoorbeeld om je eigen UI te tonen in plaats van de spinner van de betaalapp.
                is PaymentTransactionState -> bringToForeground(MainActivity::class.java)
                else -> { /* negeren */ }
            }
        is ObservableEvent.ServerEvent -> Logger.d("server event")
    }
}

Als je app één activiteit heeft, geef dan gewoon je hoofdactiviteitklasse door — je hoeft je geen zorgen te maken over welk scherm zichtbaar was; de SDK brengt de activiteit naar voren en je eigen navigatiestatus blijft behouden.

Vereiste toestemming. bringToForeground werkt alleen als je applicatie de SYSTEM_ALERT_WINDOW toestemming heeft gekregen. Zonder deze doet de aanroep niets. Vraag deze toestemming aan als onderdeel van de setup van je app; bij veel terminal-builds moet deze expliciet worden verleend.


Kiezen welke statussen je afhandelt

  • De meeste integraties handelen alleen IdleTransactionState af — kom naar voren wanneer de betaling eindigt om het resultaat te tonen. Dat is het aanbevolen minimum.
  • Behandel PaymentTransactionState ook alleen als je een reden hebt om tijdens de autorisatie voor te staan — een aangepast voortgangsscherm, transactiegegevens of reclame. Als je dat niet hebt, laat dan de betaalapp vooraan; die heeft zijn eigen kaarthouder UI.
  • Alles anders kan genegeerd worden.

Gerelateerd

  • Hoe het berichtmodel werkt — het interceptor-kanaal, het tegenhanger van dit kanaal.
  • Quickstart — waar de event observer voor het eerst wordt geregistreerd.
  • Gids: betaling — de operatie waarvan de status door deze events wordt gevolgd.

Was dit artikel nuttig?

Aantal gebruikers dat dit nuttig vond: 0 van 0