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. 上架后订阅即可正常工作
相关推荐
往来凡尘1 小时前
Flutter运行iOS26真机的两个问题
flutter·ios
方白羽2 小时前
Android 中Flags从源码到实践
android·app·客户端
普通网友2 小时前
Objective-C 类的方法重载与重写:区别与正确使用场景
开发语言·ios·objective-c
yfmingo4 小时前
flutter项目大量使用.obs会导致项目性能极度下降吗
flutter
山璞4 小时前
Flutter3.32 中使用 webview4.13 与 vue3 项目的 h5 页面通信,以及如何调试
前端·flutter
ezeroyoung4 小时前
环信em_chat_uikit(Flutter)适配鸿蒙
flutter·华为·harmonyos
恋猫de小郭4 小时前
再次紧急修复,Flutter 针对 WebView 无法点击问题增加新的快速修复
android·前端·flutter
denggun123455 小时前
卡顿监测原理
macos·ios·xcode