rc-price-changes について
既存商品の価格を変更する Android サブスクリプション開発者向けの RevenueCat スキルです。Google Play の同意フローと RevenueCat による購読者情報の更新を説明し、任意の通知方法も扱います。
主な機能
- 01オプトアウトとオプトインの価格変更の区別
- 02RevenueCat による RTDN 処理の説明
- 03CustomerInfo による同意結果の確認
- 04Webhook による解約処理
活用シーン
- 01Android サブスクリプションの価格変更計画
- 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 では、有効なサブスクリプションに対して次の 2 種類の価格変更がサポートされています。
- オプトアウト方式の変更(通常は値下げ、および 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. クライアントでオファリングを更新する(任意)
新規購入者向けのペイウォールに新価格をすぐに表示したい場合は、Play Console の変更が反映された後にオファリングを更新してください。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 イベントを使ってアプリ内バナーを表示するか、ターゲティングルールを使って影響を受けるグループに特定の Offering を表示します。これは機能強化であり、料金変更の契約の一部ではありません。