-
Notifications
You must be signed in to change notification settings - Fork 122
Migrating from V1 to V2
CheckoutViewController
has been replaced with CheckoutController
.
Instead of
let viewController = CheckoutViewController(delegate: self)
present(viewController, animated: true)
CheckoutController
should be instantiated with the presenting view controller, like this:
var checkoutController: CheckoutController?
func startCheckout() {
checkoutController = CheckoutController(presentingViewController: self, delegate: self)
checkoutController?.start()
}
CheckoutControllerDelegate
needs to be implemented to receive callbacks instead of CheckoutViewControllerDelegate
.
Replace:
func checkoutViewController(_ controller: CheckoutViewController, requiresPaymentDataForToken token: String, completion: @escaping DataCompletion)
with:
func requestPaymentSession(withToken token: String, for checkoutController: CheckoutController, responseHandler: @escaping Completion<String>)
Just like before, this method should be used to fetch payment data and pass it to the completion handler.
Upon receiving valid payment data, the SDK will present a preselected payment method for convenience. If no preselected methods are available, a list of available payment methods will be displayed. This behaviour can be disabled, in which case the SDK will default to presenting a list of all payment methods:
checkoutController.showsPreselectedPaymentMethod = false
The payment flow can be cancelled at any time:
checkoutController.cancel()
Replace:
func checkoutViewController(_ controller: CheckoutViewController, didFinishWith result: PaymentRequestResult)
with:
func didFinish(with result: Result<PaymentResult>, for checkoutController: CheckoutController)
There is no longer a delegate method that handles redirect payments. Instead, when the application(_:open:options:)
call is received by the Application Delegate, the following method should be invoked:
Adyen.applicationDidOpen(url)
This method will return true
if the url was handled by Adyen, and false
if not.
To integrate your own card scanning framework, CheckoutViewControllerCardScanDelegate
needs to be removed and replaced with CardScanDelegate
. The delegate should be assigned like this:
checkoutController.cardScanDelegate = self
This version of the API offers a lot more appearance customisation through the Appearance
object. Appearance
has replaced AppearanceConfiguration
. An appearance object can be passed to the SDK at initialisation:
let appearance = Appearance()
// Customize appearance
let checkoutController = CheckoutController(presentingViewController: self, delegate: self, appearance: appearance)
PaymentRequest
has been replace with PaymentController
. PaymentControllerDelegate
needs to be implemented to receive callbacks instead of PaymentRequestDelegate
.
To select a payment method, implement:
func selectPaymentMethod(from paymentMethods: PaymentMethods, for paymentController: PaymentController, selectionHandler: @escaping Completion<PaymentMethod>)
The selection handler should be called after the paymentMethod.details
have been filled in. This is in contrast to the paymentRequest:requiresPaymentMethodFrom:available:completion:
method in PaymentRequestDelegate
, after which paymentRequest:requiresPaymentDetails:completion:
was called.
While redirect:paymentController:
should still be implemented to handle redirect payment methods, there is no longer a completion block to handle the return url. Instead, when the application(_:open:options:)
call is received by the Application Delegate, the following method should be invoked:
Adyen.applicationDidOpen(url)