RevenueCat supports Android in-app payments only via Google Play Billing; Stripe is supported only for web - ChatGPT
Quick-Info
Details
Given below are edited extracts from a ChatGPT (CG) chat, 'RevenueCat support for Android', today, 27 Sep. 2025.1. Why you can’t (directly) use Stripe for Android in-app purchases
-
Google Play policy requires that if your app sells digital goods or services (like courses in your LMS), you must use Google Play Billing for payments inside the Android app.
-
If you try to use Stripe directly in your Android app, Google can reject or remove your app from the Play Store.
So it’s not a technical limitation, it’s a store policy restriction.
2. What you can do with Stripe
-
On the web app: you’re free to use Stripe Checkout/Subscriptions. No restrictions.
-
On the Android app: you could technically code Stripe in, but then you’d have to distribute your app outside Google Play (e.g., direct APK, Amazon Appstore, etc.), because Play Store won’t allow it for digital goods.
3. Where RevenueCat fits in
RevenueCat is an aggregator:
-
On Android → it expects Google Play Billing as the payment source.
-
On Web → it supports Stripe.
-
It unifies both into one subscriber / entitlement system.
So if you call RevenueCat APIs from your Node.js backend after a Stripe payment, RevenueCat can mark that user as having access to the entitlement.
4. Possible workaround (Node.js + RevenueCat + Stripe)
Since you have a STRAPI backend, you could:
-
Use Stripe in your backend to handle payments.
-
When a payment succeeds, call RevenueCat’s REST API to grant the entitlement to the user.
-
RevenueCat REST API → grant entitlement (they call it subscriber attributes + entitlements).
-
-
Your React Native app (on Android) would check RevenueCat for entitlements, not Stripe directly.
👉 This works technically.
🚨 But if you plan to distribute on Google Play, it will likely violate Play Store policy unless you’re only selling physical goods (which can use Stripe).
✅ So:
-
If you’re just learning → you can absolutely play with Stripe + Node.js + RevenueCat without a Play Store account.
-
If you’re aiming for real distribution on Google Play → you’ll eventually need to use Google Play Billing, not just Stripe.
...
Me: Hmm. Google Play policy is the issue! Got it.
Also, the payment will involve showing some payment pages like Credit Card page. Stripe documentation shows how it can be done with HTML/React.JS/next.js front end and various backends including node.js - https://docs.stripe.com/checkout/quickstart.
But it does not show Android app as front end? Does that mean that Stripe does not directly support an Android app using it?
CG: Exactly 👍 you spotted it. Stripe’s docs show:
-
Web frontends (React.js, Next.js, plain HTML/JS) → where they embed Stripe Checkout or Payment Element.
-
Mobile SDKs → Stripe has separate Stripe Android and Stripe iOS SDKs.
So yes — Stripe does support native Android apps, but not for Play Store in-app digital purchases (because of Google’s billing policy).
Stripe’s Mobile SDKs
With these, you can collect credit card details, Apple Pay, Google Pay, etc., directly inside a mobile app.
But again:
-
If you use them to sell digital content inside a Play Store app → violation of Google Play policy.
-
If you use them to sell physical goods/services (like t-shirts, ride bookings, food delivery) → perfectly allowed.
Why the Stripe quickstart skips Android
The quickstart you saw is focused on Stripe Checkout (a prebuilt hosted payment page). That’s a web-only solution — it runs in a browser. That’s why they show React.js/Next.js examples, not Android.
For Android apps, they expect you to either:
-
Use Stripe Android SDK / Stripe React Native SDK for in-app payments (allowed only for physical goods).
-
Or open a webview/browser inside the app to Stripe Checkout — but again, that’s blocked for digital goods in Play Store.
✅ So, summary:
-
Stripe does support Android and React Native via its SDKs.
-
But Stripe Checkout (the hosted page in docs) is only for web.
-
For digital subscriptions/courses in your LMS → Play Store rules force you to use Google Play Billing, not Stripe.
...
Me: Hmm. I think I am getting the picture now. Quite confusing - all these policies (I am sure Apple would have its own policy like Google does). But then web is democratic and not owned by one company. On mobile, we are forced into proprietary world of Google Play or iOS store controlled by Google or Apple, even if Android OS itself may not be proprietary.
CG: You’ve got it exactly 👍
-
On the web → open standards, no single gatekeeper. You can use Stripe, Razorpay, PayPal, your own Node.js checkout… no one can stop you.
-
On mobile app stores → Apple and Google are the gatekeepers.
-
Apple → requires App Store IAP for digital goods.
-
Google → requires Google Play Billing for digital goods.
-
-
Both take their commission cut (historically 30%, now ~15% in many cases).
That’s why RevenueCat exists — it helps developers manage this fragmented, policy-driven world while also syncing entitlements across Apple, Google, Stripe (web) in one place.
So yes, you’ve uncovered the philosophical tension:
-
Mobile OS (Android) can be open-source, but the distribution and payments layer (Google Play / App Store) is proprietary and tightly controlled.
-
The web is democratic — and Stripe lives there natively.
👉 For your React Native LMS app, this means:
-
On web → Stripe gives you freedom.
-
On Android/iOS → you’re bound by Google/Apple rules if you want to be in their stores.
...
Me: It is great that Stripe does provide an Android SDK which technically allows an Android app to use its prebuilt checkout page. So if somebody chooses to use some other app store which does not have this restrictive policy that Google Play has, then that Android app will work with Stripe. I really like that. But does RevenueCat also provide something similar. I am looking for a solution where my RN app will use RevenueCat (for both Android and web), and RevenueCat provides me support for using Stripe for Android as well as web. Is that possible with RevenueCat?
CG: Ahh, this is the key subtlety 👍 Let’s clarify carefully:
1. Stripe on Android (directly)
-
Stripe gives you an Android SDK (and a React Native SDK) → you can embed card entry, Google Pay, etc. inside your app.
-
Technically, this works in any Android app, including those distributed outside Play Store (e.g., Amazon Appstore, direct APK, Huawei AppGallery).
-
Policy-wise → only restricted if you want to be on Google Play and sell digital goods.
2. RevenueCat’s support for Stripe
RevenueCat supports Stripe, but only in a web context right now.
-
Their official integrations:
-
App Store (iOS)
-
Play Store (Android)
-
Stripe (web checkout, customer portal)
-
-
Stripe is treated as a non-mobile payment source.
-
RevenueCat docs say: “Stripe is supported for web and server-to-server purchases.”
-
RevenueCat does not expose a way for your Android app to directly run a Stripe checkout and have it automatically handled as an in-app purchase source.
3. Why not Stripe on Android via RevenueCat?
Because if they offered that, they’d be enabling developers to bypass Google Play Billing for digital goods → which would put them in direct conflict with Google’s Play Store policies.
RevenueCat wants to stay compliant with both Apple and Google, so they only support:
-
Google Play Billing on Android.
-
StoreKit (App Store) on iOS.
-
Stripe (only outside app stores, i.e. web).
4. What you can do
-
If you distribute your RN app outside Google Play:
-
You could build your own Stripe Android flow with Stripe’s RN SDK.
-
Then, you could call RevenueCat’s REST API to grant entitlements to users after a successful payment.
-
This way, RevenueCat becomes your single source of truth for subscriptions.
-
So it is possible, but not out-of-the-box with RevenueCat. You’d be stitching it together yourself.
✅ Answer to your question:
RevenueCat does not currently provide official support for Stripe payments inside Android apps.
They support Stripe for web payments only.
For Android, they only support Google Play Billing.
If you want to use Stripe on Android (say via Amazon Appstore or direct APK), you’d need to:
-
Use Stripe’s RN SDK for checkout.
-
After payment, tell RevenueCat via API to update entitlements.
...
Me: Great explanation! I think I have got a good idea now of how things stand and why they are the way they are, in this context.
As of now, as a learner I think the sensible thing for me is to simply skip the Android in-app payment part of the RN lms tutorial app. I can have the RN code set up to use RevenueCat but not process payments for Android (show some message about why it is not supported) and support it for web through RevenueCat which invokes Stripe.
CG: Yes 👌 that’s a very practical plan.
As a learner right now:
-
React Native LMS app (Android)
-
Keep the RevenueCat SDK initialized, so you get familiar with the setup and entitlement checking.
-
Instead of processing payments, just show a message explaining why in-app payments aren’t available (since you don’t have a Google Play Developer account).
-
That way, you still keep the Android flow in place structurally, and later you can plug in Google Play Billing if you decide to.
-
-
Web app
-
Fully integrate RevenueCat + Stripe.
-
You’ll learn the real payment flow (checkout, success/failure, entitlement updates).
-
This gives you the complete picture without running into Google Play policy blockers.
-
That way you:
-
Still gain full exposure to RevenueCat’s entitlements model.
-
Learn how to connect Stripe → RevenueCat → RN app.
-
Avoid wasting time fighting Google Play restrictions before you’re ready.
Later, if you decide to invest in a Google Play Developer account, you can just “switch on” Android billing support in RevenueCat without rewriting everything.
...
CG: To put it in one line:
RevenueCat supports Android in-app payments only via Google Play Billing; Stripe is supported only for web (and server-to-server) payments.
That’s the clean summary.
Comments
Post a Comment