Key takeaways
- Mobile subscriptions go through the App Store and Google Play, usually managed with RevenueCat, while web payments commonly go through Stripe.
- Google now requires Play Billing Library version 8 or later for new apps and updates, so a stack built on version 5 is out of date.
- Apple guideline 3.1.1 still requires in-app purchase for most digital goods, but US storefront apps may include buttons and links to outside purchase methods.
- Stripe is certified as a PCI Service Provider Level 1, which keeps card data off your own servers when you use hosted checkout.
- A webhook-driven backend, such as Firebase Cloud Functions writing to Firestore, keeps subscription status in one place across platforms.
- RevenueCat is free up to $2,500 in monthly tracked revenue, then 1 percent, and webhooks are part of its Pro plan.
Pricing an app? Try the free app cost calculator or get a range for your project in the instant quote.
You've built an amazing app. Users love it. Now you need to make money from it, subscriptions, in-app purchases, premium features. Simple, right?
Not quite.
If you've ever tried to integrate payments across iOS, Android, and web, you know the pain:
- iOS generally requires App Store In-App Purchases with StoreKit for digital goods, though apps on the US storefront can now include buttons and links to outside purchase methods
- Android needs Google Play Billing
- Web wants Stripe or another payment processor
- macOS has its own App Store requirements
- Each platform has different APIs, different validation flows, different receipt systems
Then there's the backend: webhooks, subscription management, grace periods, refunds, trials, notifications when payments succeed or fail… the list goes on.
Building payments across platforms from scratch can take weeks, and that's if nothing goes wrong. For a startup or indie developer, that's time you don't have and complexity you shouldn't have to wrestle with.
What if all of this was already done for you?
That's exactly what Template369 delivers: a complete, production-ready monetization stack with RevenueCat, Stripe, and Firebase, pre-integrated, tested, and documented.
The Payment Integration Problem: Why It's So Hard
Let's break down why payments across platforms are such a nightmare:
1. Platform-Specific APIs
Each platform speaks a different language:
- iOS: StoreKit 2 (or StoreKit 1 for older versions)
- Android: Google Play Billing Library (Google now requires version 8 or later for new apps and updates)
- macOS: App Store with different receipt validation
- Web: Stripe Checkout, Payment Intents, webhooks
You're not building one payment system, you're building four.
2. Backend Validation & Security
Processing payments on the client is dangerous. You need:
- Server-side receipt validation, so clients cannot fake purchase status
- Webhook handlers to catch payment events
- Fraud detection and security measures
- Database updates tied to payment status
This means building a backend, typically with Firebase Cloud Functions, AWS Lambda, or your own server.
3. Subscription Lifecycle Management
Subscriptions aren't "pay once and done." You have to handle:
- Free trials starting and ending
- Grace periods when payments fail
- Subscription renewals and cancellations
- Refunds and chargebacks
- Subscription upgrades and downgrades
- Family sharing (on Apple platforms)
Each scenario requires custom logic. Miss one edge case, and users get locked out, or worse, get free access when they shouldn't.
4. Cross-Platform Syncing
What happens when a user subscribes on iOS, then logs in on web? You need:
- Shared user state across platforms
- Real-time sync of subscription status
- Server-side source of truth (Firestore, PostgreSQL, etc.)
- Proper entitlement checks in your app
Without this, users pay on one platform but can't access features on another.
5. Notifications & User Communication
When payments succeed, fail, or subscriptions expire, users need to know:
- Push notifications (Firebase Cloud Messaging)
- Email alerts (SendGrid, Mailgun, etc.)
- In-app messaging
- Backend triggers tied to payment events
Coordinating this with webhooks and Cloud Functions is another layer of complexity.
Building all this from scratch takes weeks. And that assumes you already know what you're doing.
The Template369 Solution: Pre-Built, Production-Ready Monetization
Template369 eliminates all of this headache by giving you a complete monetization stack out of the box:
✅ RevenueCat for Mobile & macOS
RevenueCat is a popular SDK for managing in-app purchases across iOS, Android, and macOS. Template369 comes with RevenueCat fully integrated:
- iOS In-App Purchases: StoreKit integration, receipt validation, subscription management
- Android Google Play Billing: Google Play Billing through RevenueCat, purchase verification
- macOS App Store: Full support for macOS subscriptions and purchases
- Cross-Platform Sync: RevenueCat handles syncing purchase state across devices
- Subscription Analytics: Built-in dashboards for revenue, churn, and retention
- Webhook Integration: RevenueCat webhooks trigger Firebase Cloud Functions to update Firestore
RevenueCat wraps the Google Play Billing Library and App Store purchase SDKs behind one API, so you work with one interface instead of two.
✅ Stripe for Web Payments
For web subscriptions and one-time payments, Template369 uses Stripe, a widely used payment platform for developers:
- Stripe Checkout: Pre-built, hosted checkout pages (or custom if you prefer)
- Subscription Management: Recurring billing, trials, metered usage
- One-Time Payments: For lifetime purchases or credits
- Webhook Handlers: Firebase Cloud Functions listen for Stripe events (
customer.subscription.created,invoice.paid, etc.) - Firestore Updates: Payment events automatically update user records in Firestore
Stripe has many moving parts to integrate correctly, such as webhooks and subscription states. Template369 gives you a starting point so you can focus on your product.
✅ Firebase Cloud Functions (TypeScript, Gen 2)
The backend is where the magic happens. Template369 includes TypeScript Cloud Functions (Gen 2) for:
- RevenueCat Webhooks: When a user subscribes on iOS, Cloud Functions update their Firestore record
- Stripe Webhooks: When a payment succeeds or fails, Cloud Functions handle it
- Subscription State Management: Centralized logic for granting/revoking access
- Automated Notifications: Trigger push notifications or emails based on payment events
- Security: Server-side validation ensures client apps can't fake purchase status
No need to set up AWS Lambda, configure API Gateway, or wrestle with CORS. Firebase Cloud Functions are serverless, auto-scaling, and easy to deploy.
✅ Firebase Cloud Messaging (FCM) for Notifications
Stay connected with users through push notifications:
- Payment Confirmations: "Your subscription is now active!"
- Payment Failures: "Your payment failed, please update your card."
- Subscription Expiry: "Your trial ends in 3 days."
- Custom Triggers: Send notifications based on user actions or backend events
Template369 includes FCM integration with test flows so you can verify notifications work before launch.
✅ Firestore Database with Security Rules
All user data, subscription states, and payment records live in Firestore:
- Pre-Configured Schema: User documents, subscription fields, payment history
- Security Rules: Properly locked-down rules so users can't edit their own subscription status
- Real-Time Sync: Changes to subscription state instantly reflect in your app
- Scalable: Firestore scales automatically as your user base grows
No need to design your own schema or debug security rule edge cases. It's already done.
The Full Monetization Flow: How It All Works Together
Here's what happens when a user subscribes in Template369:
Scenario 1: User Subscribes on iOS
- User taps "Subscribe" in your Flutter app
- RevenueCat SDK handles the StoreKit purchase flow
- Apple processes the payment and issues a receipt
- RevenueCat validates the receipt server-side
- RevenueCat webhook fires and hits your Firebase Cloud Function
- Cloud Function updates Firestore:
user.subscription.status = "active" - Cloud Function sends FCM notification: "Your subscription is active!"
- App reads Firestore and unlocks premium features
Scenario 2: User Subscribes on Web
- User clicks "Subscribe" on your web app
- Stripe Checkout opens and user enters payment details
- Stripe processes the payment
- Stripe webhook fires (
customer.subscription.created) - Cloud Function updates Firestore:
user.subscription.status = "active" - Cloud Function sends email confirmation (optional)
- Web app refreshes and shows premium features
Scenario 3: Subscription Renewal (iOS or Web)
- Apple or Stripe automatically charges the user
- Webhook fires with renewal confirmation
- Cloud Function extends subscription:
user.subscription.expiresAt = new Date() + 30 days - Cloud Function sends "Thanks for renewing!" notification
- User keeps access without interruption
Scenario 4: Payment Failure
- Payment fails (expired card, insufficient funds, etc.)
- Webhook fires with failure event
- Cloud Function updates Firestore:
user.subscription.status = "past_due" - Cloud Function sends FCM notification: "Please update your payment method"
- App shows a banner prompting user to fix payment
All of this is built and tested in Template369. You just customize the messaging and branding.
What This Means for You: Ship Faster, Earn Revenue Sooner
Before Template369:
- Spend weeks reading docs, integrating SDKs, and debugging webhooks
- Hire a backend developer to build Cloud Functions
- Test edge cases (trials, refunds, grace periods)
- Hope you didn't miss a security hole
With Template369:
- Get the template for $350 a year (or $34.99 a month)
- Configure your RevenueCat and Stripe accounts (1-2 hours)
- Deploy Cloud Functions to Firebase (30 minutes)
- Customize pricing tiers and branding (1-2 days)
- Launch in under a week
Who Is This For?
Template369's monetization stack is perfect if you're:
- Building a SaaS app with subscriptions on iOS, Android, and web
- An indie developer who wants to monetize without hiring a backend team
- A startup that needs to prove revenue ASAP
- An agency delivering client projects with payment integration
- A technical founder who'd rather focus on features than payment plumbing
If your app needs to make money across multiple platforms, this is your shortcut.
Included: Full Documentation & Support
You're not just getting code, you're getting step-by-step guides at docs.template369.com:
- RevenueCat Setup: Create account, configure products, integrate SDK
- Stripe Setup: Set up Checkout, configure webhooks, test payments
- Cloud Functions Deployment: Deploy, configure secrets, test webhooks
- Firestore Configuration: Schema explanation, security rules walkthrough
- FCM Testing: Send test notifications, verify delivery
- Component Library: Pre-built payment screens and UI elements
Everything is documented, tested, and ready to customize.
Real-World Use Cases
SaaS App with Freemium Model
- Free tier with limited features
- Premium subscription unlocks full access
- RevenueCat handles mobile subscriptions
- Stripe handles web subscriptions
- Firestore syncs state across platforms
Fitness App with Monthly Coaching
- Users subscribe for $9.99/month
- iOS and Android users pay via App Store / Google Play
- Web users pay via Stripe
- Cloud Functions unlock access to coaching content
- FCM sends workout reminders
Productivity Tool with Lifetime Purchase
- Users can buy lifetime access for $49.99
- RevenueCat handles mobile purchases
- Stripe handles web purchases
- Firestore grants permanent premium status
- No recurring billing complexity
The Template369 Advantage: Production-Ready, Not a Tutorial
Most payment tutorials and templates are "hello world" examples that break in production. Template369 is different:
- Battle-Tested: Used by real apps in production
- Complete: Not just the happy path, handles failures, refunds, edge cases
- Secure: Server-side validation, proper security rules, webhook verification
- Scalable: Built on Firebase, which scales automatically
- Maintained: Modern architecture with TypeScript Cloud Functions Gen 2
You're getting production-grade code, not a toy example.
Stop Reinventing the Wheel, Start Earning Revenue
Payment integration is a solved problem. You shouldn't spend weeks rebuilding what already exists.
Template369 gives you the complete monetization stack, RevenueCat, Stripe, Firebase Cloud Functions, Firestore, and FCM, all integrated, tested, and documented.
For $350 a year (or $34.99 a month), you get:
- ✅ Cross-platform payment integration (iOS, Android, web, macOS)
- ✅ Backend infrastructure (Cloud Functions, webhooks, Firestore)
- ✅ Subscription lifecycle management
- ✅ Push notifications tied to payment events
- ✅ Full documentation and setup guides
Skip the integration work and start from a working app.
Get Template369 Today
Ready to add payments to your Flutter app without the headache? Check out the Template369 docs to see the complete feature list, or grab the template and start building today.
Have questions about integrating payments into your app? Contact App369, I'm here to help you ship faster.
Frequently asked questions
- What payment platforms does Template369 support?
- Template369 integrates RevenueCat for iOS, Android, and macOS in-app purchases, plus Stripe for web subscriptions and one-time payments.
- How long does it take to integrate payments with Template369?
- You start from working payment code and configure your RevenueCat and Stripe accounts instead of writing the whole integration yourself.
- Is the payment integration secure?
- Card payments on the web go through Stripe, which is certified as a PCI Service Provider Level 1. Mobile purchases go through the App Store and Google Play. Template369 adds server-side logic in Firebase Cloud Functions and Firestore security rules.
- What happens when a payment fails in Template369?
- Cloud Functions update the Firestore subscription status and send FCM push notifications. Apple, Google Play and Stripe run their own payment retries and grace periods.
- Do I need a backend developer to use Template369 payments?
- Template369 includes TypeScript Firebase Cloud Functions (Gen 2) for webhooks, notifications, and database sync, so you start with a backend. You still need to deploy and maintain it, and Cloud Functions need a paid Firebase Blaze plan.
- How much does Template369 cost?
- Template369 costs $350 a year or $34.99 a month, as listed on its pricing page.
Sources
Fixed-price services
Want this done at a fixed price?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
Related Resources
Related guides
Launch Your Startup App in 6 Weeks
Launch your startup app in 6 weeks instead of 6 months. Template369 Flutter boilerplate includes auth, payments, notifications, and analytics all pre-built.
Read moreHaptic Feedback: Boost App Engagement
Learn how haptic feedback improves how an app feels. Implement tactile experiences on iOS and Android that increase user retention and drive more delight.
Read more