rc-price-changes

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Price Changes

价格变更

Use this skill when you roll out a new price for an existing subscription product on Android and want RevenueCat to manage the cohort and consent plumbing for you.
当你在Android平台为现有订阅产品推出新价格,并希望RevenueCat为你管理用户群组和同意相关流程时,可以使用本Skill。

Phase 1: Understand

阶段1:了解背景

Google Play supports two kinds of price changes for active subscribers:
  • Opt out changes (typically decreases, and increases within Google's opt out threshold). The new price applies automatically at the next renewal. No user action required.
  • Opt in changes (larger increases). Google shows its own in app consent dialog. If the user consents, they continue at the new price. If they decline, the subscription cancels at period end.
RevenueCat processes
SUBSCRIPTION_PRICE_CHANGE_UPDATED
and related RTDNs on its backend and updates
CustomerInfo
when a subscriber's cohort or consent state changes. Your app reads entitlements the same way it always does.
For most price change scenarios, there is nothing to implement in your app or backend.
Google Play支持针对活跃订阅用户的两种价格变更类型:
  • 可选择退出的变更(通常是降价,以及在Google可选择退出阈值内的涨价)。新价格会在下次续订时自动生效,无需用户操作。
  • 需要选择加入的变更(幅度较大的涨价)。Google会显示其内置的应用内同意对话框。如果用户同意,他们将按新价格继续订阅;如果拒绝,订阅会在当前周期结束时取消。
RevenueCat会在其后端处理
SUBSCRIPTION_PRICE_CHANGE_UPDATED
及相关RTDN,并在订阅用户的群组或同意状态变更时更新
CustomerInfo
。你的应用读取权益的方式保持不变。
对于大多数价格变更场景,你的应用或后端无需进行任何实现。

Phase 2: Plan

阶段2:规划

Decide which path applies before you touch anything.
QuestionOpt outOpt in
Typical triggerDecrease, or small increase within Google's thresholdLarger increase above Google's threshold
User consentNot requiredRequired, prompted by Google Play UI
If user declinesN/ASubscription cancels at period end,
CANCELLATION
webhook fires
New price appliesAutomatically at next renewalAfter user consents in Play's dialog
RTDN RevenueCat consumes
SUBSCRIPTION_PRICE_CHANGE_UPDATED
SUBSCRIPTION_PRICE_CHANGE_UPDATED
, then
SUBSCRIPTION_CANCELED
if declined
App code changeNone requiredNone required
Paywall price source
pkg.product.price.formatted
(new purchases only)
pkg.product.price.formatted
(new purchases only)
Questions to answer before executing:
  • Is the change a decrease, a small increase, or a larger increase? That determines opt out vs opt in.
  • Do you want to notify existing subscribers in app before the change takes effect? That is optional, driven by a webhook or a Targeting rule, not a requirement.
  • Which legacy cohorts exist today? Existing subscribers keep paying their old price until Google migrates them. This is a Google Play concern, not visible in the SDK.
在进行任何操作前,先确定适用哪种方案。
问题可选择退出需要选择加入
典型触发场景降价,或在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或定向规则实现,并非强制要求。
  • 当前存在哪些历史用户群组?现有订阅用户会继续支付旧价格,直到Google完成迁移。这是Google Play的相关事项,在SDK中不可见。

Phase 3: Execute

阶段3:执行

Most of the work is in the Play Console and the RevenueCat dashboard. Your app stays the same.
大部分工作在Play Console和RevenueCat控制台中完成,你的应用无需修改。

1. Update the price in Play Console

1. 在Play Console中更新价格

In Google Play Console, open the subscription, select the base plan, and edit the price. Google will prompt you to choose how existing subscribers are treated (opt out vs opt in) based on the magnitude of the change and your region.
在Google Play Console中,打开订阅产品,选择基础方案,然后编辑价格。Google会根据变更幅度和地区,提示你选择如何处理现有订阅用户(可选择退出或需要选择加入)。

2. Let RevenueCat pick up the change

2. 让RevenueCat同步变更

RevenueCat processes the RTDNs from Google automatically. You do not need to toggle anything in the RevenueCat dashboard for the price change itself. Confirm the updated product price appears on the product in the RevenueCat dashboard after Google propagates it.
RevenueCat会自动处理来自Google的RTDN。你无需在RevenueCat控制台中针对价格变更进行任何切换操作。在Google完成变更传播后,确认更新后的产品价格已显示在RevenueCat控制台的产品页面中。

3. Refresh offerings in the client (optional)

3. 刷新客户端的产品套餐(可选)

If you want the paywall to show the new price immediately for new purchasers, refresh offerings after the Play Console change propagates. The SDK call is unchanged:
kotlin
val offerings = Purchases.sharedInstance.awaitOfferings()
val pkg = offerings.current?.availablePackages?.firstOrNull() ?: return
val displayPrice = pkg.product.price.formatted
Legacy cohort subscribers continue to pay their old price until Google migrates them.
pkg.product.price.formatted
is always correct for new purchases.
如果你希望付费墙立即向新购买用户显示新价格,可在Play Console变更传播完成后刷新产品套餐。SDK调用方式保持不变:
kotlin
val offerings = Purchases.sharedInstance.awaitOfferings()
val pkg = offerings.current?.availablePackages?.firstOrNull() ?: return
val displayPrice = pkg.product.price.formatted
历史用户群组的订阅用户会继续支付旧价格,直到Google完成迁移。
pkg.product.price.formatted
始终对新购买用户显示正确价格。

4. Observe CustomerInfo on consent resolution

4. 监听同意结果对应的CustomerInfo

For opt in increases, RevenueCat updates
CustomerInfo
when the consent outcome is known. Read entitlements the usual way.
kotlin
val info = Purchases.sharedInstance.awaitCustomerInfo()
val isPro = info.entitlements["pro"]?.isActive == true
Do not build a consent dialog. Google Play shows it.
对于需要选择加入的涨价,当同意结果确定后,RevenueCat会更新
CustomerInfo
。按照常规方式读取权益即可。
kotlin
val info = Purchases.sharedInstance.awaitCustomerInfo()
val isPro = info.entitlements["pro"]?.isActive == true
无需自行构建同意对话框,Google Play会显示该对话框。

5. Handle declines via webhook, if you care

5. (若需要)通过webhook处理用户拒绝的情况

If the user declines the opt in increase, the subscription cancels at period end. RevenueCat fires a
CANCELLATION
webhook event. Treat it the same way you treat any other cancellation on the server side.
如果用户拒绝了需要选择加入的涨价,订阅会在周期结束时取消。RevenueCat会触发
CANCELLATION
webhook事件。在服务器端,将其视为普通取消事件处理即可。

6. Optional: notify affected users

6. 可选:通知受影响的用户

If you want to warn subscribers about an upcoming increase before Google's dialog appears, drive an in app banner from a RevenueCat webhook event or show a specific Offering to the affected cohort with a Targeting rule. This is an enhancement, not part of the price change contract.
如果你想在Google对话框出现前提醒订阅用户即将到来的涨价,可通过RevenueCat的webhook事件触发应用内横幅,或通过定向规则向受影响的用户群组展示特定的产品套餐。这是增强功能,不属于价格变更的必备流程。

References

参考资料