Monetization
Test Mode
Run your whole paywall flow end to end with simulated purchases, restores, and entitlement states. No StoreKit config, sandbox account, or Google Play test track required.
Testing a purchase flow is the slowest part of shipping a paywall. You need a StoreKit configuration file or a sandbox Apple ID, products that exist in App Store Connect, a Google Play license tester, and a way to reset all of it between runs. Test mode removes the setup. When it is active, the SDK pulls product data from the Superwall dashboard, fakes the purchase, and fires every event as if the store had answered. Your analytics, delegate callbacks, and entitlement gating run for real. Only the money is simulated.
What a test session looks like
A configuration modal appears on launch before you touch a paywall. It shows your user ID with a link to the dashboard, whether a purchase controller is set, every device and user attribute the SDK is tracking, a free trial override, and your starting entitlements. Set those, tap through, and open the paywall.
-
Purchases open a drawer, not the payment sheet. Choose to complete, abandon, or fail the transaction. The matching
transaction_events fire, entitlements activate, and subscription status updates the way it would after a real purchase. -
Restores let you pick the outcome. A restore drawer lists your entitlements so you can decide which ones come back and in what state, and check how the app handles each case.
-
Entitlement states you cannot easily reach in sandbox. On Android, start a session as Subscribed, In Grace Period, Billing Retry, Expired, Revoked, or Inactive, with a Trial or Promotional offer type on the active states. Your selections persist across sessions.
Everything routes to sandbox, so a week of test sessions never touches production charts.
Two ways to turn it on
The usual path is the dashboard. Mark a user as a test store user and the
SDK activates test mode when that user ID shows up. For local development,
set testModeBehavior on SuperwallOptions before
you configure. The default, automatic, activates for marked users and
whenever the app's bundle ID does not match the one in the dashboard,
and never during UI tests. always and never do
what they say. The
iOS guide
and Android guide list every behavior, and Expo apps get the same mode
through the underlying native SDKs.
What you can do with it
- Hand a designer a build and let them verify a new paywall's purchase path without a sandbox account.
- Reproduce a support ticket by starting a session in Billing Retry or Expired and watching what the app shows.
-
Check that your delegate grants a consumable on
transactionCompletebefore the product exists in App Store Connect. - Run the abandon path on purpose to confirm your recovery offer appears.
Get started
Update to a current iOS, Android, or Expo SDK, open the Superwall dashboard, and mark your own user ID as a test store user. Launch the app and the configuration modal appears. New to Superwall? Start with the quickstart and add test mode once your first placement is registered.