Přeskočit na hlavní obsah

Instalace a inicializace

Přidání knihovny do projektu

Knihovna je distribuována jako Swift Package. Přidejte ji do svého projektu pomocí Swift Package Manageru.

Xcode

  1. V Xcode otevřete File → Add Package Dependencies…
  2. Zadejte URL repozitáře: https://github.com/comgate-payments/ios-checkout-sdk
  3. Vyberte verzi a target, do kterého má být knihovna přidána.
  4. Po dokončení importujte knihovnu ve zdrojových souborech:
import ComgateSDK

Package.swift

Pokud používáte vlastní Swift Package, přidejte závislost takto:

dependencies: [
.package(url: "https://github.com/comgate-payments/ios-checkout-sdk", from: "0.1.0")
],
targets: [
.target(
name: "MyApp",
dependencies: [
.product(name: "ComgateSDK", package: "ComgateSDK")
]
)
]
Upozornění

Knihovna vyžaduje iOS 15.0 nebo novější. Ověřte, že konfigurace vaší aplikace splňuje tento požadavek (Deployment Target v nastavení targetu).

Konfigurace projektu

Apple Pay capability

Pokud plánujete využívat Apple Pay, je nutné v projektu:

  1. V Xcode v záložce Signing & Capabilities přidat capability Apple Pay.
  2. Vybrat (nebo vytvořit) všechny Merchant IDs, které budete používat — typicky jeden pro testovací a jeden pro produkční prostředí.
  3. V Apple Developer portálu (Identifiers → Merchant IDs) zaregistrovat odpovídající merchant identifier ve formátu merchant.<vase-domena>.

V entitlement souboru se objeví seznam povolených merchant identifierů:

<key>com.apple.developer.in-app-payments</key>
<array>
<string>merchant.cz.example.production</string>
<string>merchant.cz.example.sandbox</string>
</array>

Podrobnosti k Apple Pay konfiguraci jsou v sekci Apple Pay.

Klávesnice třetích stran

Třetí strany mohou v klávesnici teoreticky odečítat zadávané znaky. Pro maximální bezpečnost karetních dat doporučujeme v AppDelegate zakázat klávesnice třetích stran:

Tip
func application(
_ application: UIApplication,
shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplication.ExtensionPointIdentifier
) -> Bool {
extensionPointIdentifier != .keyboard
}

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 Apple Pay plateb.

Parametry konstruktoru

ParametrTypPovinnýPopis
checkoutIdStringIdentifikátor Checkout SDK propojení. Získáte v klientském portálu Comgate.
threeDSConfigThreeDSConfigKonfigurace 3D Secure (UI, timeout, verze protokolu). Podrobnosti v sekci Karetní data — 3D Secure.
devModeBoolZapíná vývojový/testovací režim. Výchozí false.
applePayMerchantIdentifierString?Apple Pay Merchant ID ve tvaru merchant.*. Povinný pro Apple Pay. Pokud je nil, Apple Pay je zakázán.
applePayDisplayNameString?Název obchodníka zobrazený v Apple Pay platebním sheetu.
translationTranslationPřeklady textů komponent. Výchozí .forCurrentLocale().
langString?Kód jazyka (BCP 47 / ISO 639-1) odesílaný s platebním požadavkem (např. "cs", "en"). Pokud není zadán, použije se jazyk zařízení (je-li podporován).
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 je vytvořit session jako @StateObject v hlavní App nebo root View a v .task modifikátoru asynchronně zavolat initialize():

import SwiftUI
import ComgateSDK

@main
struct MyApp: App {
@StateObject private var session = ComgateSecureSession(
checkoutId: "váš-checkout-id",
threeDSConfig: ThreeDSConfig() // výchozí 3DS konfigurace
)

var body: some Scene {
WindowGroup {
ContentView(session: session)
.task {
do {
try await session.initialize()
} catch {
print("Init failed: \(error)")
}
}
}
}
}
Informace

Metoda initialize() je async throws a běží na hlavním vlákně (@MainActor). Při chybě vyhodí ComgateException obsahující konkrétní ComgateError.

Stav session (SessionState)

ComgateSecureSession vystavuje @Published property state typu SessionState, která v každém okamžiku popisuje aktuální fázi životního cyklu session. Pro jednoduché kontroly je k dispozici vlastnost isInitialized.

Stavy

StavKdy platí
.notInitializedSession byla právě vytvořena. initialize() zatím nebyla volána.
.initializinginitialize() právě probíhá — probíhá síťová komunikace a inicializace 3DS SDK.
.readyInicializace úspěšně dokončena. Session je připravena zpracovávat platby.
.failed(ComgateError)Inicializace selhala. Asociovaná hodnota nese konkrétní příčinu. Session lze znovu inicializovat voláním initialize().

Vlastnosti session

VlastnostTypPopis
stateSessionStateAktuální stav session (@Published).
isInitializedBoolZkratka: true právě tehdy, když state == .ready.
isApplePayConfiguredBooltrue, pokud byl předán applePayMerchantIdentifier a Apple Pay je dostupný.
isProcessingPaymentBooltrue, dokud probíhá processPayment(...) nebo processApplePayPayment(...).
translationTranslationPřeklady aktuální session (read-only).

Použití v UI (SwiftUI)

struct ContentView: View {
@ObservedObject var session: ComgateSecureSession

var body: some View {
switch session.state {
case .notInitialized:
Button("Inicializovat") {
Task { try? await session.initialize() }
}
case .initializing:
ProgressView()
case .ready:
PaymentForm(session: session)
case .failed(let error):
VStack {
Text("Chyba inicializace: \(error.message)")
Button("Zkusit znovu") {
Task { try? await session.initialize() }
}
}
}
}
}

Chyby při inicializaci

Stav .failed(error) nese ComgateError s popisem příčiny. Nejčastější chyby při inicializaci:

ChybaKódPopis
.deviceRootedDEVICE_ROOTEDZařízení je pravděpodobně jailbreaknuté nebo jinak pozměněné. Inicializace je zablokovaná za účelem ochrany karetních dat. V devMode se tato kontrola přeskočí.
.initNetworkErrorINIT_NETWORK_ERRORSíťová chyba při stahování konfigurace.
.initUnauthorizedINIT_UNAUTHORIZEDServer vrátil HTTP 401 při inicializaci — neplatná nebo expirovaná autorizace.
.initFailedINIT_FAILEDInicializace selhala z jiného důvodu (např. neplatná odpověď serveru).
.applicationNotAllowedAPPLICATION_NOT_ALLOWEDBundle ID aplikace není na seznamu povolených aplikací.
Informace

Property state je publikována přes Combine (@Published) a všechny aktualizace probíhají na hlavním vlákně. Stav lze pozorovat přes .onReceive(session.$state) nebo přímo v SwiftUI body.

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, automatickou detekci jazyka zařízení nebo vlastní instanci Translation
  • Uživatelsky nastavitelné jsou tyto klíče:
KlíčPopis
panLabelLabel nad polem pro číslo karty (PAN).
expiryLabelLabel nad polem pro datum platnosti.
cvvLabelLabel nad polem pro CVV kód.
fullNameLabelLabel nad polem pro jméno držitele karty.
panHintPlaceholder text v poli pro číslo karty (PAN).
expiryHintPlaceholder text v poli pro datum platnosti (např. MM/YY).
cvvHintPlaceholder text v poli pro CVV kód.
fullNameHintPlaceholder text v poli pro jméno držitele karty.
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.
expiryExpiredErrorChybová zpráva zobrazená pod polem expirace, když je karta prošlá.
fullNameRequiredErrorChybová zpráva zobrazená pod polem jména, pokud není vyplněno.
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ě.
statusAuthorizedZpráva zobrazená v SecurePaymentStatusView při autorizované platbě (předautorizace).
statusPendingZpráva zobrazená v SecurePaymentStatusView, když platba čeká na finální stav.
loadingProcessingTextText zobrazený v SecureLoadingView 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
let translation = Translation(
panLabel: "Číslo karty",
expiryLabel: "Platnost",
cvvLabel: "CVC/CVV",
fullNameLabel: "Jméno držitele",
panHint: "Číslo karty",
expiryHint: "MM/RR",
cvvHint: "CVV",
fullNameHint: "Jméno a příjmení",
panInvalidError: "Neplatné číslo karty",
expiryInvalidMonthError: "Neplatný měsíc",
expiryExpiredError: "Karta je expirovaná",
fullNameRequiredError: "Vyplňte jméno držitele",
payButtonText: "Zaplatit",
payButtonProcessingText: "Zpracovávám…",
statusPaid: "Zaplaceno",
statusAuthorized: "Autorizováno",
statusPending: "Zpracovává se",
loadingProcessingText: "Zpracovávám platbu…",
threeDSCancelButton: "Zrušit"
)

let session = ComgateSecureSession(
checkoutId: "váš-checkout-id",
threeDSConfig: ThreeDSConfig(),
translation: translation
)

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

let session = ComgateSecureSession(
checkoutId: "váš-checkout-id",
threeDSConfig: ThreeDSConfig(),
translation: .czech
)

Kódy podporovaných jazyků

ComgateSecureSession.supportedLanguageCodes vrací abecedně seřazený seznam BCP 47 / ISO 639-1 kódů jazyků, pro které knihovna obsahuje vestavěný překlad. Tento seznam lze využít k naplnění výběru jazyka v UI nebo ke zjištění, zda je jazyk zařízení podporován.

Aktuálně dostupné kódy: bg, cs, da, de, el, en, es, et, fi, fr, hr, hu, it, lt, lv, nl, no, pl, pt, ro, ru, sk, sl, sv, uk, vi

Příklad — automatická detekce jazyka zařízení s fallbackem na angličtinu:

let deviceLang = Locale.current.language.languageCode?.identifier ?? "en"
let resolvedLang = ComgateSecureSession.supportedLanguageCodes.contains(deviceLang) ? deviceLang : "en"

let session = ComgateSecureSession(
checkoutId: "váš-checkout-id",
threeDSConfig: ThreeDSConfig(),
translation: .forLanguageCode(resolvedLang),
lang: resolvedLang
)

Příklad — naplnění výběru jazyka v UI a propojení s překladem:

// Získání seznamu podporovaných kódů
let languageCodes = ComgateSecureSession.supportedLanguageCodes

// Po výběru jazyka uživatelem
let selectedCode = "sk"
let translation = Translation.forLanguageCode(selectedCode)