Quick Start

This video walks you step-by-step through the iOS SDK integration process. Watch it to quickly understand setup, configuration, and key features in action.

Before integrating the Checkout SDK, please review the following requirements:

You can install the SDK via two paths:

  • Swift Package Manager (Recommended)

  • CocoaPods (Deprecated)

Add Ottu SDK as a dependency in Package.swift:

dependencies: [
    .package(url: "https://github.com/ottuco/ottu-ios.git", from: "2.1.4")
]

Or in Xcode:

  1. Open your project

  2. Go to Project > Targets > Package Dependencies

  3. Add ottu-ios as a dependency

Add the following line to your Podfile:

pod 'ottu_checkout_sdk', :git => 'https://github.com/ottuco/ottu-ios.git', :tag => '2.1.4'

Run:

pod install

Once the SDK is installed, follow these steps to integrate it into your app.

1

Import the SDK

In your ViewController.swift (or any file responsible for presenting the SDK):

import ottu_checkout_sdk
2

Conform to OttuDelegate

Your view controller must implement the OttuDelegate protocol:

class ViewController: UIViewController, OttuDelegate 
3

Declare a Checkout Member

Inside your ViewController

private var checkout: Checkout?
4

Initialize Checkout

Inside viewDidLoad, initialize the Checkout SDK:

do {
    self.checkout = try Checkout(
        displaySettings: PaymentOptionsDisplaySettings(
          mode: PaymentOptionsDisplaySettings.PaymentOptionsDisplayMode.list,
        ),
        sessionId: sessionId,
        merchantId: merchantId,
        apiKey: apiKey,
        delegate: self
    )
} catch let error as LocalizedError {
    print(error)
    return
} catch {
    print("Unexpected error: \(error)")
    return
}

Required parameters

  • sessionId → ID of the created transaction

  • merchantId → Same as the domain address in API requests

  • apiKey → Public API key for authorization

  • delegate → Callback listener (usually self)

Recommended parameters

  • formsOfPayment → Defines available payment methods

  • setupPreload → Preloads transaction details for faster initialization

setupPreload comes from the transaction creation response. Passing it prevents the SDK from re-fetching transaction details, reducing initialization time by several seconds. It is a decoded JSON object to a TransactionDetails object. See an example: MainViewController.swift

The simplest version of the initialization looks like this:

do {
    self.checkout =
        try Checkout(
            sessionId: sessionId,
            merchantId: merchantId,
            apiKey: apiKey,
            delegate: self
        )
} catch
let error as LocalizedError {
    // display an error here
    return
} catch {
    print("Unexpected error: \(error)")
    return
}
5

Add the Payment View

Still inside viewDidLoad, embed the payment view into your container:

if let paymentVC = self.checkout?.paymentViewController(),
    let paymentView = paymentVC.view {

        self.addChild(paymentVC)
        paymentVC.didMove(toParent: self)
        view.addSubview(paymentView)
    }

This is a basic example that adds the Checkout view without handling dimensions. For proper layout with constraints, refer to the demo app: OttuPaymentsViewController.swift

In order ViewController to be compliant to OttuDelegate, add the following functions to ViewController class:

func errorCallback(_ data: [String : Any]?) {
    navigationController?.popViewController(animated: true)
    let alert = UIAlertController(title: "Error", message: data?.debugDescription ?? "", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "OK", style: .cancel))
    self.present(alert, animated: true)
}
    
func cancelCallback(_ data: [String : Any]?) {
    var message = ""
       
    if let paymentGatewayInfo = data?["payment_gateway_info"] as? [String : Any],
       let pgName = paymentGatewayInfo["pg_name"] as? String,
       pgName == "kpay" {
           message = paymentGatewayInfo["pg_response"].debugDescription
    } else {
        message = data?.debugDescription ?? ""
    }
        
    navigationController?.popViewController(animated: true)
    let alert = UIAlertController(title: "Canсel", message: message, preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "OK", style: .cancel))
    self.present(alert, animated: true)
}
   
func successCallback(_ data: [String : Any]?) {
    navigationController?.popViewController(animated: true)
    let alert = UIAlertController(title: "Success", message: data?.debugDescription ?? "", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "OK", style: .cancel))
    present(alert, animated: true)
}

  • Error → Displays an error alert and navigates back

  • Cancel → Displays cancel reason (custom handling for kpay)

  • Success → Displays success confirmation

This code describes callbacks to be handled by the parent app.

If your app should support Apple Pay:

  1. Enable Apple Pay capability in: Xcode > Targets > Signing & Capabilities

  2. Add Apple Pay Merchant IDs (MID) in project settings

Last updated