从零到 SaaS:使用 Flutter + Supabase 在 2025 年打造盈利的移动应用
发布: (2025年12月10日 GMT+8 07:55)
5 min read
原文: Dev.to
Source: Dev.to
架构
Clean Architecture 能让你的应用在增长过程中保持可维护性。以下是各层的连接方式:
┌──────────────────────────────┐
│ FLUTTER APP │
└──────────────────────────────┘
│
┌──────────────────────────┼──────────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ PRESENTATION │ │ DOMAIN │ │ DATA │
│───────────────│ │─────────────────│ │─────────────────│
│ • Widgets │ ──▶ │ • Use Cases │ ──▶ │ • Repositories │
│ • BLoC/Cubit │ │ • Entities │ │ • Data Sources │
│ • Riverpod │ │ • Business Logic│ │ • Models │
└───────────────┘ └─────────────────┘ └─────────────────┘
│
┌──────────────────────────────────┼──────────────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ SUPABASE │ │ REVENUECAT │ │ LOCAL CACHE │
│─────────────────│ │─────────────────│ │─────────────────│
│ • PostgreSQL │ │ • Subscriptions │ │ • Hive/SQLite │
│ • Auth │ │ • Receipts │ │ • Shared Prefs │
│ • Storage │ │ • Analytics │ │ │
│ • Edge Functions│ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
步骤 1:费用细分
Google Play 开发者账户
| 项目 | 费用 | 频率 |
|---|---|---|
| 注册 | $25 | 一次性 |
| 年费 | $0 | – |
| Apple(可选) | $99 | 每年 |
Google Play 服务费
| 收入层级 | Google 收取 | 你保留 |
|---|---|---|
| 首 $1M/年 | 15% | 85% |
| 超过 $1M/年 | 30% | 70% |
| 订阅 第一年 | 15% | 85% |
| 订阅 第二年及以后 | 10% | 90% |
💡 专业提示: 让订阅者保持 12 个月以上,Google 只收取 10%。
替代计费(EEA)
在欧洲经济区:4% 折扣 → 11% 而非 15%。
步骤 2:Supabase 后端
免费层 vs 专业版对比
| 功能 | 免费层 | 专业版($25/月) |
|---|---|---|
| 数据库 | 500 MB | 8 GB |
| 存储 | 1 GB | 100 GB |
| 带宽 | 5 GB | 250 GB |
| MAU(月活用户) | 50,000 | 100,000 |
| Edge Functions | 500K/月 | 2M/月 |
| 实时连接 | 200 连接 | 500 连接 |
| 备份 | ❌ | 每日 |
| 暂停 | 1 周后 | 永不 |
⚠️ 免费项目在 1 周不活跃后会暂停。拥有付费用户后请升级。
步骤 3:订阅流程
USER JOURNEY
═══════════
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ User │ ──────▶ │ Paywall │ ──────▶ │ Google │ ──────▶ │ Success │
│ Taps │ │ Screen │ │ Play │ │ 🎉 │
│ Upgrade │ │ │ │ Billing │ │ │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ BACKEND FLOW │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ Google Play ──▶ RevenueCat ──▶ Webhook ──▶ Supabase Edge Func │
│ │ │ │ │ │
│ [Receipt] [Validate] [Notify] [Update DB] │
│ │
└─────────────────────────────────────────────────────────────────────┘
步骤 4:Flutter 代码设置
依赖
# pubspec.yaml
dependencies:
flutter:
sdk: flutter
supabase_flutter: ^2.0.0
purchases_flutter: ^6.0.0 # RevenueCat
flutter_bloc: ^8.1.0
get_it: ^7.6.0 # Dependency Injection
初始化 Supabase
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:flutter/widgets.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Supabase.initialize(
url: 'YOUR_SUPABASE_URL',
anonKey: 'YOUR_ANON_KEY',
);
runApp(MyApp());
}
final supabase = Supabase.instance.client;
RevenueCat 购买服务
import 'package:purchases_flutter/purchases_flutter.dart';
class PurchaseService {
static Future<void> init() async {
await Purchases.configure(
PurchasesConfiguration('your_revenuecat_api_key'),
);
}
static Future<List<Package>> getOfferings() async {
final offerings = await Purchases.getOfferings();
return offerings.current?.availablePackages ?? [];
}
static Future<bool> purchase(Package package) async {
try {
final result = await Purchases.purchasePackage(package);
return result.customerInfo.entitlements.active.containsKey('premium');
} catch (_) {
return false;
}
}
static Future<bool> isPremium() async {
final customerInfo = await Purchases.getCustomerInfo();
return customerInfo.entitlements.active.containsKey('premium');
}
}
步骤 5:定价策略
推荐套餐
| 套餐 | 价格 | 转化率 | 备注 |
|---|---|---|---|
| 每周 | $2.99 | 47% 选择此套餐 | 低承诺 |
| 每月 | $9.99 | 标准 | 最常见 |
| 每年 | $49.99 | 最佳价值 | 节省 58% |
| 永久 | $99.99 | 高 LTV | 价格锚点 |
2025 年关键统计
| 指标 | 数值 |
|---|---|
| 平均订阅价格 | $10.20/月 |
| 7 天试用转化率 | 5.2% |
| 试用提升 LTV | 最高 64% |
| 每周订阅受欢迎程度 | 47% 的所有订阅 |
📊 计算方式: 100 位用户 × $9.99 × 85% = $849/月
真实独立开发者收入
收入分布
| 级别 | 月收入 | 百分比 |
|---|---|---|
| 大多数首个应用 | < $100 总计 | ~60% |
| 仍在挣扎 | $0 – $500 | ~25% |
| 可持续运营 | $1K – $5K | ~10% |
| 成功 | $5K – $20K | ~4% |
| 顶尖表现者 | $20K+ | ~1% |
成功案例
| 应用 | 收入 | 时间线 |
|---|---|---|
| Postiz | $2K MRR | 4 个月 |
| Formula Bot | $220K MRR | 18 个月 |
| ShipFast | $133K/月 | 持续中 |
| Itemlist | $1.4K/月 | 3 种定价层 |
| Xnapper | 已售 $150K | 21 个月 |
完整技术栈
技术栈概览
| 层级 | 技术 | 成本 |
|---|---|---|
| 前端 | Flutter 3.x + Riverpod/BLoC | 免费 |
| 后端 | Supabase(Postgres + Auth) | 免费 → $25/月 |
| 支付 | RevenueCat | 免费 → 收入比例 |
| 商店 | Google Play | $25 一次性 |
| 商店(iOS) | App Store | $99/年 |
起始成本
┌───