Production-ready subscription flows with App Store & Play Store integration
Feature | Description |
---|---|
📱 Cross-Platform | Unified API for iOS/Android subscription management |
🎯 Introductory Offers | First-time user discounts & free trials |
🔒 Purchase Validation | Server-side receipt verification |
📊 Analytics | Track conversion rates & churn metrics |
🔄 Restore Purchases | Seamless entitlement recovery |
- Flutter 3.22+
- App Store Developer Account ($99/year)
- Google Play Developer Account ($25 one-time)
-
Add Dependency
dependencies: in_app_purchase: ^3.1.7
-
Platform Setup
📱 iOS Configuration
- Enable In-App Purchases in Xcode capabilities
- Create subscriptions in App Store Connect
- Add StoreKit configuration file:
// ios/Runner/Config.storekit
{
"products": [
{
"identifier": "premium_monthly",
"type": "subscription"
}
]
}
🤖 Android Configuration
- Add billing permission:
<!-- android/app/src/main/AndroidManifest.xml -->
<uses-permission android:name="com.android.vending.BILLING" />
- Configure products in Play Console:
Monetize → Products → Subscriptions
sequenceDiagram
participant User
participant App
participant Store
participant Server
User->>App: Initiate Purchase
App->>Store: Request Products
Store-->>App: Return Product List
App->>User: Show Options
User->>Store: Confirm Payment
Store-->>App: Purchase Token
App->>Server: Validate Receipt
Server-->>App: Grant Access
Future<List<ProductDetails>> fetchSubscriptions() async {
const Set<String> _kSubscriptionIds = {'premium_monthly', 'premium_yearly'};
final response = await InAppPurchase.instance.queryProductDetails(_kSubscriptionIds);
return response.productDetails;
}
InAppPurchase.instance.purchaseStream.listen((purchases) {
purchases.forEach((purchase) {
if (purchase.status == PurchaseStatus.purchased) {
_verifyPurchase(purchase); // Server-side validation
InAppPurchase.instance.completePurchase(purchase);
}
});
});
// StoreKit configuration for free trial
{
"identifier": "premium_monthly",
"introductoryPrice": "7.99",
"introductoryPriceNumberOfPeriods": 1,
"introductoryPriceSubscriptionPeriod": "month"
}
<!-- Play Console introductory pricing -->
<subscription
introductoryPrice="4.99"
introductoryPricePeriod="P1M"
introductoryPriceCycles="3"/>
Metric | Target Value |
---|---|
Conversion Rate | >12% |
Trial-to-Paid | >35% |
Monthly Churn | <5% |
ARPU | >$8.50 |
Error | Solution |
---|---|
Product Not Found | Verify store configuration |
Purchase Pending | Check network connectivity |
Validation Failed | Update server receipt parser |
- Fork repository
- Create feature branch:
git checkout -b feat/subscription-analytics
- Commit changes:
git commit -m 'Add revenue tracking'
- Push to branch:
git push origin feat/subscription-analytics
- Open pull request