Despia offers two payment integrations because Apple and Google require different rails for different kinds of purchases. This is not a preference between competing tools, it is platform policy. Pick the right one based on what the customer is actually buying.Documentation Index
Fetch the complete documentation index at: https://setup.despia.com/llms.txt
Use this file to discover all available pages before exploring further.
Both integrations use the same
despia-native SDK, the same navigator.userAgent.toLowerCase().includes('despia') detection, and the same fire-and-listen callback pattern. The only thing that changes is which scheme you fire and which callback you listen for. Many apps end up using both, scoped to their respective categories.Which integration to use
| What the customer is buying | Use this | Example apps |
|---|---|---|
| Digital content consumed inside the app: subscriptions, memberships, premium tiers, coins, credits, in-app currency, ad removal, level unlocks, feature flags | RevenueCat | Netflix, Spotify, Duolingo, Calm, MyFitnessPal Premium |
| Physical goods, real-world services, marketplace transactions: delivery, ride-hailing, ticketing, bookings, professional services | Stripe | Amazon, Uber, DoorDash, Airbnb, Angie’s List, OpenTable |
RevenueCat for digital goods
RevenueCat wraps Apple In-App Purchase and Google Play Billing into a single SDK. Despia bridges that SDK to your web layer so you can trigger native paywalls, take subscriptions, check entitlements, and open the native Customer Center throughdespia(). Entitlements like premium or no_ads are configured once in the RevenueCat dashboard and resolve identically on iOS and Android.
RevenueCat Introduction
Full setup walkthrough, paywall flows, entitlement checks, Customer Center, and webhook reconciliation.
Stripe for physical goods and services
Stripe gives you the native PaymentSheet (cards, Apple Pay, Google Pay, Link) and CustomerSheet (saved card management) inside your app. Your backend creates a Payment Intent with the amount, currency, and customer, your page forwards the resulting client secret intodespia(), and the customer pays without ever leaving the WebView. Stripe takes its standard processing fee (typically 2.9% + 30 cents in the US, varying by region) and that is the entire cost. Apple and Google do not take a cut of physical-goods transactions.
Stripe Introduction
Full setup walkthrough, the Payment Sheet, saved cards, the native CustomerSheet, styling, and webhook reconciliation.
Using both
Most apps need only one of the two. Some need both, when they sell both digital and physical things from the same app. A fitness app might sell premium workout content (digital, RevenueCat) and branded merchandise (physical, Stripe). A creator platform might sell a subscription to access exclusive videos (digital, RevenueCat) and let users tip creators for live events that get streamed and recorded in the real world. A marketplace app might charge a platform subscription for sellers (digital, RevenueCat) and process the actual goods transactions (physical, Stripe). When using both, scope each integration to its category and never cross them. Subscriptions go through RevenueCat. Physical orders go through Stripe. The user experience is naturally separated by what they tap to buy, so the routing is rarely ambiguous in practice.window.onRevenueCatPurchase for RevenueCat, window.stripeEvent for Stripe) are independent and can both be defined on the same page without interfering with each other.
Compliance recap
The split between the two integrations is enforced by the platforms, not by Despia. Submitting an app that uses Stripe for digital goods results in rejection at review, with Apple citing guideline 3.1.3 and Google citing the Play payments policy. Submitting an app that uses In-App Purchase for physical goods or real-world services is also rejected, since the platforms only allow IAP for digital content consumed inside the app. If you are unsure which category a specific feature falls into, the test is: does the user receive value that lives inside the app, or does something happen in the real world? A “buy 100 coins” button creates value inside the app, so RevenueCat. A “book a cleaner for Saturday” button creates value in the real world, so Stripe. A “buy this shirt” button puts a physical item on a truck, so Stripe. A “remove ads forever” button changes app behavior, so RevenueCat. When the answer is genuinely ambiguous (rare), open a support ticket before submitting. Getting this wrong delays your launch by a review cycle at minimum.Resources
NPM Package
despia-native, the SDK used for both integrations
App Review Guidelines 3.1.3
Apple’s payments policy and the digital vs physical distinction
Google Play Payments Policy
Google’s billing policy and IAP requirements