RevenueCat iOS 订阅接入教程
作者:Mehdi Azizi
更新于 ,7分钟
RevenueCat 把 App Store Connect 产品接入你的 App 并管理访问权限。接入第一个订阅的步骤。
为什么用 RevenueCat,而不是只用 StoreKit
StoreKit 是 Apple 的框架,不用任何第三方服务就能卖订阅。但对新手来说,自己写完整的购买、恢复和访问权限校验逻辑,意味着一大堆要维护的代码,还有很多容易漏掉的边界情况:换设备、过期、退款。
RevenueCat 夹在 App Store Connect 和你的 App 之间:它读取你的产品,管理有效订阅,让你不用自己写这一层。你可以在后台控制价格和优惠,每次改动都不用重新发布 App。
第 1 步:在 App Store Connect 中创建产品
在接入 RevenueCat 之前,产品必须先在 Apple 那边存在。在 App Store Connect 里创建一个订阅群组,然后创建一个或多个级别,设置时长(比如按月或按年)和各地区的价格。每个档位还要填写展示给用户的文案:Apple 要求先填好这些,才会在审核中接受该产品。
这一步常见的疏漏:产品创建了,却从没和对应版本一起提交到 App 的首次审核。一个从未包含在 App 提交中的待处理产品,对用户是不可见的,哪怕 RevenueCat 已经能看到它。
第 2 步:把 RevenueCat 连接到你的 App
在 RevenueCat 里,你创建一个项目,绑定你的 App Store Connect API 密钥,让 RevenueCat 自动同步产品,然后定义 “entitlements”,也就是访问权限。一个 entitlement 代表订阅解锁的内容,比如 App 的完整访问权,和具体是哪个产品触发的无关。
这层间接关系很有用:以后如果你调整优惠结构,比如加一个年付档位,只需把新产品关联到同一个 entitlement,App 里校验访问权限的代码完全不用动。
在 App 这边,RevenueCat 的 React Native SDK 通过专用插件安装到 Expo 项目中,并提供一个简单的函数,用来判断当前用户是否拥有有效的 entitlement。
第 3 步:搭建你的付费墙
付费墙是展示优惠的界面,也是触发购买的地方。RevenueCat 提供可在后台配置的付费墙,修改时无需重新发布 App;如果你想完全掌控设计,也可以用 SDK 自己做。
位置和设计一样重要。在用户还没看到 App 价值之前就弹出的付费墙,转化率通常不如在第一次成功操作之后出现的付费墙。新手常犯的 iOS 付费墙错误这篇指南详细讲了这一阶段最常见的坑,不只是技术接入层面的问题。
第 4 步:测试购买、恢复和过期
这是最常被草草了事的一步,却恰恰是 Apple 查得最多的一步。提交前,三个场景必须都能正常工作:
购买。 用沙盒测试账号购买后,entitlement 必须立即解锁,而且你的 App 要能响应这个变化,不需要重启 App。
恢复。 在新设备上或重装后,用同一个 Apple 账号,“恢复购买”按钮必须能找回有效订阅。Apple 在审核中一定会检查这个流程,缺少它或它不能正常工作,是依据 guideline 3.1.1 被拒的常见原因。
过期。 在沙盒环境中,订阅几分钟就会过期,而不是几个月,这样你可以确认周期结束后访问权限会正确关闭,不用等一个真实的计费周期。
RevenueCat 替代不了的东西
RevenueCat 管的是购买机制,不管你的商品页面和付费墙是否符合 guideline 3.1.2。在 App Store 描述里正确说明订阅、写明准确价格和时长、填写使用条款,这些始终是你自己的事。iOS 上选订阅还是一次性购买这篇能帮你在走到这一技术步骤之前选对模式。
另外,月收入超过一定门槛后,RevenueCat 会抽取一部分收入作为佣金,这是在 Apple 对 App 内订阅收取的佣金之外的。在围绕这两笔佣金设计商业模式之前,先去他们官网确认当前的收费档位。
新手最常犯的错误
忘了加载状态。 启动时,RevenueCat 需要一点时间来获取用户的访问权限。如果你的 App 在拿到响应前默认显示付费内容,没有订阅的用户可能会短暂看到他没付费的内容。要做一个明确的加载状态,而不是乐观地默认显示。
在错误的地方校验权限。 每次打开付费界面都要重新校验有效的 entitlement,而不是只在启动时校验一次。如果用户在使用 App 期间取消了订阅或订阅过期,下一个界面就应该反映这个变化。
混淆沙盒环境和生产环境。 产品 ID 和沙盒测试账号与生产环境是分开的。用错 Apple 账号在沙盒里测试通过,或者产品只在生产环境中创建,都可能让你误以为一切就绪。
一个经过验证的 App,而不只是能编译的 App
一个在你自己账号上快速测试“能用”的订阅,并不能保证它在另一台设备上恢复或真实过期时还能正常工作。而这正是 Apple 审核员要检查的。iOS 应用内订阅这一页详细讲解了整条链路,从创建产品到最终验证。
如果你想从一个付费墙和订阅已经写进代码的基础开始,iOS Kit 的起步代码里就有。想像审核员那样检查你的订阅,Apple Review Kit 收录了我提交前的检查清单,以及关于应用内购买要留给测试人员的备注。
常见问题
如何在 iOS 上接入 RevenueCat 订阅?
分四步。先在 App Store Connect 中创建产品。然后用你的 App Store Connect API 密钥连接 RevenueCat,定义 entitlements(访问权限),再搭建付费墙。最后测试购买、恢复和过期:这一步常被草草了事,却正是 Apple 要检查的。
在 iOS 上卖订阅必须用 RevenueCat 吗?
不必。StoreKit 是 Apple 的框架,不用第三方服务就能卖订阅。但那样你就得自己写全部的购买、恢复和访问权限校验逻辑,还要处理容易漏掉的边界情况:换设备、过期、退款。RevenueCat 夹在 App Store Connect 和你的 App 之间,帮你省掉这一层。
RevenueCat 里的 entitlement 是什么?
entitlement 就是访问权限:它代表订阅解锁的内容,比如 App 的完整访问权,不管具体是哪个产品触发的。以后你加一个年付档位,只需把新产品关联到同一个 entitlement。App 里校验访问权限的代码不用改。
提交给 Apple 之前如何测试 RevenueCat 订阅?
提交前三个场景必须都能正常工作。购买:用沙盒测试账号,访问权限立即解锁,无需重启 App。恢复:在新设备上或重装后,用同一个 Apple 账号,恢复按钮能找回有效订阅。过期:在沙盒中订阅几分钟就过期,你可以确认访问权限会关闭。
为什么 RevenueCat 里能看到的产品,用户却看不到?
通常是因为这个产品从没包含在 App 提交中。在 App Store Connect 中创建、却从未和对应版本一起提交首次审核的产品,对用户是不可见的,哪怕 RevenueCat 已经能看到它。这是创建产品阶段的常见疏漏。
RevenueCat 会对订阅收佣金吗?
月收入超过一定门槛后,RevenueCat 会抽取一部分收入作为佣金。这笔佣金叠加在 Apple 对 App 内订阅收取的佣金之上。在围绕这两笔佣金设计商业模式之前,先去 RevenueCat 官网确认当前的收费档位。