This repository provides a native iOS SDK that enables you to integrate SumUp's proprietary card terminal(s) and its payment platform to accept credit and debit card payments (incl. VISA, MasterCard, American Express and more). SumUp's SDK communicates transparently to the card terminal(s) via Bluetooth (BLE 4.0) or an audio cable connection. Upon initiating a checkout, the SDK guides your user using appropriate screens through each step of the payment process. As part of the process, SumUp also provides the card terminal setup screen, along with the cardholder signature verification screen. The checkout result is returned with the relevant data for your records.
No sensitive card data is ever passed through to or stored on the merchant’s phone. All data is encrypted by the card terminal, which has been fully certified to the highest industry standards (PCI, EMV I & II, Visa, MasterCard & Amex).
For more information, please refer to SumUp's integration website.
- Registered for a merchant account via SumUp's country websites (or received a test account).
- Received SumUp card terminal: Air, Air Lite, PIN+ terminal, Chip & Signature reader, or SumUp Air Register.
- Requested an Affiliate (Access) Key via SumUp Dashboard for Developers.
- Deployment Target iOS 10.0 or later.
- Xcode 11 and iOS SDK 13 or later.
- iPhone, iPad or iPod touch.
If you want to support the SumUp Air Register, please also read our additional Air Register setup guide.
The SumUp SDK is provided as an XCFramework SumUpSDK.xcframework
that contains
the headers and bundles bundles containing resources such as images and localizations.
Please follow the steps below to prepare your project:
- Drag and drop the
SumUpSDK.xcframework
to your Xcode project's "Frameworks, Libraries, and Embedded Content" on the General settings tab. - Make sure the required Info.plist keys are present.
Note: You can use the sample app that is provided with the SumUp SDK as a reference project. The Xcode project contains sample apps written in Objective-C and Swift. See Test your integration for more information.
The SumUp SDK can be integrated via CocoaPods.
target '<Your Target Name>' do
pod 'SumUpSDK', '~> 4.0'
end
Make sure the required Info.plist keys are present.
To learn more about setting up your project for CocoaPods, please refer to the official documentation.
The SumUp SDK can be integrated with Carthage by following the steps below:
-
Add the following line to your
Cartfile
:github "sumup/sumup-ios-sdk"
-
Run
carthage update sumup-ios-sdk
-
Drag and drop the
Carthage/Build/iOS/SumUpSDK.xcframework
to your Xcode project's "Frameworks, Libraries, and Embedded Content" on the General settings tab. -
Make sure the required Info.plist keys are present.
To learn more about setting up your project for Carthage, please refer to the official documentation.
Note: See Test your integration for more information.
The latest Swift Package Manager version added support to distribute binary frameworks as Swift Packages. Unfortunately there is a bug (Bug Report SR-13343), that adds the framework as a static library, not as an embedded dynamic framework. Follow this workaround to manage SumUp SDK versions via Swift PM:
Requirement: Xcode 12 beta 6 (swift-tools-version:5.3)
- Add the package dependency to the repository
https://github.com/sumup/sumup-ios-sdk
(File > Swift Packages > Add Package Dependency...) with the versionUp to Next Major: 4.0.0
- Leave the checkbox unchecked for the SumUpSDK at the integration popup (Add Package to ...:)
- From the Project Navigator, drag and drop the
SumUpSDK/Referenced Binaries/SumUpSDK.xcframework
to your Xcode project's "Frameworks, Libraries, and Embedded Content" on the General settings tab. - Make sure the required Info.plist keys are present.
To learn more about adding Swift Package dependencies, please refer to the official documentation.
In your debug setup you can call +[SMPSumUpSDK testSDKIntegration]
.
It will run various checks and print its findings to the console.
Please do not call it in your Release build.
The SDK supports all device orientations on iPad and portrait on iPhone.
Feel free to support other orientations on iPhone but please keep in mind that
the SDK's UI will be presented in portrait on iPhone.
See UISupportedInterfaceOrientations
in the sample app's
Info.plist
or the "General" tab in Xcode's Target Editor.
The SumUp SDK requires access to the user's location, Bluetooth peripherals and the device's microphone. If your app has not asked for the user's permission, the SumUp SDK will ask at the time of the first login or checkout attempt. Please add the following keys to your info plist file:
NSLocationWhenInUseUsageDescription
NSBluetoothAlwaysUsageDescription
NSBluetoothPeripheralUsageDescription (unless your deployment target is at least iOS 13)
NSMicrophoneUsageDescription
Note:
- Please refer to the sample app's Info.plist for more information regarding the listed permissions required.
- You can provide localization by providing a localized InfoPlist.strings file.
- For further information, see the iOS Developer Library on location usage on iOS 8 and later, Bluetooth peripheral usage, and microphone access in iOS 7 and later.
To import the SDK in Objective-C source files, you can use #import <SumUpSDK/SumUpSDK.h>
. If module
support is enabled in your project, you can use @import SumUpSDK;
instead.
In Swift, use import SumUpSDK
. You do not have to add any headers to your bridging header.
Before calling any additional feature of the SumUp SDK, you are required to set up the SDK with your Affiliate (Access) Key:
[SMPSumUpSDK setupWithAPIKey:@"MyAPIKey"];
Note:
setupWithAPIKey:
checks for the user's location permission. Consequently, do not call this method as part of the app launch. This method must be called on the main queue.
Following app authentication, a registered SumUp merchant account needs to be logged in.
Present a login screen from your UIViewController
, using the following method:
[SMPSumUpSDK presentLoginFromViewController:vc
animated:YES
completionBlock:nil];
Note: To log out of the SDK, please refer to
logoutWithCompletionBlock:
.
Once logged in, you can start using the SumUp SDK to accept card payments.
Prepare a checkout request that encapsulates the information regarding the transaction.
For this, you will need to create an instance of SMPCheckoutRequest
:
SMPCheckoutRequest *request = [SMPCheckoutRequest requestWithTotal:[NSDecimalNumber decimalNumberWithString:@"10.00"]
title:@"your title"
currencyCode:[[SMPSumUpSDK currentMerchant] currencyCode]];
Please note that you need to pass an NSDecimalNumber
as the total value.
While NSDecimalNumber
is a subclass of NSNumber
it is not advised to use the
convenience method of NSNumber
to create an NSDecimalNumber
.
When setting up the SMPCheckoutRequest
object, the following optional parameters can be included:
A tip amount can be processed in addition to the totalAmount
using the tipAmount
parameter.
The tip amount will then be shown during the checkout process and be included in the response.
Please note that a tip amount cannot be changed during/after the checkout.
Just like the totalAmount
it is an NSDecimalNumber
so make sure to
not accidentally pass an NSNumber
.
The foreignTransactionID
identifier will be associated with the transaction
and can be used to retrieve details related to the transaction.
See API documentation for details.
Please make sure that this ID is unique within the scope of the SumUp merchant account
and sub-accounts. It must not be longer than 128 characters.
// set an optional identifier
[request setForeignTransactionID:@"my-unique-id"];
To skip the screen shown at the end of a successful transaction, the
SMPSkipScreenOptionSuccess
option can be used.
When setting this option your application is responsible for displaying
the transaction result to the customer.
In combination with the Receipts API, your application can also send your own receipts,
see API documentation for details.
Please note that success screens will still be shown when using the SumUp Air Lite readers.
Start a payment by using the checkout request below:
[SMPSumUpSDK checkoutWithRequest:request
fromViewController:vc
completion:^(SMPCheckoutResult *result, NSError *error) {
// handle completed and failed payments here
// retrieve information via result.additionalInfo
}];
When logged in you can let merchants check and update their checkout preferences. Merchants can select their preferred card terminal and set up a new one if needed. The preferences available to a merchant depend on their respective account settings.
[SMPSumUpSDK presentCheckoutPreferencesFromViewController:self
animated:YES
completion:^(BOOL success, NSError * _Nullable error) {
if (!success) {
// there was a problem presenting the preferences
} else {
// next checkout will reflect the merchant's changes.
}
}];
The following functions are handled by the SumUp APIs:
- Questions? Get in contact with our integration team by sending an email to [email protected].
- Found a bug? Open an issue. Please provide as much information as possible.