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
DomainMessagereacties — het resultaat van een verzoek dat je hebt verzonden. -
De event observer ontvangt
ObservableEventstatusmeldingen — 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
| Status | Betekenis | Wat je doorgaans doet |
|---|---|---|
PaymentTransactionState | De 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. |
IdleTransactionState | De 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.
bringToForegroundwerkt alleen als je applicatie deSYSTEM_ALERT_WINDOWtoestemming 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
IdleTransactionStateaf — kom naar voren wanneer de betaling eindigt om het resultaat te tonen. Dat is het aanbevolen minimum. -
Behandel
PaymentTransactionStateook 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.