Opening the Checkout
Open checkoutUrl in the system browser, not in an embedded WebView. This is required by Apple's terms, and it is also what makes Apple Pay reliable on the page.
iOS (Swift)
import UIKit
import StoreKit
// The Apple disclosure sheet is presented automatically by the system
// as soon as the External Purchase Link entitlement is configured.
if let url = URL(string: session.checkoutUrl) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}Android (Kotlin)
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(session.checkoutUrl))
startActivity(intent)
WarningDisplaying a button that leads to an external payment is subject to the App Store and Play Store terms, which vary depending on the geographic storefront. See Store Compliance before you submit your app.
What the buyer sees
The hosted page is the standard Inflow checkout — payment methods, tax handling, and coupon field included. See Checkout Interface Overview for the page itself, and Session Customization to brand it.
The final screen depends on the returnMode you set when creating the session. In APP_RETURN, it carries the "Back to the app" button described in Returning to the App.
While the buyer is paying
Do not block your app on the browser. The user may switch away, close the tab, or pay with a method that settles asynchronously. Show a neutral "waiting for payment" state and let Refreshing Entitlements resolve it — the authoritative signal arrives on your backend through webhooks, not through the browser.
Updated about 15 hours ago