In-App Purchases and Subscriptions: The Complete Publishing Guide

In-App Purchases and Subscriptions: The Complete Publishing Guide

Subscription apps are usually rejected for practical reasons, not because recurring revenue is forbidden. The common problems are payment routing, unclear subscription terms, missing restore controls, failed test purchases, or store products that do not match the paywall. This guide shows the setup reviewers are likely to test so you can submit with a cleaner purchase flow and fewer avoidable review cycles.

How Subscription Apps Get Rejected - and How to Prevent It goes deeper on the ideas above and adds concrete next steps.

Why Do Subscription Apps Fail App Review?

Apple and Google both allow subscriptions for digital features, but they expect the purchase path, product metadata, and user disclosures to line up. Apple documents in-app purchase and subscription requirements in its App Review Guidelines and In-App Purchase documentation. Google explains similar concepts through Play Console subscriptions, base plans, and offers in its Play Console Help and Play Billing subscriptions overview.

Review areaWhat the reviewer checksTypical failurePractical fix
Payment implementationThe app uses StoreKit or Google Play Billing for digital accessA Stripe or web checkout link sells premium app featuresRoute digital purchases through platform billing
Terms presentationPrice, billing period, renewal behavior, and trial terms are visible before purchasePaywall says "Start free trial" without post-trial pricePut full subscription terms on the paywall
Store configurationStore product setup matches the app experienceAnnual plan in the app points to a monthly product IDReconcile product IDs, prices, periods, and offers before submission
Entitlement handlingPaid access unlocks after purchase and restores laterPurchase succeeds but the app stays lockedTest receipts, tokens, backend state, and restore paths

The practical interpretation is simple: review is not only about whether payment code compiles. It is about whether a real user, including a reviewer in a test environment, can understand the offer, complete the purchase, receive access, and manage or restore that access.

The business impact is direct. A failed sandbox purchase can block launch even when the app itself is polished. For a small team, expect a few focused hours for product reconciliation and a half day or more for purchase testing across devices, accounts, and edge cases.

What a Reviewer Tests During a Sandbox Purchase

A typical review pass looks like this:

  1. Launch the app and reach the paywall.
  2. Check price, billing period, renewal language, and trial terms.
  3. Complete a sandbox or test purchase through the platform billing sheet.
  4. Confirm that the paid entitlement unlocks immediately.
  5. On iOS, look for Restore Purchases and validate that restoration works.
  6. On both platforms, verify that users can access subscription management.

This matters because the reviewer is testing the complete commercial loop, not just the visual design. If the billing sheet fails, the entitlement does not unlock, or the restore path is missing, the review can fail before the core app experience gets much attention.

When you move from outline to execution, Subscriptions That Pass Review: Trials, Restore, Pricing helps close common gaps teams hit here.

When Must Apps Use In-App Purchases?

For digital content and in-app features, purchases usually need to use the platform billing system. On iOS, that means StoreKit and App Store in-app purchases. On Android, that means the Google Play Billing Library.

Digital Features Must Use Platform Billing

Digital access commonly includes subscriptions or purchases for:

  • Premium workouts, meditation plans, or training programs
  • AI credits, generation limits, or productivity features
  • Gated lessons, courses, articles, or creator tools
  • Cloud features, team workspaces, or advanced sync
  • Ad-free access, premium themes, or unlocked app modes

If the subscription unlocks functionality inside the app, purchase confirmation should happen inside the platform billing flow. The app can still use its own account system, backend, and entitlement database, but the initial digital purchase should be processed through StoreKit or Google Play Billing.

Where External Checkout Creates Review Risk

High-risk patterns include:

  • A "Subscribe on Web" button inside the app for premium digital features
  • A Stripe checkout link from the paywall, settings screen, or help center
  • A support article that tells users to buy premium access outside the app
  • Onboarding copy that says web subscribers get cheaper in-app access
  • A pricing page that bypasses platform billing for app functionality

This guide focuses on subscriptions that unlock app functionality. Physical goods, real-world services, and some reader, enterprise, or account-based scenarios can have different rules, but those exceptions should not be assumed casually.

Before submission, audit every paywall, settings screen, onboarding message, FAQ, support link, and empty state. Even one stray external purchase path can create review risk for a digital subscription app.

Prerequisites Before You Create Store Products

Prepare the operational pieces before configuring products:

  • Bundle ID for iOS or package name for Android
  • App record in App Store Connect or Play Console
  • Paid app agreements, tax forms, and banking setup
  • Stable product IDs, such as monthly_premium_access or annual_pro_unlimited
  • A clear entitlement model for what each plan unlocks
  • A validation plan for receipts or purchase tokens

Product IDs should be descriptive and durable. Changing them later can be painful because your app code, backend, analytics, support playbooks, and store configuration may all depend on them.

A complementary angle worth comparing lives in Top 5 Things Every Founder Must Do Before Submitting an App.

How Do You Configure Subscriptions in App Store Connect and Google Play?

Store configuration is where many subscription apps drift out of alignment. The paywall says one thing, the store product says another, and the billing sheet exposes the mismatch during review.

App Store Connect Setup

  1. Create the in-app purchase product

    In App Store Connect, create each product under the app's in-app purchase area. Add a reference name, product ID, price, display name, and user-facing description.

  2. Use subscription groups for recurring plans

    For auto-renewable subscriptions, organize monthly and annual tiers in a subscription group. This helps Apple understand upgrades, downgrades, renewals, and mutually exclusive access levels.

  3. Configure trials as introductory offers

    A free trial is usually not a separate subscription product. Configure it as an introductory offer, then verify the trial duration, renewal price, and billing period match the paywall.

  4. Attach products correctly for review

    Make sure products are in the right status for review and connected to the app version when needed. Store status, tax agreements, or missing review metadata can delay testing.

Google Play Console Setup

  1. Create the correct product type

    In Play Console, create one-time in-app products or recurring subscriptions under the monetization area. Choose based on whether access is permanent, consumable, or recurring.

  2. Set up base plans

    A base plan defines the billing schedule, such as monthly or annual. Use base plans to keep renewal logic consistent and easy to map to the in-app paywall.

  3. Attach offers for trials or discounts

    Offers handle free trials, introductory pricing, and promotional structures. Check eligibility rules carefully so testers and real users can see the intended purchase option.

  4. Review countries, prices, and status

    Confirm product availability, localized prices, active status, and test access before submission. If a subscription is not active or available in the reviewer's environment, the purchase path can break.

In practice, the setup should converge like this:

iOS structureAndroid structureShared output
Product IDSubscription productStable entitlement mapping
Subscription groupBase planMonthly or annual billing logic
Introductory offerOfferTrial, discount, or promo terms
App paywall copyApp paywall copyMatching price, period, and renewal language

Configure the stores first, then make the paywall reflect those products exactly. Do not let marketing copy, backend entitlements, and store metadata evolve separately.

For tradeoffs, checklists, and edge cases, Step-by-Step Guide to Publishing Your First Mobile App rounds out this section.

Build a Lower-Risk Paywall and Purchase Flow

Once products are configured, the in-app experience has to show that the user understands the offer and receives the entitlement. This reduces review risk, but it does not guarantee approval because store policy interpretation, account state, product status, and test environment issues can still affect the outcome.

Terms Users Must See Before They Subscribe

Your paywall should show, before the user taps the purchase button:

  • Price
  • Billing period
  • Auto-renewal behavior
  • What the subscription unlocks
  • Trial length, if any
  • Post-trial price and billing period
  • How cancellation or subscription management works

For example, "Start 7-day free trial" is incomplete if it does not show what happens after day seven. A stronger version is: "Start 7-day free trial, then $9.99/month. Cancel anytime in your App Store or Google Play subscription settings."

Restore Purchases and Manage Subscription Access

  1. Add Restore Purchases on iOS

    Put a visible Restore Purchases button in settings, account, or the paywall footer. Connect it to the StoreKit restore flow so users can recover access after reinstalling or changing devices.

  2. Provide subscription management access

    Send users to Apple or Google subscription management instead of hiding cancellation behind support. This builds trust and aligns with platform expectations around user control.

  3. Test account state transitions

    Test reinstall, device switch, logged-out, and logged-in scenarios. The entitlement should return correctly after restoration without forcing a duplicate purchase.

The tradeoff is that restore logic can be more complex if you support both anonymous users and logged-in accounts. Decide early whether the entitlement is tied to the platform account, your app account, or both.

Sandbox Test Plan Before Submission

Run a review-style test pass before uploading the release candidate:

  • Complete purchases with Apple sandbox accounts and Google license testers
  • Confirm immediate entitlement unlock after purchase
  • Test renewal state, cancellation, expired trials, and refunded purchases
  • Verify interrupted purchase and declined payment handling
  • Test a user who already owns the subscription
  • Record product IDs, devices, store environment, and screenshots of paywall terms

Keep the test note short but specific. It becomes useful during release review, support triage, and resubmission if the store flags a payment issue.

Common Rejection Patterns and Final Submission Checklist

By this point, the goal is not to add more features. The goal is to remove avoidable ambiguity from the commercial flow before a reviewer touches it.

Five Mistakes That Trigger Subscription Review Problems

MistakeLikely costPrevention
External checkout for digital featuresRejection or forced redesignUse StoreKit or Google Play Billing for in-app digital access
Vague product descriptionsConfused users and metadata issuesDescribe the real access, such as "Unlimited AI summaries and export tools"
Missing iOS Restore PurchasesFailed checkpoint and support burdenExpose restore in a predictable location and test it
Hidden renewal termsLower trust and review concernsShow price, period, renewal behavior, and cancellation path before purchase
Trial copy that does not match store setupDelayed launch or pricing correctionsReconcile paywall copy with store metadata before submission

These issues are common because they sit between product, engineering, growth, and release operations. Assign one owner to reconcile the entire flow before submission, and give that person enough time to test real purchase paths rather than only checking screenshots.

Submission-Day Checklist for Monetized Apps

Pre-submission checklist for in-app purchases and subscriptions covering billing, terms, restore purchases, management links, sandbox testing, and store configuration.

A mobile-friendly checklist block for subscription app review readiness, including StoreKit or Google Play Billing, visible price and billing period, trial terms, Restore Purchases on iOS, Manage Subscription access, sandbox purchase test, and matching store metadata.

Use this pre-flight list before sending the build to App Store Review or Google Play review:

  • Products are approved, ready for review, active, or correctly configured
  • Digital purchases use StoreKit or Google Play Billing
  • No external payment links sell digital app functionality
  • Price, billing period, renewal behavior, and trial terms are visible
  • Paywall copy matches store metadata
  • iOS Restore Purchases is visible and tested
  • Manage Subscription access is available
  • Sandbox or license tester purchase succeeds
  • Entitlement unlocks immediately after purchase
  • The app offers at least one meaningful free experience before the paywall, where appropriate

A compact readiness check should cover platform billing, visible pricing, trial disclosure, restore access, subscription management, sandbox testing, and matching store metadata. If any item is unclear, fix it before submission rather than explaining it later in an appeal.

FAQ

Do all subscriptions have to use Apple or Google billing?
If the subscription unlocks digital features, content, or functionality inside the app, it generally needs to use Apple or Google billing. Exceptions exist, but they depend on the business model and platform rules, so do not assume an external checkout is safe without reviewing the policy.
Can I use Stripe for my subscription app?
You can usually use Stripe for physical goods, real-world services, or some web-only account flows, but not for selling in-app digital access from inside the app. If the app paywall sells premium app features, use StoreKit or Google Play Billing.
Does a free trial need a separate product?
Usually no. On iOS, a free trial is commonly configured as an introductory offer. On Google Play, it is typically handled through offers attached to a subscription base plan.
Where should Restore Purchases appear?
Put Restore Purchases in a predictable place such as the paywall footer, account screen, or settings screen. It should be visible enough for reviewers and returning users to find without contacting support.
How long should subscription review preparation take?
For a simple app with one monthly and one annual plan, expect several focused hours for setup review and at least a half day for purchase testing. More complex cases, such as multiple tiers, account linking, trials, regional pricing, or backend entitlements, can take longer.

Like what you see? Share with a friend.