Risk iOS SDK
Last updated: March 19, 2025
The checkout-risk-sdk-iOS
captures advanced fraud signals that are leveraged in our fraud scoring machine learning model.
Information
To enable access to the Risk SDK, contact your Account Manager or [email protected].
Generate a public API key from your Dashboard.
The minimum requirements to use the iOS SDK are:
- iOS 12.0 or later as a deployment target
- Xcode 12.4 or later
- Swift 5.3 or later
We recommend using Swift Package Manager to add our SDK due to its ease of use, but we also support integration via the CocoaPods dependency manager.
Add our GitHub repository's URL (https://github.com/checkout/checkout-risk-sdk-ios
) as a package dependency in your app.
For detailed steps, follow the guide on Apple's documentation.
Initialize the package by passing the:
- Public API key
- Environment
1let yourConfig = RiskConfig(publicKey: "pk_qa_xxx", environment: RiskEnvironment.qa)23// Initialize early-on in your app4self.riskSDK = Risk.init(config: yourConfig)
Use the configure
method to complete your setup after initialization. When the method is called, preliminary checks are made to Checkout. com's internal APIs. These APIs retrieve other configurations required for collecting device data.
If the checks fail or the merchant is disabled, an error is returned and logged. You can also see more information on your Xcode console while in development mode.
If the checks are successful, the method returns an instance of Risk
. You can then call the publishData
method on the instance to publish the data.
1import RiskSDK23// Example usage of package4let yourConfig = RiskConfig(publicKey: "pk_qa_xxx", environment: RiskEnvironment.qa)56// Initialize in your app7self.riskSDK = Risk.init(config: yourConfig)89// Complete your setup and publish data10self.riskSDK.configure { configurationResult in1112switch configurationResult {13case .failure(let errorResponse):14print(errorResponse.localizedDescription)15case .success():16self.riskSDK.publishData { result in1718switch result {19case .success(let response):20print(response.deviceSessionId)21case .failure(let errorResponse):22print(errorResponse.localizedDescription)23}24}25}2627}
1public func configure(completion: @escaping (Result<Void, RiskError.Configuration>) -> Void) {2...3}45public func publishData(cardToken: String? = nil, completion: @escaping (Result<PublishRiskData, RiskError>) -> Void) {6...7}8public struct RiskConfig {9let publicKey: String10let environment: RiskEnvironment11let framesMode: Bool1213public init(publicKey: String, environment: RiskEnvironment, framesMode: Bool = false) {14self.publicKey = publicKey15self.environment = environment16self.framesMode = framesMode17}18}1920public enum RiskEnvironment {21case qa22case sandbox23case production24}2526public struct PublishRiskData {27public let deviceSessionId: String28}2930public enum RiskError: LocalizedError, Equatable {31case configuration(Configuration)32case publish(Publish)33}3435public enum RiskError {36case configuration(Configuration)37case publish(Publish)38}3940public extension RiskError {41enum Configuration: LocalizedError {42case integrationDisabled43case couldNotRetrieveConfiguration4445public var errorDescription: String? {46switch self {47case .integrationDisabled:48return "Integration disabled"4950case .couldNotRetrieveConfiguration:51return "Error retrieving configuration"52}53}54}5556enum Publish: LocalizedError {57case couldNotPublishRiskData58case couldNotPersisRiskData59case fingerprintServiceIsNotConfigured6061public var errorDescription: String? {62switch self {63case .couldNotPublishRiskData:64return "Error publishing risk data"6566case .couldNotPersisRiskData:67return "Error persisting risk data"6869case .fingerprintServiceIsNotConfigured:70return "Fingerprint service is not configured. Please call configure() method first."71}72}73}74}