In-app purchases and subscriptions: choose the architecture first
ProductionStart with what the user is buying and where purchase occurs; do not assume StoreKit, Play Billing, or external checkout without confirming the product architecture and storefront scope.
Questions LaunchLayer should resolve
Is the item digital app functionality/content, a physical good/service, or something consumed outside the app? Is it one-time or recurring? Which stores and storefronts are targeted? Should purchase happen inside the app, on the web, or both? Is RevenueCat being used? Which system is authoritative for entitlement state?
Apple path
For Apple IAP/subscriptions, create the exact product IDs in App Store Connect, complete pricing and review metadata, add subscription groups where required, configure restore behavior and subscription disclosures, then map the same IDs into the app/RevenueCat. Test with Apple sandbox/TestFlight accounts before review.
Google path
For Google Play monetization, create one-time products or subscriptions, base plans/offers and regional pricing, activate the intended purchase options/base plans, map exact IDs into the app/RevenueCat, and test with licensed/test users on an eligible Play build.
External checkout
Treat external checkout as an explicit architecture choice, not an automatic workaround. Validate current store rules for the targeted storefronts and the exact product type before changing the app. Preserve the user's confirmed architecture unless they explicitly change it.
Verification
Product IDs must match across code, LaunchLayer, RevenueCat, App Store Connect, and Play Console. Use LaunchLayer’s Purchase & Subscription Test Lab to record real sandbox/TestFlight/Play outcomes for catalog loading, purchase, entitlement unlock, restore, reinstall recovery, failure handling, renewal/cancellation, billing retry/grace, and tier changes where applicable. A recorded pass is user evidence, not a provider guarantee.
Common problems
Product not approved/active, ID mismatch, wrong RevenueCat public key or offering, missing entitlement mapping, subscription base plan inactive, sandbox account issue, review metadata incomplete, restore missing, or a billing architecture that does not match actual store policy.