# Build an in-app payments integration Use Stripe’s In-app Payments to build a customized payments integration and checkout flows for your iOS, Android, and React Native apps. This overview helps you plan your integration. > #### US apps selling digital goods > > Android apps in the US that sell digital goods can now process payments in-app using Stripe. If you sell digital goods on iOS, see how to implement an app-to-web flow using Stripe Checkout in [Sell in-app digital goods and subscriptions](https://docs.stripe.com/mobile/digital-goods/checkout.md). With Stripe In-App Payments, you can: 1. Dynamically display 40+ payment methods, including Apple Pay, Google Pay, and Link, as well as saved payment methods. 1. Collect payment information like credit card numbers and billing details. 1. Complete the payment, handling authentication like *3DS2* (3D Secure 2 (3DS2) removes friction from the authentication process and improves the purchase experience compared to 3D Secure 1. It's the main card authentication method used to meet Strong Customer Authentication (SCA) requirements in Europe and is a key mechanism for businesses to request exemptions to SCA) or redirecting to a banking app. ## Choose a UI Choose from three different UI integrations depending on your preferred UX and design needs. | | Payment Sheet | Flow Controller | Payment Element | | ----------------------- | ------------------------ | ------------------------------------------------ | ------------------------------------------ | | Integration effort | Complexity: 2/5 | Complexity: 3/5 | Complexity: 3/5 | | Display payment methods | In a sheet | In a sheet | In an embeddable view | | Collect payment details | In a sheet | In a sheet | In a sheet | | Complete payment | In a sheet | You control when to confirm in your UI | You control when to confirm in your UI | | Layout flexibility | Fixed sheet presentation | Fixed sheet for selection, flexible confirmation | Embed payment methods anywhere in your app | #### Payment Sheet ![A payment flow showing a cart screen with a Buy button that presents Payment Sheet to complete the payment](https://b.stripecdn.com/docs-statics-srv/assets/overview-payment-sheet.1654dac09bb9ee7a067076b22842daa6.png) ![Stripe In-app Payments Showcase App Store QR Code](https://b.stripecdn.com/docs-statics-srv/assets/appstore_qr.ce33264690ffb3cebb2982458ccb496d.svg) This integration displays payment methods, collects payment information, and completes payment all in a single prebuilt sheet. We recommend using this UI to take payments in your app for most users. You can customize more than 50 aspects of the appearance, including colors and fonts, with the [Appearance API guide](https://docs.stripe.com/elements/appearance-api/mobile.md). **Try the demo**: Scan the QR code or use this [link](https://apps.apple.com/us/app/stripe-payments-showcase/id6450683352) to download an interactive demo app. **Best for…** - Adding in‑app payments quickly with minimal code. - A checkout where the customer taps a single “Buy” button and completes payment in one step. **Consider another option for…** - Collecting a payment method first and confirming payment separately in your own UI. To do this, [use Flow Controller](https://docs.stripe.com/payments/mobile.md?in-app-ui=flow-controller#choose-a-ui). - Embedding payment methods directly into your own screens instead of a sheet. To do this, [use Payment Element](https://docs.stripe.com/payments/mobile.md?in-app-ui=payment-element#choose-a-ui). #### Flow Controller ![A multi-step payment flow showing a cart screen that collects a payment method in Stripe's sheet before the customer taps the Buy button](https://b.stripecdn.com/docs-statics-srv/assets/overview-flow-controller.20860fdb0ea1653eb5d60c826eee527c.png) ![Stripe In-app Payments Showcase App Store QR Code](https://b.stripecdn.com/docs-statics-srv/assets/appstore_qr.ce33264690ffb3cebb2982458ccb496d.svg) Flow Controller uses a prebuilt sheet to display and collect payment methods, but lets you control when and how the payment is confirmed in your own UI. It has the same [appearance customizations](https://docs.stripe.com/elements/appearance-api/mobile.md) as Payment Sheet. **Try the demo**: Scan the QR code or use this [link](https://apps.apple.com/us/app/stripe-payments-showcase/id6450683352) to download an interactive demo app. **Best for…** - The customer selecting a payment method in Stripe’s sheet and confirming the payment in your own UI. - Adjusting totals, apply discounts, or collect extra info after the customer chooses a payment method. **Consider another option for…** - A single, end‑to‑end payment experience handled entirely in one sheet. To do this, [use Payment Sheet](https://docs.stripe.com/payments/mobile.md?in-app-ui=payment-sheet#choose-a-ui). - Embedding payment methods directly in your own screens with highly customized rows. To do this, [use Payment Element](https://docs.stripe.com/payments/mobile.md?in-app-ui=payment-element#choose-a-ui). #### Payment Element ![A payment flow showing a cart screen that collects a payment method with Payment Element embedded inline](https://b.stripecdn.com/docs-statics-srv/assets/overview-embedded-inline.fa845b8ce13dee5940fb46c42b0570a4.png) *Payment Element embedded directly in the cart.* ![A payment flow showing a cart screen that collects a payment method with Payment Element on a separate screen](https://b.stripecdn.com/docs-statics-srv/assets/overview-embedded-interstitial.8b11682b3e8a874883a232afc1195530.png) *Payment Element displayed on a dedicated screen.* ![Stripe In-app Payments Showcase App Store QR Code](https://b.stripecdn.com/docs-statics-srv/assets/appstore_qr.ce33264690ffb3cebb2982458ccb496d.svg) Payment Element displays payment methods in an embeddable view instead of a sheet, so you can place the payment method list anywhere in your app. When a customer selects a method that needs more details, Stripe presents a sheet to securely collect that information. You control when and how the payment is confirmed in your own UI. You can fully customize the look and behavior of the payment method rows to match your app’s navigation patterns and design system with the [Appearance API guide](https://docs.stripe.com/elements/appearance-api/embedded-mobile.md). **Try the demo**: Scan the QR code or use this [link](https://apps.apple.com/us/app/stripe-payments-showcase/id6450683352) to download an interactive demo app. **Best for…** - Maximum flexibility over the checkout layout and navigation. - Payment options appearing inline (for example, directly in your cart UI) or on a separate screen that you control. **Consider another option for…** - A single, end‑to‑end payment experience handled entirely in one sheet. To set this up, [use Payment Sheet](https://docs.stripe.com/payments/mobile.md?in-app-ui=payment-sheet#choose-a-ui). - A separate “choose payment method” step before confirmation, without embedding payment methods inline. To do this, [use Flow Controller](https://docs.stripe.com/payments/mobile.md?in-app-ui=flow-controller#choose-a-ui). #### Item 1 ## Choose an API Stripe’s In-App Payments integration uses either [PaymentIntents](https://docs.stripe.com/payments/payment-intents.md) or [SetupIntents](https://docs.stripe.com/payments/setup-intents.md). ### Accept a payment | ⠀ | | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | API | [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) | | Description | Collect payment and charge the customer immediately. Our UI displays a “Save my info” checkbox, allowing customers to save their payment method for future checkouts. Learn more about [saved payment methods](https://docs.stripe.com/payments/mobile.md#saved-payment-methods). | | Supported payment methods | Both single-use and reusable | | Examples | - Buying a product or service in a single transaction (for example, e-commerce checkout) - Paying for a ride or food delivery at the time of order | | **Get started** | [Accept a payment with Payment Sheet](https://docs.stripe.com/payments/mobile/accept-payment.md?integration=paymentsheet&type=payment) | ### Set up a payment method | ⠀ | | | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | API | [SetupIntent](https://docs.stripe.com/api/setup_intents/object.md) | | Description | Collect and save a payment method for future payments *without* charging the customer. | | Supported payment methods | Reusable payment methods only | | Examples | - Signing up for an app and saving a payment method during onboarding - Setting up a payment method at the start of a subscription with a free trial period - Collecting payment details for crowdfunding campaigns (charge only if goal is met) - Storing payment information before activating a utility or service | | **Get started** | [Set up a payment method with Payment Sheet](https://docs.stripe.com/payments/mobile/accept-payment.md?integration=paymentsheet&type=setup) | ### Accept and set up a payment | ⠀ | | | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | API | [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) with [setup_future_usage](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-setup_future_usage) | | Description | Charge the customer now and save their payment method for future use by configuring your PaymentIntent to save the payment method. You can require all payment methods to be saved by configuring `setup_future_usage`. Using `setup_future_usage` disables one-time payment methods, like most [BNPLs](https://docs.stripe.com/payments/buy-now-pay-later.md). To support both one-time and reusable payment methods, configure future usage on specific payment methods, such as [payment_method_options[card][setup_future_usage]](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method_options-card-setup_future_usage) to save cards. | | Supported payment methods | Both single-use and reusable | | Examples | - Signing users up for a subscription that includes an upfront payment (for example, charging the first month immediately) - Charging for an initial purchase while also saving the payment method for incidentals or add-on purchases | | **Get started** | [Accept and set up a payment with Payment Sheet](https://docs.stripe.com/payments/mobile/accept-payment.md?integration=paymentsheet&type=paymentsfu) | #### Item 2 ## Choose an API Stripe’s In-App Payments integration uses either [PaymentIntents](https://docs.stripe.com/payments/payment-intents.md) or [SetupIntents](https://docs.stripe.com/payments/setup-intents.md). ### Accept a payment | ⠀ | | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | API | [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) | | Description | Collect payment and charge the customer immediately. Our UI displays a “Save my info” checkbox, allowing customers to save their payment method for future checkouts. Learn more about [saved payment methods](https://docs.stripe.com/payments/mobile.md#saved-payment-methods). | | Supported payment methods | Both single-use and reusable | | Examples | - Buying a product or service in a single transaction (for example, e-commerce checkout) - Paying for a ride or food delivery at the time of order | | **Get started** | [Accept a payment with Flow Controller](https://docs.stripe.com/payments/mobile/accept-payment.md?integration=paymentsheet-flowcontroller&type=payment) | ### Set up a payment method | ⠀ | | | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | API | [SetupIntent](https://docs.stripe.com/api/setup_intents/object.md) | | Description | Collect and save a payment method for future payments *without* charging the customer. | | Supported payment methods | Reusable payment methods only | | Examples | - Signing up for an app and saving a payment method during onboarding - Setting up a payment method at the start of a subscription with a free trial period - Collecting payment details for crowdfunding campaigns (charge only if goal is met) - Storing payment information before activating a utility or service | | **Get started** | [Set up a payment method with Flow Controller](https://docs.stripe.com/payments/mobile/accept-payment.md?integration=paymentsheet-flowcontroller&type=setup) | ### Accept and set up a payment | ⠀ | | | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | API | [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) with [setup_future_usage](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-setup_future_usage) | | Description | Charge the customer now and save their payment method for future use by configuring your PaymentIntent to save the payment method. You can require all payment methods to be saved by configuring `setup_future_usage`. Using `setup_future_usage` disables one-time payment methods, like most [BNPLs](https://docs.stripe.com/payments/buy-now-pay-later.md). To support both one-time and reusable payment methods, configure future usage on specific payment methods, such as [payment_method_options[card][setup_future_usage]](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method_options-card-setup_future_usage) to save cards. | | Supported payment methods | Both single-use and reusable | | Examples | - Signing users up for a subscription that includes an upfront payment (for example, charging the first month immediately) - Charging for an initial purchase while also saving the payment method for incidentals or add-on purchases | | **Get started** | [Accept and set up a payment with Flow Controller](https://docs.stripe.com/payments/mobile/accept-payment.md?integration=paymentsheet-flowcontroller&type=paymentsfu) | #### Item 3 ## Choose an API Stripe’s In-App Payments integration uses either [PaymentIntents](https://docs.stripe.com/payments/payment-intents.md) or [SetupIntents](https://docs.stripe.com/payments/setup-intents.md). ### Accept a payment | ⠀ | | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | API | [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) | | Description | Collect payment and charge the customer immediately. Our UI displays a “Save my info” checkbox, allowing customers to save their payment method for future checkouts. Learn more about [saved payment methods](https://docs.stripe.com/payments/mobile.md#saved-payment-methods). | | Supported payment methods | Both single-use and reusable | | Examples | - Buying a product or service in a single transaction (for example, e-commerce checkout) - Paying for a ride or food delivery at the time of order | | **Get started** | [Accept a payment with Payment Element](https://docs.stripe.com/payments/mobile/accept-payment-embedded.md?type=payment) | ### Set up a payment method | ⠀ | | | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | API | [SetupIntent](https://docs.stripe.com/api/setup_intents/object.md) | | Description | Collect and save a payment method for future payments *without* charging the customer. | | Supported payment methods | Reusable payment methods only | | Examples | - Signing up for an app and saving a payment method during onboarding - Setting up a payment method at the start of a subscription with a free trial period - Collecting payment details for crowdfunding campaigns (charge only if goal is met) - Storing payment information before activating a utility or service | | **Get started** | [Set up a payment method with Payment Element](https://docs.stripe.com/payments/mobile/accept-payment-embedded.md?type=setup) | ### Accept and set up a payment | ⠀ | | | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | API | [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) with [setup_future_usage](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-setup_future_usage) | | Description | Charge the customer now and save their payment method for future use by configuring your PaymentIntent to save the payment method. You can require all payment methods to be saved by configuring `setup_future_usage`. Using `setup_future_usage` disables one-time payment methods, like most [BNPLs](https://docs.stripe.com/payments/buy-now-pay-later.md). To support both one-time and reusable payment methods, configure future usage on specific payment methods, such as [payment_method_options[card][setup_future_usage]](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method_options-card-setup_future_usage) to save cards. | | Supported payment methods | Both single-use and reusable | | Examples | - Signing users up for a subscription that includes an upfront payment (for example, charging the first month immediately) - Charging for an initial purchase while also saving the payment method for incidentals or add-on purchases | | **Get started** | [Accept and set up a payment with Payment Element](https://docs.stripe.com/payments/mobile/accept-payment-embedded.md?type=paymentsfu) | ## Saved payment methods Stripe’s In-App Payments supports saving, displaying, and managing saved card, US Bank account, and SEPA Debit payment methods. Consent collection is handled automatically, ensuring global compliance. #### Item 1 ![Payment Sheet saved payment methods](https://b.stripecdn.com/docs-statics-srv/assets/ps-saved-payment-methods.da5ebb05306fb56bcce0737b3e06a0df.png) Access saved payment methods in Payment Sheet #### Item 2 ![Payment Sheet saved payment methods](https://b.stripecdn.com/docs-statics-srv/assets/ps-saved-payment-methods.da5ebb05306fb56bcce0737b3e06a0df.png) Examples of how customers can access saved payment methods in Payment Sheet #### Item 3 ![Payment Element saved payment methods](https://b.stripecdn.com/docs-statics-srv/assets/pe-saved-payment-methods.6aef147c8b230f2cb50c115b2054f814.png) Examples of how customers can access saved payment methods in Payment Element The [CustomerSessions API](https://docs.stripe.com/api/customer_sessions.md) provides additional control over: - When to show or hide the save consent box - When to show or hide the saved payment methods - Allowing buyers to remove saved payment methods - Preventing buyers from removing the last saved payment method ## Features and availability - **UI** In-app Payments - **UI customization** Extensive, using the [Appearance API](https://docs.stripe.com/elements/appearance-api/mobile.md) - **Payment methods** 1 - [100+](https://docs.stripe.com/payments/payment-methods/integration-options.md#choose-how-to-add-payment-methods) - [Dynamic payment methods](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md) - [Faster checkout with Link](https://docs.stripe.com/payments/link.md) - [Apple Pay](https://docs.stripe.com/apple-pay.md), [Google Pay](https://docs.stripe.com/google-pay.md), and [Amazon Pay](https://docs.stripe.com/payments/amazon-pay.md) - [Custom payment methods](https://docs.stripe.com/payments/mobile/custom-payment-methods.md) - **SDK support** [iOS](https://github.com/stripe/stripe-ios), [Android](https://github.com/stripe/stripe-android), and [React Native](https://github.com/stripe/stripe-react-native) - **One-time and recurring payments** Yes - **Fraud protection** [Yes](https://docs.stripe.com/radar.md) - **Global payments** [Yes](https://stripe.com/global) 1Wallet payment methods require [registering your domain](https://docs.stripe.com/payments/payment-methods/pmd-registration.md).