Skip to content
Adyen SDK for iOS
Branch: master
Clone or download
Latest commit 6f6ce1f Jul 17, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
Adyen.xcodeproj 3.1.0 Jul 17, 2019
Adyen 3.1.0 Jul 17, 2019
AdyenCard 3.1.0 Jul 17, 2019
AdyenDropIn 3.1.0 Jul 17, 2019
AdyenTests 3.1.0 Jul 17, 2019
AdyenUIHost 3.1.0 Jul 17, 2019
Docs 3.1.0 Jul 17, 2019
.gitignore 3.0.0 Jun 18, 2019
.jazzy.yaml 3.0.0 Jun 18, 2019
.swiftlint.yml 3.0.0 Jun 18, 2019
Adyen.podspec 3.1.0 Jul 17, 2019
Cartfile 3.1.0 Jul 17, 2019
Cartfile.resolved 3.1.0 Jul 17, 2019
LICENSE Initial commit May 11, 2017 3.0.0 Jun 18, 2019

Adyen Components for iOS

Adyen Components for iOS allows you to accept in-app payments by providing you with the building blocks you need to create a checkout experience.


Adyen Components for iOS are available through either CocoaPods or Carthage.


  1. Add pod 'Adyen' to your Podfile.
  2. Run pod install.


  1. Add github "adyen/adyen-ios" to your Cartfile.
  2. Run carthage update.
  3. Link the framework with your target as described in Carthage Readme.


The Drop-in handles the presentation of available payment methods and the subsequent entry of a customer's payment details. It is initialized with the response of /paymentMethods, and provides everything you need to make an API call to /payments and /payments/details.


Presenting the Drop-in

The Drop-in requires the response of the /paymentMethods endpoint to be initialized. To pass the response to Drop-in, decode the response to the PaymentMethods structure:

let paymentMethods = try JSONDecoder().decode(PaymentMethods.self, from: response)

Some payment methods need additional configuration. For example, to enable the card form, the Drop-in needs a public key to use for encryption. These payment method specific configuration parameters can be set in an instance of DropInComponent.PaymentmethodsConfiguration:

let configuration = DropInComponent.PaymentMethodsConfiguration()
configuration.card.publicKey = "..." // Your public key, retrieved from the Customer Area.

After serializing the payment methods and creating the configuration, the Drop-in is ready to be initialized. Assign a delegate and use the viewController property to present the Drop-in on the screen:

let dropInComponent = DropInComponent(paymentMethods: paymentMethods,
paymentMethodsConfiguration: configuration)
dropInComponent.delegate = self
present(dropInComponent.viewController, animated: true)

Implementing DropInComponentDelegate

To handle the results of the Drop-in, the following methods of DropInComponentDelegate should be implemented:

func didSubmit(_ data: PaymentComponentData, from component: DropInComponent)

This method is invoked when the customer has selected a payment method and entered its payment details. The payment details can be read from data.paymentMethod and can be submitted as-is to /payments.

func didProvide(_ data: ActionComponentData, from component: DropInComponent)

This method is invoked when additional details are provided by the Drop-in after the first call to /payments. This happens, for example, during the 3D Secure 2 authentication flow or any redirect flow. The additional details can be retrieved from data.details and can be submitted to /payments/details.

func didFail(with error: Error, from component: DropInComponent)

This method is invoked when an error occurred during the use of the Drop-in. Dismiss the Drop-in's view controller and display an error message.

Handling an action

When /payments or /payments/details responds with a non-final result and an action, you can use the Drop-in to handle the action:

let action = try JSONDecoder().decode(Action.self, from: actionData)

In case the customer is redirected to an external URL, make sure to let the Drop-in know when the user returns to your app. Do this by implementing the following in your UIApplicationDelegate:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey: Any] = [:]) -> Bool {

    return true


In order to have more flexibility over the checkout flow, you can use our Components to present each payment method individually. Implementation details of our Components can be found in our Components API Reference.

Available Components

See also


This repository is open source and available under the MIT license. For more information, see the LICENSE file.

You can’t perform that action at this time.