[Documentation](https://fluxnative.app/docs) / Connect services

# In-app purchases

Sell a subscription by following the checklist on Publish › Purchases: the stores, RevenueCat, the paywall, the products and a test purchase.

![Publish, Purchases: Get subscriptions working, a numbered checklist from the app on Google Play to RevenueCat, the paywall and a build with Google Play Billing, with a button on each step](https://fluxnative.app/guide-media/in-app-purchases.7095f9a9.webp)

Purchases lists every step a subscription needs and ticks each one it can see done.

## Steps

1. Create the app on Google Play (**Free**), set up Play's payments profile, and sign Apple's Paid Apps Agreement.
2. Connect RevenueCat under **Server** › **Monetization** (\[how\](#connect-revenuecat)).
3. Ask the assistant for the paywall: RevenueCat, **Restore purchases** and the legal links.
4. Send an App Bundle to internal testing; Google allows subscriptions only after a Play Billing build.
5. On Publish › **Purchases**: **Review**, then **Create subscription** (`pro`, base plans `monthly` and `yearly`).
6. Make the App Store's products (below), test a purchase, and **Mark done**.

## App Store products

1. On Publish › **Purchases**, switch to iOS and press **Set up on the App Store**.
2. Check each product's type, name, description and price, pick the screen App Review should see, and press **Make on the App Store**.
3. FluxNative makes them in App Store Connect (price, countries, review screenshot and note) and adds them to RevenueCat beside the Google Play ones. A product you started by hand only gets what it lacks.
4. An app's first products go to review with the app: **Submit for review** takes the ones the app sells along. Later ones: **Send for review**.

## Connect RevenueCat

1. Create a RevenueCat project for this app only, with its App Store app (In-App Purchase key) and Play app. For the Play app, use a second service account, not the one FluxNative publishes with, invited in Play Console with **View app information and download bulk reports (read-only)**, **View financial data, orders, and cancellation survey responses**, **Manage orders and subscriptions** and **Manage store presence**.
2. Under **Product catalog**, create the entitlement `pro`.
3. Under **Project settings** › **API keys**, create a **V2** secret key (`sk_…`): Project configuration Read & write, Customer information Read.
4. Paste it under **Server** › **Monetization**.

## Test without paying

Add Google Play testers under **Settings** › **License testing**; they are never charged. On iPhone, sign in to a **Sandbox** account and install from TestFlight: a month renews in about 5 minutes. In RevenueCat, turn on **View sandbox data**.

## Good to know

- Physical goods and services can't use in-app purchases: ask for Stripe (or VNPay, MoMo, ZaloPay, PayOS in Vietnam).
- Uploads refuse a demo paywall that unlocks without a store; builds refuse RevenueCat's `test_` key.
- Apple rejects paywalls without **Restore purchases**, Terms and privacy links, or a clear price and period (3.1.2).
- A Google product ID and its billing periods never change.

## Related

[Google Play testing](https://fluxnative.app/docs/google-play-testing) · [Store page](https://fluxnative.app/docs/store-listing)

Previous: [Your store, site or API](https://fluxnative.app/docs/your-api) · Next: [Ads](https://fluxnative.app/docs/ads)

---

Sell a subscription by following the checklist on Publish › Purchases: the stores, RevenueCat, the paywall, the products and a test purchase.

Page: https://fluxnative.app/docs/in-app-purchases
