移动端付费
用 RevenueCat 和 01MVP billing API 准备 iOS 与 Android 内购
移动端订阅和内购建议走 RevenueCat。01MVP mobile 模板已经放好了 SDK bootstrap,但默认不绑定任何真实项目。
你将学到
- 移动端付费需要哪些材料,以及它们各自放在哪里
- RevenueCat 的 public SDK key 和服务端 key 的边界在哪里
- App 端和业务服务端各自管什么
- 上架前需要在哪些后台完成配置
接入前先准备什么
移动端付费会同时碰到商店、RevenueCat、后端会员状态和审核资料。先把这些材料准备好,才能把配置和验证一次跑顺。
| 材料 | 准备位置 | 用途 |
|---|---|---|
| iOS / Android 商品 ID | App Store Connect、Google Play Console | 定义订阅、一次性购买或试用 |
| RevenueCat Project / App | RevenueCat 后台 | 连接商店商品和客户端 SDK |
| Offering 和 Entitlement | RevenueCat 后台 | 决定 App 里展示什么套餐、用户买完拿到什么权益 |
| public SDK key | RevenueCat 后台,放进 EAS Environment | App 读取 entitlement,属于客户端公开值 |
| 服务端同步方案 | 01MVP API 或 webhook | 把商店购买结果同步到业务会员状态 |
| sandbox 测试账号 | Apple / Google 商店后台 | 真机测试购买、续费、取消和退款 |
第一版可以先让 App 读取 RevenueCat entitlement,再把会员展示做出来。真正限制高价值功能时,建议服务端也确认会员状态,避免只信客户端本地状态。
配置公开 SDK key
本地开发时在 .env 里添加:
EXPO_PUBLIC_REVENUECAT_IOS_API_KEY="appl_xxx"
EXPO_PUBLIC_REVENUECAT_ANDROID_API_KEY="goog_xxx"
EXPO_PUBLIC_REVENUECAT_ENTITLEMENT_ID="pro"生产构建时,把同样的公开值放进 EAS Environment,或写进 products/01mvp/apps/mobile/eas.json 的 production profile。
这些 key 是 RevenueCat 的客户端公钥,可以放进 App bundle。别把服务端 API key 或 webhook secret 放进 Expo 变量。
App 内状态
移动端 helper 在 products/01mvp/apps/mobile/src/lib/revenuecat.ts,它会按平台选 iOS 或 Android SDK key。没配置 key 时 App 显示未配置状态;配好后就能读取 entitlement。
移动端首页会调用 orpc.billing.plans.queryOptions() 来展示后端当前公开的付费计划。RevenueCat 管商店侧购买和 entitlement,Web/API 管业务计划、订单、会员状态或后续 webhook 同步。
App 端和服务端的职责
MVP 阶段建议把逻辑分成两层:
| 层级 | 负责什么 | 注意点 |
|---|---|---|
| App | 展示套餐、发起购买、读取 RevenueCat entitlement | 只放 public SDK key,不放 webhook secret |
| 服务端 | 决定用户是否能访问 Pro 功能 | RevenueCat webhook secret、商店 server API key 都只放服务端 |
如果产品里有跨 Web、Mobile、Desktop 的统一会员权益,服务端应该成为最终判断来源。App 端读到 entitlement 后,可以请求 API 刷新用户会员状态。
测试购买流程
sandbox 环境下测试时,iOS 和 Android 的行为不太一样:
| 平台 | sandbox 方式 | 注意点 |
|---|---|---|
| iOS | App Store Connect 创建 sandbox 测试账号 | 需要在设备的 App Store 设置里登录 sandbox 账号 |
| Google Play | Play Console 内部测试轨道 | 测试账号需要加入测试人员列表 |
测试时要覆盖:购买成功、取消购买、恢复购买、订阅续费、退款。这些场景在 sandbox 里都能模拟,但要真机跑。
上架前检查
- App Store Connect 中创建内购产品
- Google Play Console 中创建订阅或一次性商品
- RevenueCat 中创建 Project、App、Products、Offerings、Entitlements
EXPO_PUBLIC_REVENUECAT_ENTITLEMENT_ID与 RevenueCat entitlement 一致- 如果服务端要接收 RevenueCat webhook,把 webhook secret 放在服务端 secrets,不要放进 Expo
下一步
付费配好之后,继续了解移动端有哪些原生能力可以接入,以及每种能力的接入边界。
想和其他创造者交流?
这篇文档有问题?