RevenueCat 接入 Apple App Store 订阅全流程详解(2025 最新)

适用:Flutter / Swift / Objective-C / React Native / Unity

场景:上架 App + 内购订阅(月付/年付)+ RevenueCat 统一管理

一、为什么用 RevenueCat 管理苹果订阅?

Apple IAP(In-App Purchase)本身非常强大,但开发者常常会遇到:

  • 验证票据复杂(Receipt Validation 反作弊)
  • 订阅生效状态难同步(Sandbox 状态混乱)
  • 跨平台权益(iOS + Android)难统一
  • RevenueCat 能自动管理全部

使用 RevenueCat,你可以:

✨ 自动验证订阅(无需自己搭建服务器)

✨ 自动同步跨平台用户 Pro 状态

✨ 显示历史账单、取消原因、续费失败原因

✨ 支持 Offer、价格管理、A/B 测试

✨ 自动处理 Apple 信号(cancel、renew、billing retry 等)

只需 10 行代码即可完成所有 IAP。

二、准备工作

项目

要求

Apple 开发者账号(公司/个人)

已完成银行卡验证

App Store Connect 中已创建 App

不需提交,可是 Draft 状态

已上传一次 build(用于解锁 IAP 功能)

必须,否则找不到 In-App Purchases

RevenueCat 账号

免费版即可

Flutter/Swift 项目已加入 IAP 权限

需开启 In-App Purchase Capability

三、在 App Store Connect 创建订阅项目(Subscription)

重要:必须先创建订阅组(Subscription Group)才能创建订阅产品

步骤 1:进入订阅管理页面

路径:

sql 复制代码
App Store Connect → My Apps → 你的 App →
Features → In-App Purchases → Manage

点击:

步骤 2:创建订阅组(Subscription Group)

示例名称:

  • Linguadiary Pro
  • 或者 Pro Plan

注意:一个订阅组内,用户只能选择一个订阅(例如月付 or 年付)

步骤 3:创建订阅产品(In-App Purchase)

例子:

字段

示例

Reference Name

Linguadiary Monthly Subscription

Product ID

linguadiary_monthly_1

Duration

1 Month

Cleared for Sale

YES

Localization

Title + Description 必填否则审核失败

Apple 要求填写:

(1)标题(Title)

示例:

Linguadiary Monthly Plan

建议 35 字以内

(2)描述(Description)

示例:

Unlock unlimited AI correction and pro features.

建议 55 字以内

(3)价格 / 价格计划(Pricing)

选择 Level 1--87 价格等级。

步骤 4:创建年订阅

同组内再创建一个:

字段

示例

Product ID

linguadiary_yearly_12

Duration

1 Year

价格

Level 2--100

四、将订阅与 App 版本关联(最容易忘记的坑)

必须进行两处绑定:

1. "App 内购买项目"必须勾选订阅

路径:

App Store → Version → In-App Purchases → 选择你的订阅项目 → 保存

否则会出现:

❌ "元数据丢失(Metadata Lost)"

❌ 无法通过审核

❌ RevenueCat 抓不到产品

2. 本地化语言必须在 "订阅组同级的 Localization" 填写

路径:

sql 复制代码
App Store Connect → App Information → Localization

必须填写:

  • App Name
  • Subtitle
  • Description
  • Keywords
  • Support URL
  • Marketing URL

缺少任何一个 → Apple 不让订阅上架 → RevenueCat 显示产品为空。

五、在 RevenueCat 创建 Apple App

路径:

sql 复制代码
RevenueCat → Apps & providers→ Add App → Apple App Store

填写:

  • App Name
  • Bundle ID(必须匹配 App Store Connect )
  • Platform:iOS

然后点击 Add Store

六、在 RevenueCat 添加订阅产品

路径:

sql 复制代码
Products → New Product

添加:

  • linguadiary_monthly_1
  • linguadiary_yearly_12

必须与 App Store Connect Product ID 完全一致(大小写敏感)。

然后创建 Offering:

Offering

包含 Package

default

monthly + yearly

RevenueCat 会自动同步价格、商品信息。

七、在 App 内接入 RevenueCat SDK(Flutter 示例)

1. 初始化 RevenueCat

csharp 复制代码
await Purchases.configure(
  PurchasesConfiguration("public_sdk_key_ios"),
);

2. 获取订阅产品

ini 复制代码
final offerings = await Purchases.getOfferings();
final package = offerings.current?.availablePackages.first;

3. 发起购买

go 复制代码
Purchases.purchasePackage(package);

4. 判断用户是否为 Pro

ini 复制代码
final info = await Purchases.getCustomerInfo();
final isPro = info.entitlements.all["pro"]?.isActive ?? false;

仅以上 4 步即可完成全部逻辑。

八、测试订阅(Sandbox)

添加 Sandbox 测试员

路径:

复制代码
Users and Access → Sandbox Testers

填写:

  • Email(不能是 Apple ID)
  • First/Last Name
  • Password

测试流程:

  1. 在设备登录 Sandbox Apple ID
  2. 安装 TestFlight 构建
  3. 购买订阅
  4. Apple 会用虚拟价格扣费
  5. 生命周期会被加速:
    • Monthly → 5 min
    • Yearly → 1 hour

你可以快速看到:

  • 续费成功
  • 失败 → Billing Retry
  • 取消 → Expire

九、常见坑与解决方案(踩坑大全)

❌ 1. RevenueCat 无法读取产品

原因:

  • 未上传订阅本地化(Title/Description)
  • Product 未添加到 App 版本
  • Subscription Group 未本地化
  • Price 未激活
  • Subscription 未提交审核

❌ 2. App Store Connect 显示「元数据丢失」

原因:

  • 你没有在 App Version 页面勾选订阅项目

必须在这里添加:

sql 复制代码
App → Version → In-App Purchases → Add

❌ 3. Apple 审核拒绝:缺少隐私政策/使用条款

需要在 app 内提供:

  • Privacy Policy 链接
  • Terms of Use / EULA 链接

可用:

arduino 复制代码
https://linguadiary.com/privacy
https://linguadiary.com/terms

十、发布到 App Store

  1. 确保订阅项目已 "Ready to Submit"
  2. App 版本中已勾选订阅
  3. 提交审核
  4. RevenueCat 自动处理所有验证流程
  5. 上架后订阅即可正常工作
相关推荐
敲代码的鱼19 小时前
PDF 预览与签名批注写回 支持安卓 iOS 鸿蒙 UTS插件
android·前端·ios
时光足迹21 小时前
uni-app 视频通话实战:康复师与患者视频问诊的 6 个致命 Bug 与解决方案
android·ios·uni-app
时光足迹1 天前
JPush UniApp UTS 插件完全参考手册:API、事件与厂商通道一网打尽
vue.js·ios·uni-app
时光足迹1 天前
极光推送全攻略(下):uni-app 代码实现与 iOS 排查实战
vue.js·ios·uni-app
时光足迹1 天前
极光推送全攻略(上):被iOS证书折磨了三天,我写了一份前端也能看懂的避坑指南
前端·ios·uni-app
TT_Close1 天前
别劝退了!5秒搞定 Flutter 鸿蒙 FVM 起跑线
flutter·harmonyos·visual studio code
你听得到111 天前
用户说 App 卡,但说不清在哪?我把 Flutter 监控 SDK 升级成了链路观测工作台
前端·flutter·性能优化
编程范式2 天前
SwiftUI 中图片如何适配可用空间
ios
stringwu3 天前
Flutter 开发必备:MVI 架构的高效实现指南
前端·flutter
程序员老刘4 天前
Flutter版本选择指南:3.44系列继续观望 | 2026年6月
flutter·ai编程·客户端