Terminal SDK migration guide
Learn how to migrate to version 5.0.0 of the Stripe Terminal SDK.
The Stripe Terminal iOS and Android SDKs have been updated with a number of breaking changes in APIs and behavior, some of which require you to update your integration with the Stripe Terminal SDK. To improve consistency between our SDKs and to simplify your application logic and integration, we regularly make changes in major version updates that might affect the way your integration works or behaves. This guide explains the latest changes to help you upgrade your integration.
Note
Building a new Stripe Terminal integration? Visit our Design an integration page to learn how to get started.
Migrate to version 5.0.0
Here’s what you need to know about the version 5.0.0 Stripe Terminal iOS and Android SDKs:
- Simplified payment integration
- Process payments, setup intents, and refunds with a single method call combining collect and confirm steps.
- Supports modern Swift async variants and Kotlin Coroutines for simplifying complex asynchronous flows
- Swift concurrency (async/await) for iOS and Kotlin Coroutines for Android.
- Customer cancellation enabled by default
- On supported readers, customers can now cancel transactions by default during payment, setup, refund, and data collection flows.
- Improved mobile reader and Tap to Pay reader auto reconnection observability
- Enhanced reader auto-reconnection handling with more connection status states for mobile readers (Bluetooth and USB) and Tap to Pay readers.
- Discover card acceptance support for Tap to Pay on Android Public preview
- Accept Discover card payments with Tap to Pay on Android.
- Updates to minimum supported platform versions from iOS 14.0 to iOS 15.0
If your application currently uses a Terminal iOS SDK version earlier than 5.0.0, there are several changes you need to make to upgrade. For a detailed list of the changes from version 4.x to 5.0.0, see the SDK changelog.
Update your minimum supported version to iOS 15 or higher
We regularly update the minimum supported version of our SDKs to streamline our developer support efforts.
Existing 4.X versions of the Terminal iOS SDK will continue to support devices running iOS 14 and higher.
Simplified payment integration
Update to unified payment processing
The v5 SDK includes methods that combine the collect and confirm steps into a single operation. While the existing collectPaymentMethod and confirmPaymentIntent methods continue to work, we recommend using the unified methods for simpler integrations.
Processing payments with processPaymentIntent
Replace two-step collect and confirm with a single processPaymentIntent method call.
Before
After
Processing refunds with processRefund
The collectRefundPaymentMethod and confirmRefund methods are now deprecated. Use processRefund instead.
Before
After
Processing setup intents with processSetupIntent
Replace two-step collect and confirm with a single processSetupIntent method call.
Before
After
Swift async variant support
The SDK now provides async variants for Terminal methods. You can write cleaner, sequential code instead of nesting completion handlers.
Before
let cancelable = Terminal.shared.collectPaymentMethod(paymentIntent, collectConfig: collectConfig) { collectedPaymentIntent, collectError in guard let collectedPaymentIntent = collectedPaymentIntent else { // Payment method collection failed return } Terminal.shared.confirmPaymentIntent(collectedPaymentIntent) { confirmedPaymentIntent, confirmError in // Handle confirmation } }
After
let collectTask = Task { do { let collectedIntent = try await Terminal.shared.collectPaymentMethod(paymentIntent, collectConfig: collectConfig) let confirmedIntent = try await Terminal.shared.confirmPaymentIntent(collectedIntent) // Payment successful } catch { // Handle error } } // Use collectTask.cancel() to cancel the operation when needed
Platform and initialization
Update Terminal initialization
The setTokenProvider method has been removed. You must now initialize the SDK with the static Terminal. method before accessing the Terminal. singleton.
Before
After
Reader discovery and connection
Update DiscoveryConfiguration initialization
You can no longer initialize DiscoveryConfiguration objects directly with init or new. You must now use their associated builder classes.
Before
After
Handle reconnection status changes
A new . value has been added to the ConnectionStatus enum. During a reconnect, Terminal. will now be nil until the reconnection is successful.
Before
After
Payment acceptance and data collection
Customer cancellation is now enabled by default
On supported readers, the ability for customers to cancel transactions is now enabled by default. The customerCancellation property has changed from a Bool to the new SCPCustomerCancellation enum.
Before
After
Interac refund parameter updates
If you create SCPRefundParameters for an Interac refund using a PaymentIntent ID, you must now also pass the PaymentIntent’s clientSecret. You can alternatively continue using the charge ID, which doesn’t require the clientSecret.
Before
After