Přeskočit na hlavní obsah

Instalace a inicializace

Přidání knihovny do projektu

Knihovna je distribuována jako AAR artefakt společně s POM souborem závislostí. Tyto soubory jsou merchantům poskytovány na vyžádání.

Doporučený postup integrace:

  1. Umístěte předaný AAR soubor do projektu (typicky do složky app/libs).
  2. Přidejte AAR jako závislost aplikace.
  3. Zajistěte dostupnost závislostí uvedených v předaném POM souboru.

Příklad základního přidání AAR v build.gradle.kts:

dependencies {
implementation(files("libs/comgateSdk-release.aar"))
}
Informace

POM soubor dodaný spolu s AAR obsahuje deklarované závislosti knihovny. Při integraci vždy vycházejte z těchto dodaných artefaktů (AAR + POM).

Upozornění

Knihovna vyžaduje compileSdk 34minSdk 28. Ověřte, že konfigurace vaší aplikace splňuje tyto požadavky.

Konfigurace AndroidManifest.xml

Knihovna ve svém manifestu automaticky deklaruje potřebná oprávnění a komponenty. Ujistěte se, že vaše aplikace má povolení pro přístup k internetu:

<uses-permission android:name="android.permission.INTERNET" />

Pro využití Google Pay je v manifestu knihovny automaticky registrován meta-data záznam:

<meta-data
android:name="com.google.android.gms.wallet.api.enabled"
android:value="true" />

Vytvoření session

Třída ComgateSecureSession je hlavním vstupním bodem pro práci s knihovnou. Session zajišťuje:

  • interní bezpečnostní inicializaci,
  • inicializaci 3D Secure,
  • zpracování karetních plateb a Google Pay plateb.

Parametry konstruktoru

ParametrTypPovinnýPopis
checkoutIdStringIdentifikátor Checkout SDK propojení. Získáte v klientském portálu Comgate.
emailStringE-mailová adresa zákazníka.
contextContextAndroid kontext aplikace (typicky applicationContext).
threeDSConfigThreeDSConfigKonfigurace 3D Secure (UI, timeout, verze protokolu). Podrobnosti v sekci Karetní data - 3D Secure.
lifecycleOwnerLifecycleOwnerVlastník životního cyklu (např. Activity/Fragment). Session se zaregistruje jako observer a při onDestroy() automaticky uvolní zdroje.
devModeBooleanZapíná vývojový/testovací režim (např. dev SSL). Ovlivňuje také prostředí Google Pay — true přepne na testovací prostředí (TEST), false na produkční (PRODUCTION). Výchozí false.
googleMerchantIdString?Google Pay Merchant ID. Povinný pro Google Pay v produkci.
googleMerchantNameString?Název obchodníka zobrazený v Google Pay platebním dialogu.
translationTranslationPřeklady textů komponent. Výchozí Translation.English.
onInitialized((Result<Unit>) -> Unit)?Volitelný callback pro automatickou inicializaci session z konstruktoru.
Informace

Síťová infrastruktura a komunikace jsou interně řízené knihovnou. Při standardní integraci není potřeba nic měnit.

Inicializace

Doporučený způsob inicializace je předat callback onInitialized přímo do konstruktoru ComgateSecureSession.

Android context se předává přímo do konstruktoru, kde je interně uložen (application context). Samostatné volání initializeContext(...) již není potřeba.

class MainActivity : AppCompatActivity() {

private lateinit var session: ComgateSecureSession

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

session = ComgateSecureSession(
checkoutId = "váš-checkout-id",
email = "zakaznik@example.com",
context = applicationContext,
threeDSConfig = ThreeDSConfig(), // výchozí 3DS konfigurace
lifecycleOwner = this,
onInitialized = { result ->
result.onSuccess {
// Session je připravena - lze zpracovávat platby
}.onFailure { e ->
// Chyba inicializace
Log.e("Payment", "Init failed: ${e.message}")
}
}
)

setContent {
MaterialTheme {
Surface(modifier = Modifier.fillMaxSize()) {
// Váš platební formulář — viz sekce Karetní data
}
}
}
}

}
Informace

Callback onInitialized (i callback metody initialize) je volán na hlavním vlákně (main thread). Můžete v něm přímo aktualizovat UI.

Ruční inicializace (alternativa)

Pokud potřebujete inicializaci spustit později, lze použít initialize(callback) ručně:

val session = ComgateSecureSession(
checkoutId = "váš-checkout-id",
email = "zakaznik@example.com",
context = applicationContext,
threeDSConfig = ThreeDSConfig(),
lifecycleOwner = this
)

session.initialize { result ->
result.onSuccess {
// Session je připravena
}.onFailure { e ->
// Chyba inicializace
}
}

Stav session (SessionState)

ComgateSecureSession vystavuje property sessionState typu SessionState, která v každém okamžiku popisuje aktuální fázi životního cyklu session. Pro jednoduché kontroly (true/false) je k dispozici také zkratka isInitialized.

Stavy

StavKdy platí
SessionState.NotInitializedSession byla právě vytvořena nebo byl zavolán cleanup() (lifecycle destroy). initialize() zatím nebyla volána.
SessionState.Initializinginitialize() právě probíhá — probíhá síťová komunikace a inicializace 3DS SDK.
SessionState.ReadyInicializace úspěšně dokončena. Session je připravena zpracovávat platby.
SessionState.Failed(error)Inicializace selhala. Property error (typ ComgateError) nese konkrétní příčinu. Session lze znovu inicializovat voláním initialize().

Typický životní cyklus

NotInitialized → Initializing → Ready
↘ Failed → Initializing → Ready (opakovaný pokus)
Ready → NotInitialized (lifecycle destroy)

Vlastnosti session

VlastnostTypPopis
sessionStateSessionStateAktuální stav session (viz tabulka výše).
isInitializedBooleanZkratka: true právě tehdy, když sessionState == SessionState.Ready.

Použití v UI (Compose)

Přečtením session.sessionState lze granulárně reagovat na každý stav a zobrazovat příslušný UI prvek:

// Composable reagující na stav session
when (session.sessionState) {
SessionState.NotInitialized -> {
Button(onClick = { session.initialize { /* … */ } }) {
Text("Inicializovat")
}
}
SessionState.Initializing -> {
CircularProgressIndicator()
}
SessionState.Ready -> {
// Platební formulář je připraven
PaymentForm(session = session)
}
is SessionState.Failed -> {
val error = (session.sessionState as SessionState.Failed).error
Text("Chyba inicializace: ${error.message}")
Button(onClick = { session.initialize { /* … */ } }) {
Text("Zkusit znovu")
}
}
}

Chyby při inicializaci

Stav SessionState.Failed nese ComgateError s popisem příčiny. Nejčastější chyby při inicializaci:

ChybaKódPopis
ComgateError.InitNetworkErrorINIT_NETWORK_ERRORSíťová chyba při stahování konfigurace.
ComgateError.InitFailedINIT_FAILEDInicializace selhala z jiného důvodu (např. neplatná odpověď serveru).
ComgateError.ApplicationNotAllowedAPPLICATION_NOT_ALLOWEDPackage name aplikace není na seznamu povolených aplikací.
Informace

Callback předaný do initialize() (nebo onInitialized) a přechod stavu na Ready/Failed jsou vždy doručeny na hlavním vlákně. sessionState lze bezpečně číst z jakéhokoli vlákna (property je označena jako @Volatile), ale UI aktualizace provádějte vždy na hlavním vlákně.

Tip

Pokud initialize() zavoláte znovu, zatímco session je ve stavu Initializing, callback okamžitě obdrží chybu ComgateError.InitFailed. Počkejte na přechod do stavu Ready nebo Failed, než inicializaci opakujete.

Překlady (lokalizace)

Texty komponent lze lokalizovat pomocí Translation.

  • Překlady se předávají do ComgateSecureSession parametrem translation
  • Lze použít vestavěný preset nebo vlastní instanci Translation
  • Uživatelsky nastavitelné jsou pouze tyto klíče:
KlíčPopis
panHintPlaceholder text v poli pro číslo karty (PAN).
expiryHintPlaceholder text v poli pro datum platnosti (např. MM/RR).
cvvHintPlaceholder text v poli pro CVV kód.
panInvalidErrorChybová zpráva zobrazená pod PAN polem při zadání neplatného čísla karty.
expiryInvalidMonthErrorChybová zpráva zobrazená pod polem expirace při zadání neplatného měsíce (např. 13).
expiryExpiredErrorChybová zpráva zobrazená pod polem expirace, když je karta prošlá.
payButtonTextText platebního tlačítka v klidovém (aktivním) stavu.
payButtonProcessingTextText platebního tlačítka během zpracování platby.
statusPaidZpráva zobrazená v SecurePaymentStatusView při úspěšné platbě.
statusPendingZpráva zobrazená v SecurePaymentStatusView, když platba čeká na finální stav.
loadingProcessingTextText zobrazený v SecureLoadingView (překryvná vrstva) během zpracování platby.
threeDSCancelButtonText tlačítka pro zrušení v dialogu 3D Secure ověření.

Aktuálně dostupné překlady

PřekladHodnota
AngličtinaTranslation.English
BulharštinaTranslation.Bulgarian
ČeštinaTranslation.Czech
DánštinaTranslation.Danish
EstonštinaTranslation.Estonian
FinštinaTranslation.Finnish
FrancouzštinaTranslation.French
ChorvatštinaTranslation.Croatian
ItalštinaTranslation.Italian
LitevštinaTranslation.Lithuanian
LotyšštinaTranslation.Latvian
MaďarštinaTranslation.Hungarian
NěmčinaTranslation.German
NizozemštinaTranslation.Dutch
NorštinaTranslation.Norwegian
PolštinaTranslation.Polish
PortugalštinaTranslation.Portuguese
RumunštinaTranslation.Romanian
RuštinaTranslation.Russian
ŘečtinaTranslation.Greek
SlovenštinaTranslation.Slovak
SlovinštinaTranslation.Slovenian
ŠpanělštinaTranslation.Spanish
ŠvédštinaTranslation.Swedish
UkrajinštinaTranslation.Ukrainian
VietnamštinaTranslation.Vietnamese
val translation = Translation(
panHint = "Číslo karty",
expiryHint = "MM/RR",
cvvHint = "CVV",
panInvalidError = "Neplatné číslo karty",
expiryInvalidMonthError = "Neplatný měsíc",
expiryExpiredError = "Karta je expirovaná",
payButtonText = "Zaplatit",
payButtonProcessingText = "Zpracovávám...",
statusPaid = "Zaplaceno",
statusPending = "Zpracovává se",
loadingProcessingText = "Zpracovávám platbu…",
threeDSCancelButton = "Zrušit"
)

val session = ComgateSecureSession(
checkoutId = "váš-checkout-id",
email = "zakaznik@example.com",
context = applicationContext,
threeDSConfig = ThreeDSConfig(),
translation = translation,
lifecycleOwner = this
)

Příklad s vestavěným překladem:

val session = ComgateSecureSession(
checkoutId = "váš-checkout-id",
email = "zakaznik@example.com",
context = applicationContext,
threeDSConfig = ThreeDSConfig(),
translation = Translation.Czech,
lifecycleOwner = this
)

Při použití rozdělených polí (SecurePanField, SecureExpiryField, SecureCvvField) se texty aplikují přes session a použité komponenty knihovny.