关于 rc-price-changes
面向 Android 订阅应用开发者的 RevenueCat 技能,说明如何调整现有订阅价格并处理用户同意状态。涵盖 Google Play 与 RevenueCat 的流程,以及可选的应用内通知。
主要功能
- 01区分选择退出与选择加入价格变更
- 02说明 RevenueCat 处理 RTDN 的方式
- 03通过 CustomerInfo 读取同意结果
- 04使用 webhook 处理取消事件
适用场景
- 01规划 Android 订阅的价格调整
- 02检查大型涨价后的用户同意状态
- 03在服务器处理拒绝涨价后的取消
- 04向受影响订阅者展示可选通知
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ revenuecat/ ai-toolkit --skill rc-price-changes安装后在 Claude Code 中输入/rc-price-changes确认已加载。
详细介绍
价格变更
当你为 Android 上现有的订阅产品推出新价格,并希望 RevenueCat 为你管理用户群组和同意流程时,请使用此技能。
阶段 1:了解
Google Play 支持对活跃订阅者进行两种价格变更:
- 选择退出变更(通常是降价,以及在 Google 选择退出门槛范围内的涨价)。新价格会在下次续订时自动生效。无需用户采取任何操作。
- 选择加入变更(幅度较大的涨价)。Google 会显示自己的应用内同意对话框。如果用户同意,他们将继续按新价格订阅。如果用户拒绝,订阅将在周期结束时取消。
RevenueCat 会在后端处理 SUBSCRIPTION_PRICE_CHANGE_UPDATED 和相关 RTDN,并在订阅者所属用户群组或同意状态发生变化时更新 CustomerInfo。你的应用仍以一贯的方式读取权益。
对于大多数价格变更场景,你无需在应用或后端实现任何内容。
阶段 2:规划
在执行任何操作之前,先确定适用哪种路径。
| 问题 | 选择退出 | 选择加入 |
|---|---|---|
| 常见触发条件 | 降价,或在 Google 门槛范围内的小幅涨价 | 超过 Google 门槛的较大幅度涨价 |
| 用户同意 | 不需要 | 需要,由 Google Play UI 提示 |
| 用户拒绝时 | 不适用 | 订阅将在周期结束时取消,并触发 CANCELLATION webhook |
| 新价格生效时间 | 下次续订时自动生效 | 用户在 Play 对话框中同意后生效 |
| RevenueCat 会处理的 RTDN | SUBSCRIPTION_PRICE_CHANGE_UPDATED | SUBSCRIPTION_PRICE_CHANGE_UPDATED,如果用户拒绝,之后还会收到 SUBSCRIPTION_CANCELED |
| 应用代码变更 | 不需要 | 不需要 |
| 付费墙价格来源 | pkg.product.price.formatted(仅限新购买) | pkg.product.price.formatted(仅限新购买) |
执行前需要回答的问题:
- 这次变更是降价、小幅涨价还是较大幅度涨价?这决定采用选择退出还是选择加入。
- 你是否希望在变更生效前通过应用通知现有订阅者?这是可选项,可通过 webhook 或 Targeting 规则实现,并非必需。
- 当前有哪些旧用户群组?在 Google 迁移他们之前,现有订阅者会继续按旧价格付费。这属于 Google Play 范畴,不会显示在 SDK 中。
阶段 3:执行
大部分工作都在 Play Console 和 RevenueCat 控制面板中完成。你的应用保持不变。
1. 在 Play Console 中更新价格
在 Google Play Console 中打开订阅,选择基础方案并编辑价格。Google 会根据变更幅度和所在地区,提示你选择如何处理现有订阅者(选择退出还是选择加入)。
2. 等待 RevenueCat 获取变更
RevenueCat 会自动处理来自 Google 的 RTDN。你无需在 RevenueCat 控制面板中切换任何设置来应用价格变更。Google 推送变更后,请确认 RevenueCat 控制面板中的产品显示了更新后的价格。
3. 在客户端刷新 offerings(可选)
如果你希望付费墙立即向新购买者显示新价格,请在 Play Console 推送变更后刷新 offerings。SDK 调用不变:
val offerings = Purchases.sharedInstance.awaitOfferings()
val pkg = offerings.current?.availablePackages?.firstOrNull() ?: return
val displayPrice = pkg.product.price.formatted
旧用户群组中的订阅者会继续按旧价格付费,直到 Google 迁移他们。对于新购买,pkg.product.price.formatted 始终准确。
4. 在同意结果确定后检查 CustomerInfo
对于选择加入的涨价,RevenueCat 会在同意结果确定后更新 CustomerInfo。按常规方式读取权益。
val info = Purchases.sharedInstance.awaitCustomerInfo()
val isPro = info.entitlements["pro"]?.isActive == true
不要构建同意对话框。Google Play 会显示该对话框。
5. 如有需要,通过 webhook 处理用户拒绝
如果用户拒绝选择加入涨价,订阅将在周期结束时取消。RevenueCat 会触发 CANCELLATION webhook 事件。在服务器端按处理其他取消事件的方式处理即可。
6. 可选:通知受影响的用户
如果你想在 Google 的对话框出现前提醒订阅用户即将涨价,可以通过 RevenueCat webhook 事件在应用内显示横幅,或使用 Targeting 规则向受影响的用户群展示特定的 Offering。这是增强功能,不属于价格变更约定的一部分。