Skip to content

Qasim-afzaal/Flutter_inAppSubscription

Repository files navigation

💰 Flutter In-App Subscriptions

Flutter in_app_purchase License Platforms

Production-ready subscription flows with App Store & Play Store integration


🚀 Key Features

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

🛠 Tech Stack

Flutter Dart App Store Play Store


⚡ Quick Start

Prerequisites

  • Flutter 3.22+
  • App Store Developer Account ($99/year)
  • Google Play Developer Account ($25 one-time)

Installation

  1. Add Dependency

    dependencies:
      in_app_purchase: ^3.1.7
  2. Platform Setup

📱 iOS Configuration
  1. Enable In-App Purchases in Xcode capabilities
  2. Create subscriptions in App Store Connect
  3. Add StoreKit configuration file:
// ios/Runner/Config.storekit
{
  "products": [
    {
      "identifier": "premium_monthly",
      "type": "subscription"
    }
  ]
}
🤖 Android Configuration
  1. Add billing permission:
<!-- android/app/src/main/AndroidManifest.xml -->
<uses-permission android:name="com.android.vending.BILLING" />
  1. Configure products in Play Console:
Monetize → Products → Subscriptions

🛒 Purchase Flow Architecture

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
Loading

💻 Code Snippets

Fetch Subscription Plans

Future<List<ProductDetails>> fetchSubscriptions() async {
  const Set<String> _kSubscriptionIds = {'premium_monthly', 'premium_yearly'};
  final response = await InAppPurchase.instance.queryProductDetails(_kSubscriptionIds);
  return response.productDetails;
}

Handle Purchase Updates

InAppPurchase.instance.purchaseStream.listen((purchases) {
  purchases.forEach((purchase) {
    if (purchase.status == PurchaseStatus.purchased) {
      _verifyPurchase(purchase); // Server-side validation
      InAppPurchase.instance.completePurchase(purchase);
    }
  });
});

🎁 Introductory Offers Implementation

iOS (App Store)

// StoreKit configuration for free trial
{
  "identifier": "premium_monthly",
  "introductoryPrice": "7.99",
  "introductoryPriceNumberOfPeriods": 1,
  "introductoryPriceSubscriptionPeriod": "month"
}

Android (Play Store)

<!-- Play Console introductory pricing -->
<subscription 
  introductoryPrice="4.99"
  introductoryPricePeriod="P1M"
  introductoryPriceCycles="3"/>

📊 Subscription Metrics Dashboard

Metric Target Value
Conversion Rate >12%
Trial-to-Paid >35%
Monthly Churn <5%
ARPU >$8.50

🚨 Troubleshooting

Error Solution
Product Not Found Verify store configuration
Purchase Pending Check network connectivity
Validation Failed Update server receipt parser

🤝 Contributing

PRs Welcome

  1. Fork repository
  2. Create feature branch: git checkout -b feat/subscription-analytics
  3. Commit changes: git commit -m 'Add revenue tracking'
  4. Push to branch: git push origin feat/subscription-analytics
  5. Open pull request

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published