RevenueCat Integration for Subscription Management
A user bought an annual subscription for $49.99 on iPhone, but it's not active on Android. The developer has to spend 2–3 weeks to fix it. Server-side receipt validation, Apple Server Notifications v2, and Google Play RTDN setup are required. We solve this in 2–3 days with RevenueCat — saving time and money.
RevenueCat provides a unified CustomerInfo with the actual subscription status for all platforms. The SDK wraps native StoreKit (iOS) and Google Play Billing (Android). On purchase, the receipt or purchaseToken is sent to RevenueCat servers, which verify it with Apple and Google and return a normalized status. All transaction history is stored on RevenueCat's side — this allows restoring access on new devices without calling native restore. According to RevenueCat official documentation, the SDK handles over 10,000 events per second for large clients.
How RevenueCat Solves the Synchronization Problem
If the user is authenticated in the app, we pass the same appUserID when configuring the SDK on iOS and Android. RevenueCat returns a CustomerInfo with the active entitlement regardless of the purchase platform. For anonymous users, $RCAnonymousID is generated, which does not transfer between devices — this is a limitation, but it can be bypassed by asking the user to log in after installation.
// iOS — AppDelegate или @main Purchases.configure( with: Configuration.Builder(withAPIKey: "appl_xxxxx") .with(appUserID: currentUser.id) // nil = анонимный .build() ) // Покупка через RevenueCat let (transaction, customerInfo, error) = await Purchases.shared .purchase(package: package) if customerInfo?.entitlements["premium"]?.isActive == true { unlockPremium() } The key concept is entitlements. In the RevenueCat dashboard, we create a premium entitlement and link all products (monthly subscription, yearly, lifetime) to it. In the code, we only check the entitlement, not a specific product ID. When adding a new plan, just add the product to the entitlement in the dashboard — no code changes.
What Are Entitlements and Why Are They Needed?
An entitlement is a logical group of products granting the same access rights. For example, all premium subscriptions (monthly, yearly, lifetime) are grouped into the premium entitlement. The developer only needs to check isActive for this entitlement, without worrying about specific product identifiers. This allows flexible pricing changes without modifying the app code.
Why RevenueCat Is Better Than a Custom Implementation
| Aspect | Custom Implementation | RevenueCat |
|---|---|---|
| Server-side development time | 2–3 weeks | 2–3 days |
| Team load | Requires server, support for two notification systems | One SDK, one Webhook |
| Synchronization errors | Likely, especially in edge cases (cancellation, billing issue) | Tested by thousands of apps, 90% bug reduction |
| Scalability | Refactoring needed as revenue grows | 1% commission after $2500/month, everything else out of the box |
What Events Does the RevenueCat Webhook Handle?
| Event | Description |
|---|---|
| INITIAL_PURCHASE | First subscription purchase |
| RENEWAL | Automatic renewal |
| CANCELLATION | User cancels subscription |
| EXPIRATION | Subscription expires without renewal |
| BILLING_ISSUE | Payment problem (card declined, etc.) |
All events arrive in a unified JSON format, simplifying server integration: one endpoint instead of two for Apple and Google. RevenueCat automatically retries delivery on errors (up to 3 times), reducing data loss risk.
To set up an entitlement in the dashboard, create an entitlement premium and link products with the corresponding productId from App Store Connect and Google Play Console. Code check: customerInfo.entitlements["premium"]?.isActive == true. When adding a new plan, no code changes are needed — just add the product to the entitlement.
What's Included in the Work
- SDK installation for iOS (Swift) and Android (Kotlin/Java) — with a wrapper for Flutter or React Native if needed.
- Products and entitlements configuration in the RevenueCat dashboard, linking to Google Play and App Store Connect.
- Integration of the existing authentication flow — passing appUserID.
- Paywall implementation using RevenueCat Offerings — A/B price testing.
- Webhook setup for sending events to your backend — unified format.
- Testing in Sandbox (iOS) and Test environment (Android) — covering all scenarios: new purchase, renewal, cancellation, restoration.
- Dashboard access handover and full documentation.
- Post-launch support with analytics and report setup.
- A training session for your team to manage subscriptions independently.
Work Process: From Analysis to Deployment
- Analysis: Determine the current subscription model, user scope, and authentication requirements.
- Design: Entitlement schema, product mapping, Webhook integration with your API.
- Implementation: SDK installation, app integration, dashboard configuration.
- Testing: Unit tests on the server endpoint, test purchases on both platforms.
- Deployment: Publish to App Store and Google Play, monitor first transactions.
Timeline and Guarantees
RevenueCat integration takes 2 to 5 days depending on authentication complexity and number of products. We guarantee stable subscription status synchronization across platforms. We have over 8 years of experience in mobile development and 30+ implemented subscription models. Our standard integration costs $1,500, saving you up to $2,000 compared to custom development. Contact us for a consultation and get a preliminary estimate.







