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. 上架后订阅即可正常工作
相关推荐
向哆哆4 小时前
打造高校四六级报名管理系统:基于 Flutter × OpenHarmony 的跨端开发实践
flutter·开源·鸿蒙·openharmony·开源鸿蒙
2501_940007894 小时前
Flutter for OpenHarmony三国杀攻略App实战 - 设置功能实现
flutter
lbb 小魔仙5 小时前
【Harmonyos】开源鸿蒙跨平台训练营DAY9:获取分类数据并渲染
flutter·华为·harmonyos
mocoding5 小时前
Flutter 3D 翻转动画flip_card三方库在鸿蒙版天气预报卡片中的实战教程
flutter·3d·harmonyos
2601_949809596 小时前
flutter_for_openharmony家庭相册app实战+我的Tab实现
java·javascript·flutter
2601_949868367 小时前
Flutter for OpenHarmony 电子合同签署App实战 - 已签合同实现
java·开发语言·flutter
一起养小猫8 小时前
Flutter for OpenHarmony 实战:别踩白方块游戏完整开发指南
flutter·游戏
188_djh8 小时前
# 15_电脑版百度网盘每次登录都显示安全验证,很麻烦,一招解决
windows·app·百度网盘·百度网盘安全验证·baidudisk
●VON9 小时前
Flutter for OpenHarmony 21天训练营 Day03 总结:从学习到输出,迈出原创第一步
学习·flutter·openharmony·布局·技术
程序员清洒9 小时前
Flutter for OpenHarmony:Text — 文本显示与样式控制
开发语言·javascript·flutter