Září bylo zatím naším nejrušnějším měsícem v historii Accept SDK. Vydali jsme osm verzí, od 1.10.0 ze 3. září po 1.15.0 z 23. září. Většina změn vzešla přímo z provozu u partnerů: pultové terminály, zařízení se dvěma displeji, prodejny s vlastními čtečkami karet a platformy, u kterých má platba vypadat stejně jako zbytek produktu.
Myšlenka zůstává stejná. Partner integruje jednou a zážitek obchodníka zůstává v jeho produktu, zatímco veškerou složitost plateb pod tím řeší Tapaya. Tady je, co to tento měsíc znamenalo v praxi.
Vlastní branding platebních obrazovek
Verze 1.14.0 přináší Accept.setTheme(). SDK tím umožňuje předat aplikaci Tapaya Terminal barvy a loga partnera, které se pak zobrazí na obrazovkách aktivace, stavu i platby. Obchodník tak vidí jeden produkt od začátku prodeje až po účtenku, bez přechodu na obrazovku, která vypadá jako cizí aplikace.
Motiv platí po celou relaci. Nastavuje se jednou, před initialize() nebo po něm, a zůstává aktivní, dokud se nezmění nebo nezruší. Pro loga vybraná z galerie v telefonu, která nejsou nikde na webu, je k dispozici Accept.createLocalThemeImageUri(): z lokálního obrázku vytvoří URI, které terminálová aplikace dokáže načíst.
Podpora platby na dvou displejích
Verze 1.10.0 přidává podporu zařízení se dvěma displeji („oboustranných“). Accept.displays poskytuje přehled obrazovek, které zařízení má, a nová volba PaymentDisplay umožňuje zobrazit platební rozhraní na displeji zákazníka, zatímco aplikace partnera zůstává na displeji obchodníka.
Accept.payments.pay(
amount = 1500,
currency = "CZK",
display = PaymentDisplay.CustomerFacing,
)Pokud zařízení požadavek splnit nedokáže, například CustomerFacing na telefonu s jedním displejem, SDK použije výchozí obrazovku. Stejný kód tak funguje na všech podporovaných zařízeních. Celou platbu na dvou displejích předvádí nová ukázková aplikace :dualscreen.
Odkaz na účtenku hned od první události
Verze 1.12.0 zpřístupňuje URL hostované účtenky přímo v platebním toku. PaymentEvent.Created nově obsahuje receiptUrl vedle platebního tokenu, takže odkaz je k dispozici ještě předtím, než se Tapaya Terminal otevře. Obsahují ho i PayResult.Success a PayResult.Declined, takže dokončená platba nese vše potřebné a kvůli zobrazení účtenky už není nutné volat status().
Odkaz funguje od chvíle, kdy platba vznikne, a po jejím vypořádání zobrazí finální účtenku. Obě pole mohou být null a to je i jejich výchozí hodnota, takže stávající integrace se dál zkompilují beze změn.
Podpora externích čteček karet
Verze 1.11.0 přidává NfcPositionConfig.ExternalReader pro situace, kdy je čtečka karet samostatné zařízení: čtečka na pultu, pinpad na boku nebo dok otočený k zákazníkovi. Na telefonu v tu chvíli není místo, na které by šlo ukázat, a tak Tapaya Terminal skryje animaci přiložení a zobrazí částku s krátkou výzvou pod ní. Výchozí text výzvy lze nahradit vlastním přes message.
Accept.payments.setOptions(
nfcPosition = NfcPositionConfig.ExternalReader(message = "Přiložte kartu ke čtečce"),
)Funkce vyžaduje Tapaya Terminal 1.5.2 nebo novější. Starší verze nastavení ignorují a fungují jako dřív.
Platby bez čekání na polohu
Řada partnerů provozuje SDK na pultových terminálech a některá z těchto zařízení mají slabou nebo ne-Googlovou lokalizační službu. Verze 1.14.1, 1.14.2 a 1.15.0 to vyřešily nadobro.
pay()už nečeká na čerstvé určení polohy. Hned použije poslední známou polohu a na pozadí ji obnoví, když je starší než hodina. Terminál na pultu se mezi platbami nehýbe, takže hodinu stará poloha je stejně přesná jako nová.- Když SDK novou polohu opravdu potřebuje, zeptá se všech dostupných zdrojů najednou a použije první odpověď. Dřív zařízení, jehož hlavní lokalizační služba vypadala v pořádku, ale nikdy neodpověděla, selhalo s
LocationUnavailable, i když GPS a síťová poloha fungovaly. - Při studeném startu SDK nejdřív využije polohu, kterou Android už zná. Na polohu čeká jen terminál, který ji nikdy neměl, a to nejdéle 30 sekund.
Pro obchodníky to znamená rychlejší platby a mnohem méně chyb s polohou uprostřed prodeje.
Další vylepšení
- Srozumitelnější chyby při aktivaci terminálu (1.10.0, 1.14.0).
activateTerminal()nově místo obecnéhoUnknownvracíNoTidsAvailableForMerchant, když obchodníkovi nezbylo žádné volné ID terminálu. Pokud obchodník nedokončil onboarding, volání skončí hned sMerchantOnboardingIncomplete, což umožňuje vrátit ho na správný krok. - Žádné zamrzání UI při připojování k terminálové aplikaci (1.14.0). Volání do Tapaya Terminal nově běží mimo hlavní vlákno. Dřív mohlo pomalé první připojení spuštěné z
viewModelScope.launchzmrazit obrazovku nebo způsobit ANR. - Přesnější diagnostika
PluginUnavailable(1.13.0). SDK nově loguje, o který případ jde: Tapaya Terminal není nainstalovaný, je vypnutý, byl pro daného uživatele odebrán, nebo v manifestu aplikace chybí položka<queries>, kterou Android 11+ vyžaduje. Součástí záznamu je i verze terminálové aplikace a zdroj její instalace. Opravili jsme také únik spojení při neúspěšném připojení,SecurityException, která pronikala do kódu aplikace místoPluginUnavailable, a čekání na celý timeout, když proces terminálové aplikace během připojování spadl.
Aktualizace
Všechna zářijová vydání jsou zpětně kompatibilní. Stačí zvýšit verzi závislosti:
dependencies {
implementation("com.tapaya:accept:1.15.0")
}Pro nasazení na terminálech v terénu doporučujeme kvůli opravám polohy hlavně verzi 1.15.0. Kompletní changelog je v repozitáři Accept SDK na GitHubu a integrační návody na docs.tapaya.com. Dokumentaci lze připojit k IDE nebo AI agentovi také přes Tapaya MCP server.
Chybí v SDK něco, co partneři potřebují? Ozvěte se nám. Většina toho, co jsme v září vydali, začala rozhovorem s partnerem.
