原创

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:进入订阅管理页面

路径:

App Store Connect → My Apps → 你的 App →
Features → In-App Purchases → Manage

点击:

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

示例名称:

  • Linguadiary Pro
  • 或者 Pro Plan

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

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

例子:

字段示例
Reference NameLinguadiary Monthly Subscription
Product IDlinguadiary_monthly_1
Duration1 Month
Cleared for SaleYES
LocalizationTitle + 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 IDlinguadiary_yearly_12
Duration1 Year
价格Level 2–100

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

必须进行两处绑定:

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

路径:

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

否则会出现:

❌ “元数据丢失(Metadata Lost)”
❌ 无法通过审核
❌ RevenueCat 抓不到产品

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

路径:

App Store Connect → App Information → Localization

必须填写:

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

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

五、在 RevenueCat 创建 Apple App

路径:

RevenueCat → Apps & providers→ Add App → Apple App Store

填写:

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

然后点击 Add Store

六、在 RevenueCat 添加订阅产品

路径:

Products → New Product

添加:

  • linguadiary_monthly_1
  • linguadiary_yearly_12

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

然后创建 Offering:

Offering包含 Package
defaultmonthly + yearly

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

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

1. 初始化 RevenueCat

await Purchases.configure(
  PurchasesConfiguration("public_sdk_key_ios"),
);

2. 获取订阅产品

final offerings = await Purchases.getOfferings();
final package = offerings.current?.availablePackages.first;

3. 发起购买

Purchases.purchasePackage(package);

4. 判断用户是否为 Pro

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 页面勾选订阅项目

必须在这里添加:

App → Version → In-App Purchases → Add

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

需要在 app 内提供:

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

可用:

https://linguadiary.com/privacy
https://linguadiary.com/terms

十、发布到 App Store

  1. 确保订阅项目已 “Ready to Submit”
  2. App 版本中已勾选订阅
  3. 提交审核
  4. RevenueCat 自动处理所有验证流程
  5. 上架后订阅即可正常工作
正文到此结束
Loading...