Prerequisites
Before you begin, you should have:- an AppActor project with iOS and/or Android apps added
- a public app SDK key such as
pk_YOUR_PUBLIC_APP_KEY - store products configured in App Store Connect or Google Play Console
- entitlements, offerings, and package slots configured in AppActor
- a supported client app: iOS, Android, Flutter, or React Native
- a plan for rendering your own paywall UI from offerings and packages
- Apple App Store Server Notifications or Google RTDN connected before production launch
The setup order
Follow this order when you are building the first real integration:- Create the AppActor project and platform apps.
- Connect Apple or Google store credentials.
- Create the catalog: entitlement, store products, offering, and package slots.
- Install and configure the SDK with the public app key.
- Fetch offerings, render your paywall, purchase a package, and check entitlements.
- Before launch, verify Apple notifications, Google RTDN, and outbound webhooks if your backend uses them.
Get started
1
Create the project, apps, and catalog
Do this in the AppActor dashboard before debugging SDK code:
- create one project for the product
- add an iOS app with the Bundle ID and/or an Android app with the package name
- connect store credentials
- create an entitlement such as
premium - connect store products and attach them to
premium - create a current offering such as
default - add packages such as
monthlyandannual
2
Install the SDK
Pick your platform and add the matching SDK.
3
Configure AppActor
Initialize AppActor as early as possible in your app bootstrap.
4
Fetch offerings and render your paywall
Offerings are the catalog surface you use to build a paywall in your own UI.
5
Purchase a package
Once the user chooses a package, pass it into the platform purchase API.
6
Verify access from customer info
Gate premium access from customer info and entitlements, not from UI state alone.
Important integration notes
- AppActor does not render paywalls for you; your app owns the final purchase UI.
- AppActor does not expose a cross-platform
getProducts()method. Fetch offerings and render packages. configure()is not a cosmetic init. It establishes or restores identity, warms purchase state, and synchronizes important SDK context.syncPurchases()is not the same thing asrestorePurchases()or explicit receipt queue drain APIs. Read Purchases and Sync before wiring account recovery.- Use a stable
appUserIdif your product has accounts. That gives you a cleaner restore and re-install story than relying on anonymous identities. - On Android, most direct SDK calls are
suspendAPIs, so call them from a coroutine or lifecycle-aware scope.
Go deeper
Products and Packages
Understand the catalog model before you write paywall UI.
Server Notifications
Connect Apple and Google store events before production launch.
Displaying Products
Build package cards with localized price, metadata, and safe fallbacks.
Making Purchases
Handle success, cancelled, pending, and retryable receipt outcomes.
Trusted Entitlements
Decide when verification is strong enough to unlock sensitive access.