Google Pay
Knihovna obsahuje komponentu SecureGooglePayButton, která zjednodušuje integraci Google Pay do vaší aplikace. Komponenta automaticky:
- ověří dostupnost Google Pay na zařízení,
- zobrazí standardní Google Pay tlačítko,
- zpracuje platební tok a získá platební token,
- odešle token ke zpracování na platební bránu.
Předpokladem pro využití Google Pay je aktivace Checkout API a správné nastavení v Google Play Console a Google Pay Console, které jsou popsány níže. Kompletní dokumentaci pro nativní integraci bez SDK naleznete v sekci Google Pay — Mobilní aplikace.
1. Google Play Console
Před nasazením Google Pay do produkční verze aplikace je nutné aplikaci správně nakonfigurovat a publikovat v obchodě Google Play. Tento krok je požadován společností Google a je nezbytný pro aktivaci Google Pay v souladu s jejími podmínkami.
Konfigurace, nahrávání a správa aplikace se provádí prostřednictvím rozhraní Google Play Console. Aplikace musí být dostupná minimálně v režimu interního nebo uzavřeného testování. Možností je také plné zveřejnění.
V dokumentaci není popsán podrobný postup nastavení v Google Play Console. Proces může být rozsáhlý a liší se podle konkrétní situace, proto doporučujeme řídit se oficiálními pokyny společnosti Google.
Během vývoje je také nutné zohlednit další požadavky Google, které se týkají zveřejnění aplikace s dostupným Google Pay.
2. Google Pay Console
Jakmile je aplikace zpřístupněna alespoň v režimu interního testování, je vhodné seznámit se s požadavky na schválení v Google Pay Console. Tento krok je nezbytný pro aktivaci produkční verze Google Pay.
Celý proces registrace a konfigurace je popsán v oficiální dokumentaci.
Schvalovací proces může trvat několik dní a vyžaduje splnění následujících požadavků:
- pravidel pro používání značky (brand guidelines),
- doporučených postupů UX,
- a podmínek uvedených v kontrolním seznamu integrace.
Součástí schvalovacího procesu je také doložení screenshotů implementace Google Pay ve vaší aplikaci.
V tomto kroku postačuje zřídit přístup do Google Pay Console a ověřit, že je v sekci „Rozhraní API služby Google Pay" uvedena vaše aplikace, která byla nakonfigurována v Google Play Console.
Podání žádosti o schválení bude popsáno v pozdější sekci, a to po dokončení integrace.
3. Implementace
Následující část popisuje jednotlivé komponenty knihovny potřebné k integraci Google Pay do vaší aplikace.
Knihovna řeší konfiguraci platební brány, sestavení platebního požadavku, extrakci tokenu i jeho odeslání na API automaticky. Stačí použít komponentu SecureGooglePayButton a předat potřebné parametry.
Požadavky
| Požadavek | Popis |
|---|---|
googleMerchantId | Google Pay Merchant ID — povinný pro produkční prostředí. |
googleMerchantName | Název obchodníka zobrazený v Google Pay dialogu (volitelné). |
threeDSConfig | Instance ThreeDSConfig předaná do ComgateSecureSession (vyžadováno i pro Google Pay). |
| Aktivace Checkout API | Konfigurace Google Pay je během inicializace session načtena interně knihovnou. |
Jak získat googleMerchantId
googleMerchantId získáte v Google Pay & Wallet Console v detailu vašeho obchodnického profilu.
Stručný postup:
- Otevřete Google Pay & Wallet Console.
- Vyberte svůj Merchant profil (nebo vytvořte nový).
- V sekci s detaily integrace zkopírujte hodnotu Merchant ID.
- Tuto hodnotu použijte jako
googleMerchantIdvComgateSecureSession.
SecureGooglePayButton
Jetpack Compose
import cz.comgate.sdk.compose.*
SecureGooglePayButton(
session = session,
onPaymentResult = { result -> handleResult(result) },
paymentParamsProvider = {
PaymentParams(
price = 100,
curr = "CZK",
country = "CZ",
label = "Název platby",
refId = "ref-123",
fullName = "Jan Novák"
)
},
modifier = Modifier
.fillMaxWidth()
.height(56.dp)
)
Nastavení vzhledu tlačítka
SecureGooglePayButton nově umožňuje přizpůsobit vzhled a typ Google Pay tlačítka.
Metody stylování
| Metoda | Parametr | Popis |
|---|---|---|
setButtonTheme(theme) | GooglePayButtonTheme | Nastaví vizuální variantu (DARK, LIGHT). |
setButtonType(type) | GooglePayButtonType | Nastaví typ popisku tlačítka. |
setCornerRadius(radiusDp) | Int | Nastaví zaoblení rohů v dp. |
SecureGooglePayButton(
session = session,
onPaymentResult = { result -> /* ... */ },
paymentParamsProvider = { /* ... */ },
modifier = Modifier.fillMaxWidth().height(56.dp),
update = {
setButtonTheme(GooglePayButtonTheme.LIGHT)
setButtonType(GooglePayButtonType.CHECKOUT)
setCornerRadius(12)
}
)
XML atributy
| XML atribut | Formát | Popis |
|---|---|---|
app:gpButtonTheme | enum | Vizuální varianta tlačítka: dark (výchozí), light. |
app:gpButtonType | enum | Typ popisku tlačítka: book, buy, checkout, donate, order, pay (výchozí), plain, subscribe. |
app:gpButtonCornerRadius | dimension | Zaoblení rohů tlačítka (výchozí: 8dp). |
Nastavení
Metoda setup() propojí tlačítko se session a parametry platby:
SecurePayButton(Compose) používáActivity.SecureGooglePayButton(Compose) vyžadujeFragmentActivity(nebo podtyp, např.AppCompatActivity).
@Composable
private fun PaymentScreen(session: ComgateSecureSession) {
SecureGooglePayButton(
session = session,
onPaymentResult = { result ->
// Zpracování výsledku platby
},
paymentParamsProvider = {
PaymentParams(
price = 100,
curr = "CZK",
label = "Název platby",
refId = "ref-123",
fullName = "Jan Novák",
country = "CZ"
)
},
modifier = Modifier
.fillMaxWidth()
.height(56.dp)
)
}
Automatická vazba na session
Po zavolání gpButton.setup(...) se tlačítko automaticky naváže na ComgateSecureSession.
Jakmile session dokončí inicializaci a obsahuje Google Pay konfiguraci, tlačítko samo ověří dostupnost Google Pay na zařízení a případně se zobrazí.
val session = ComgateSecureSession(
checkoutId = "váš-checkout-id",
email = "zakaznik@example.com",
context = applicationContext,
threeDSConfig = ThreeDSConfig(),
lifecycleOwner = this,
onInitialized = { result ->
result.onFailure { e ->
Toast.makeText(this, "Chyba: ${e.message}", Toast.LENGTH_LONG).show()
}
}
)
Ve výše uvedených příkladech se do lifecycleOwner předává this (aktivita). Pokud session vytváříte uvnitř Fragmentu, předejte místo toho viewLifecycleOwner — napojí session na životní cyklus view, čímž se předejde memory leakům:
- Activity:
lifecycleOwner = this - Fragment:
lifecycleOwner = viewLifecycleOwner(nethis— Fragment přežívá opětovné vytvoření view)
PaymentParams
Parametry platby pro Google Pay využívají stejný objekt PaymentParams jako karetní platby. Kompletní popis všech parametrů naleznete v sekci Karetní data — PaymentParams.
Konfigurace v ComgateSecureSession
Pro Google Pay je nutné v konstruktoru ComgateSecureSession předat googleMerchantId (pro produkci) a volitelně googleMerchantName:
val session = ComgateSecureSession(
checkoutId = "váš-checkout-id",
email = "zakaznik@example.com",
context = applicationContext,
googleMerchantId = "váš-google-pay-merchant-id", // Povinné pro produkci
googleMerchantName = "Název obchodu", // Volitelné
threeDSConfig = ThreeDSConfig(), // Vyžadováno i pro Google Pay
lifecycleOwner = this
)
Kompletní příklad
class PaymentActivity : AppCompatActivity() {
private lateinit var session: ComgateSecureSession
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 1. Vytvoření session s Google Pay konfigurací
session = ComgateSecureSession(
checkoutId = "váš-checkout-id",
email = "zakaznik@example.com",
context = applicationContext,
googleMerchantId = "váš-google-pay-merchant-id",
googleMerchantName = "Název obchodu",
threeDSConfig = ThreeDSConfig(),
lifecycleOwner = this,
onInitialized = { result ->
result.onFailure { e ->
Toast.makeText(this, "Chyba: ${e.message}", Toast.LENGTH_LONG).show()
}
}
)
// 2. Nastavení Compose UI
setContent {
MaterialTheme {
Surface(modifier = Modifier.fillMaxSize()) {
GooglePayScreen(session)
}
}
}
}
}
@Composable
private fun GooglePayScreen(session: ComgateSecureSession) {
var resultText by remember { mutableStateOf("") }
Column(modifier = Modifier.fillMaxSize().padding(16.dp)) {
// Google Pay tlačítko
SecureGooglePayButton(
session = session,
onPaymentResult = { result ->
resultText = when (result) {
is PaymentResult.Paid -> "Platba úspěšná"
is PaymentResult.Pending -> "Platba se zpracovává..."
is PaymentResult.Cancelled -> "Platba zamítnuta: ${result.errorReason}"
is PaymentResult.Failed -> "Chyba: ${result.error.message}"
else -> ""
}
},
paymentParamsProvider = {
PaymentParams(
price = 100,
curr = "CZK",
label = "Objednávka #123",
refId = "order-123",
fullName = "Jan Novák",
country = "CZ"
)
},
modifier = Modifier.fillMaxWidth().height(56.dp)
)
if (resultText.isNotEmpty()) {
Text(text = resultText, modifier = Modifier.padding(top = 8.dp))
}
}
}
Kombinace s karetní platbou
Google Pay tlačítko lze snadno kombinovat s karetním formulářem na jedné obrazovce. Obě komponenty sdílejí stejnou ComgateSecureSession:
class PaymentActivity : AppCompatActivity() {
private lateinit var session: ComgateSecureSession
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Session pro oba typy plateb
session = ComgateSecureSession(
checkoutId = "váš-checkout-id",
email = "zakaznik@example.com",
context = applicationContext,
googleMerchantId = "váš-google-pay-merchant-id",
googleMerchantName = "Název obchodu",
threeDSConfig = ThreeDSConfig(), // Vyžadováno i pro Google Pay
lifecycleOwner = this
)
setContent {
MaterialTheme {
Surface(modifier = Modifier.fillMaxSize()) {
CombinedPaymentScreen(session)
}
}
}
}
}
@Composable
private fun CombinedPaymentScreen(session: ComgateSecureSession) {
val panState = rememberSecurePanFieldState()
val expiryState = rememberSecureExpiryFieldState()
val cvvState = rememberSecureCvvFieldState()
val statusState = rememberPaymentStatusState()
val collector = rememberSecureCardCollector(panState, expiryState, cvvState)
Column(modifier = Modifier.fillMaxSize().padding(16.dp)) {
// Karetní formulář
SecurePanField(state = panState, modifier = Modifier.fillMaxWidth())
Spacer(modifier = Modifier.height(8.dp))
SecureExpiryField(state = expiryState, modifier = Modifier.fillMaxWidth())
Spacer(modifier = Modifier.height(8.dp))
SecureCvvField(state = cvvState, modifier = Modifier.fillMaxWidth())
Spacer(modifier = Modifier.height(12.dp))
SecurePayButton(
session = session,
collector = collector,
onPaymentResult = { result -> statusState.showStatus(result) },
paymentParamsProvider = { /* ... */ },
modifier = Modifier.fillMaxWidth()
)
HorizontalDivider(modifier = Modifier.padding(vertical = 16.dp))
// Google Pay
SecureGooglePayButton(
session = session,
onPaymentResult = { result -> statusState.showStatus(result) },
paymentParamsProvider = { /* ... */ },
modifier = Modifier.fillMaxWidth().height(56.dp)
)
SecurePaymentStatusView(
state = statusState,
modifier = Modifier.fillMaxWidth().padding(top = 8.dp)
)
}
}
Při použití Google Pay v rámci Mobilního SDK vždy vytvořte a předejte threeDSConfig do ComgateSecureSession.
4. Podání žádosti o schválení
Pro aktivaci Google Pay v produkčním režimu je nutné odeslat žádost o schválení prostřednictvím Google Pay Console. Tento krok je nezbytný pro zpřístupnění plateb reálným plátcům a zároveň zajišťuje soulad s požadavky společnosti Google.
Checklist integrace
Před podáním žádosti je nutné projít kontrolní seznam integrace a ověřit, zda je integrace funkční. Google neprovádí detailní kontrolu splnění jednotlivých položek checklistu. V rámci integrace přes Comgate není možné splnit všechny požadavky uvedené v seznamu, přesto doporučujeme ověřit alespoň klíčové části.
Následující tabulka shrnuje požadavky, které buď není možné v rámci integrace s Comgate splnit, nebo jejich splnění není povinné:
| Sekce | Test | Splnitelnost | Vysvětlení |
|---|---|---|---|
| Basics | If you complete a DIRECT tokenizationSpecification type integration... | Nelze splnit | Knihovna provádí integraci prostřednictvím platební brány.
Přímá integrace (DIRECT) není podporována. |
| Functional tests | If you require a shipping address... | Volitelné | Adresa není na straně Comgate zpracovávána. |
| If you require a telephone number... | Volitelné | Telefonní číslo není na straně Comgate zpracováváno. |
Knihovna SecureGooglePayButton řeší veškerou konfiguraci platební brány interně (tokenizaci, gateway identifikátor apod.). Při procházení checklistu se proto zaměřte zejména na body týkající se UX, tlačítka a celkového chování aplikace.
Průvodce žádostí
Než podáte žádost o schválení, doporučujeme připravit si všechny požadované screenshoty aplikace.
Google vyžaduje snímky obrazovky znázorňující následující situace:
- uživatel si prohlíží položku nebo službu,
- uživatel je připraven dokončit nákup,
- uživatel si zvolil Google Pay jako platební metodu,
- uživateli se zobrazují platební údaje uložené v Google Pay (doporučujeme vyfotit jiným zařízením),
- nákup byl úspěšně dokončen.
Přesné znění požadavků najdete na konci formuláře žádosti v Google Pay Console.
- Přihlaste se do Google Pay Console a vyberte obchodní profil, pod kterým budou platby Google Pay provozovány.
- Na úvodní stránce (případně v levém menu v sekci Rozhraní API služby Google Pay → Integrate with your Android app) zvolte aplikaci, pro kterou má být žádost o schválení podána.
- Výběr z hlavní stránky
- Výběr prostřednictvím menu vlevo


- Ve formuláři v sekci Your Google Pay API integration type zvolte možnost Brána (Gateway).

- Nahrajte všechny připravené screenshoty, které demonstrují správnou funkčnost Google Pay ve vaší aplikaci.
Některé kategorie ve formuláři mohou obsahovat shodné screenshoty – záleží na tom, jakým způsobem je navržen váš checkout proces.

-
Po vyplnění všech požadovaných údajů klikněte na tlačítko Uložit.
-
Pokud se formulář úspěšně uloží a neobsahuje žádné chyby, zobrazí se v horní části stránky nová sekce pro odeslání žádosti. Zkontrolujte, že jsou splněny všechny požadavky, potvrďte je zaškrtnutím příslušných políček a klikněte na tlačítko Submit for approval, čímž žádost odešlete.
