App Monetization

Mobile apps have access to one of the most effective monetization channels available: native in-app purchases and subscriptions, processed directly through Apple and Google's payment systems. This guide explains how monetization works in Median apps, what your options are, and how to choose the right approach for your app.

How in-app purchases work in Median apps

When a user purchases digital content, subscriptions, premium features, or other in-app digital products, the payment must be processed natively by Apple (via StoreKit) or Google (via Play Billing) rather than through your web app's existing payment system.

This requirement applies specifically to digital goods sold within a mobile app. In these cases, Stripe, PayPal, and other web-based payment providers cannot be used to process the transaction. Apple and Google require eligible digital purchases to be sold through their respective in-app purchase (IAP) systems and charge a commission on those sales.

If your app already sells products or services outside the scope of app store billing requirements, those payment flows may continue to use your existing payment infrastructure.

Median provides two ways to implement native in-app purchases and subscriptions.

Two paths to monetization

Option 1 - RevenueCat (recommended)

Median's RevenueCat plugin sits on top of the native IAP layer and handles the complexity for you. RevenueCat is a subscription management platform that unifies iOS and Android purchases behind a single API, manages receipt validation, tracks subscription status across devices, and provides built-in revenue analytics. It also includes a no-code paywall builder.

For most apps — especially those built on AI platforms — RevenueCat is the recommended starting point. It removes the need to manage platform-specific billing logic and significantly reduces the time from decision to first paid user.

Option 2 - In-App Purchases (direct)

Median's In-App Purchases plugin gives you direct access to Apple StoreKit and Google Play Billing. You configure your products (subscriptions, one-time purchases, consumables) in App Store Connect and Google Play Console, then call them from your app using Median's JavaScript Bridge.

This is the lower-level path. It gives you full control but requires you to manage products, receipts, and subscription status separately on iOS and Android.

Understanding the layers

block-beta
  columns 1
 
  P["🎨 RevenueCat Paywalls\nNo-code paywall UI · A/B testing · App review compliant"]
  space
  O["📦 RevenueCat Products & Offerings\nUnified subscription management · Cross-platform status · Revenue analytics"]
  space
  I["💳 Native In-App Purchases\nApple StoreKit · Google Play Billing · Raw platform payment APIs"]
 
  I --> O
  O --> P
 
  style P fill:#EEF2FF,stroke:#6366F1,color:#1E1B4B
  style O fill:#F0FDF4,stroke:#22C55E,color:#14532D
  style I fill:#FFF7ED,stroke:#F97316,color:#7C2D12

Native In-App Purchases are the foundation. Every purchase ultimately flows through Apple or Google's payment system. This is a platform required, not a Median one.

RevenueCat Products & Offerings wrap the native layer. You define your products once in RevenueCat (monthly subscription, annual plan, lifetime access) and RevenueCat handles syncing them across both stores, validating receipts, tracking who has an active subscription, and surfacing revenue data in one dashboard.

RevenueCat Paywalls sit on top of that. Instead of building a purchase screen in your app's UI, you design it in RevenueCat's no-code editor and present it with a single JavaScript call. Paywalls can be updated without a new app build and can be A/B tested.

You can use any layer independently but starting with RevenueCat paywalls gives you the fastest path to a working, scalable monetization setup.

Getting started with RevenueCat

Here is a condensed path to your first in-app purchase. The full RevenueCat guide covers each step in detail.

Step 1 - Connect your apps in RevenueCat

Sign in to RevenueCat and add both your iOS and Android apps under Apps & Providers. You'll need your iOS Bundle ID and Android Package Name. You can find your Bundle ID and Package Name in the App Studio. Please see our App Identifiers article for this.

Step 2 - Retrieve your API key

RevenueCat provides a public SDK API key for your project. You'll use this to initialise the plugin at runtime. A test key is available by default so you can validate the purchase flow before going live.

Step 3 - Configure your products

Set up your subscription products (monthly, annual, lifetime) in App Store Connect and Google Play Console, then import them into RevenueCat using their Product Configuration Guide.

Step 4 - Enable the plugin in Median App Studio

In your app configuration, go to Native Plugins → RevenueCat and enable the plugin. No configuration is needed here. The SDK initialisation happens at runtime via the JavaScript Bridge as shown in Step 5.

RevenueCat Plugin Enablement

Step 5 - Initialize and call the Bridge

Once your user is authenticated, initialize the SDK with your API key and the (optional) user ID, then use the JavaScript Bridge functions to fetch offerings, trigger purchases, and present your paywall.

↔️Median JavaScript Bridge

// Initialise once after user login
await median.revenueCat.configure({
  apiKey: '<your_api_key>',
  appUserID: '<authenticated_user_id>'
});

// Show a paywall configured in RevenueCat
median.revenueCat.presentPaywall();

📘 Full RevenueCat JavaScript Bridge reference

Choosing your approach

Direct In-App PurchasesRevenueCat
Setup complexityHigher - manage iOS and Android separatelyLower - single unified SDK
Product & Subscription managementManual - you track status yourselfAutomatic - RevenueCat tracks across devices
Receipt validationManualBuilt-in
Paywall UIYou build it in your web appNo-code editor in RevenueCat dashboard
Revenue analyticsSeparate dashboards per platformUnified MRR, churn, LTV in one place
Best forApps with existing billing infrastructureNew apps and AI-built apps starting from scratch