rc-catalog-management について
Android 開発者向けに、Google Play Console と RevenueCat を使ったサブスクリプションカタログ管理を案内するスキルです。商品登録、権利やオファリングの設定、ターゲティング、変更確認を扱います。
主な機能
- 01商品登録と権利・オファリング設定の分離
- 02商品のインポートと権利への紐付け
- 03オファリング、パッケージ、ターゲティングの設定
- 04変更確認のチェックリスト
活用シーン
- 01Android アプリへのサブスクリプション商品の追加
- 02アプリ更新なしでのオファリングやターゲティング変更
- 03商品が想定した権利を付与するかの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ revenuecat/ ai-toolkit --skill rc-catalog-managementインストール後、Claude Code で/rc-catalog-managementを入力して読み込まれたか確認します。
詳細
カタログ管理
Google Play Console(商品の信頼できる唯一の情報源)とRevenueCatダッシュボード(エンタイトルメント、オファリング、ターゲティング)の2つの場所で、Androidの商品カタログを管理します。アプリやバックエンドから、Google Play Developerのmonetization.subscriptionsまたはmonetization.onetimeproductsエンドポイントを呼び出すことはありません。
フェーズ1:理解する
何かに手を加える前に、このフェーズを読んでください。
2つの場所を使う理由
| 場所 | 管理対象 | 例 |
|---|---|---|
| Google Play Console | 基本となる商品、ベースプラン、オファー、価格 | premium_monthly、ベースプランp1m、初回オファー |
| RevenueCatダッシュボード | エンタイトルメント、オファリング、パッケージ、ターゲティング | proエンタイトルメント、defaultオファリング、$rc_monthlyパッケージ |
Play Consoleは課金対象のSKUを管理します。どのSKUをどのユーザーに表示するか、またどのエンタイトルメントキーに紐付けるかはRevenueCatが決定します。
アプリを更新せずに変更できる内容
アプリがawaitOfferings()を呼び出すと、RevenueCatダッシュボードで設定された内容を取得します。オファリングの編集、パッケージの入れ替え、ターゲティングルールは、次回アプリを起動したときに反映されます。バイナリのリリースは必要ありません。
REST APIを使う場合
バックエンドからカタログの編集を自動化する必要がある場合(たとえば、複数の環境に数十件のオファリングを登録する場合)は、商品、エンタイトルメント、オファリングにRevenueCat REST APIを使用します。Googleに直接アクセスすることはありません。Play Consoleが引き続き商品の信頼できる唯一の情報源です。
フェーズ2:計画する
変更を加える前に、次の点を決めてください。
- 新しい商品ですか。それとも既存商品の再パッケージですか?
- 新しい商品:Play Consoleから始めます。
- 再パッケージ(新しいオファリング、新しいターゲティング、新しいエンタイトルメントの紐付け):RevenueCatで作業します。
- その商品でどのエンタイトルメントを利用できるようにしますか? 対応するエンタイトルメントがない場合は、先に作成してください。
- オファリングとパッケージの識別子は何ですか? 識別子(たとえば
$rc_monthly、$rc_annual)を決め、ペイウォールのコードが引き続き動作するようにします。 - ターゲティングを変更する必要がありますか? 異なるユーザーに異なるオファリングを表示する場合は、配置名とターゲティングルール(OSバージョン、国、カスタム属性)を計画してください。
フェーズ3:実行する
新しいサブスクリプション商品を追加する一連の手順です。
ステップ1:Play Consoleで商品を追加する
- Play Console -> アプリ -> 収益化 -> 商品 -> サブスクリプションを開きます。
- サブスクリプションを作成をクリックします。
- 商品ID(たとえば
premium_monthly)、名前、説明を設定します。 - ベースプラン(請求期間、更新タイプ、価格)を追加します。
- 必要に応じてオファー(初回価格、無料トライアル)を追加します。
- サブスクリプションを有効化します。
Playで商品が反映されるまで、数分待ちます。
ステップ2:RevenueCatにインポートし、エンタイトルメントを紐付ける
- RevenueCatダッシュボード -> プロジェクト -> 商品を開きます。
- インポートをクリックしてPlay Consoleから同期します。新しい商品が一覧に表示されます。
- 商品を開き、既存のエンタイトルメントに紐付けるか、新しく作成します。
- エンタイトルメントの例:
pro。pro機能を利用可能にするすべての商品をproに紐付けます。
- エンタイトルメントの例:
クライアントコードでは、キーを使ってエンタイトルメントを確認します。
val isPro = customerInfo.entitlements["pro"]?.isActive == true
ステップ3:商品をオファリングのパッケージとして組み込む
- ダッシュボードでオファリングを開きます。
- 編集するオファリングを選ぶか、新しいオファリング(たとえば
default)を作成します。 - パッケージを追加します。ペイウォールに合ったパッケージ識別子を選びます。
- 月額の場合は
$rc_monthly - 年額の場合は
$rc_annual - またはカスタム識別子
- 月額の場合は
- Play Consoleの商品をパッケージに紐付けます。
- 保存します。デフォルトにする場合は、オファリングをCurrentに設定します。
クライアントコードは変更不要です。
val offerings = Purchases.sharedInstance.awaitOfferings()
val monthly = offerings.current?.monthly
Step 4(任意):ターゲティング
ユーザーによって異なるオファーを表示する場合は、プレースメントを使用します。
- ダッシュボードで Targeting -> Placements を開きます。
- プレースメントを作成します(例:
paywall_upsell)。 - ルール(OS バージョン、国、カスタム属性)を追加して、ユーザーを特定のオファーに振り分けます。
クライアントコード:
val offering = offerings.getCurrentOfferingForPlacement("paywall_upsell")
?: offerings.current
後でターゲティングルールを変更しても、アプリのアップデートは必要ありません。
フェーズ 4:確認
タスクを完了する前に、変更が反映されたことを確認します。
| チェック項目 | 方法 |
|---|---|
| Play に商品が存在する | Play Console -> Subscriptions に商品が Active として表示されている |
| 商品が RC にインポートされている | ダッシュボード -> Products に商品が表示されている |
| エンタイトルメントの紐付け | ダッシュボード -> Entitlements に、正しいエンタイトルメントの配下で商品が表示されている |
| オファーの設定 | ダッシュボード -> Offerings に、想定されるパッケージに商品が紐付けられている |
| 実行時の取得 | アプリを起動して awaitOfferings() を呼び出し、パッケージが解決されることを確認する |
| エンタイトルメントの有効化 | テスト購入を完了し、customerInfo.entitlements["pro"].isActive が true であることを確認する |
awaitOfferings() が想定されるパッケージに対して null を返す場合、最も一般的な原因は、オファーが Current に設定されていない、商品がパッケージに紐付けられていない、または Play で商品が反映されていないことです。
よくある間違い
- バックエンドから
monetization.subscriptionsを呼び出す。代わりに RevenueCat を使用してください。 - 商品をインポートする前にオファーを作成する。まずインポートしてから、紐付けてください。
- ペイウォール UI にハードコードした商品 ID を含める。アプリをリリースせずに商品を切り替えられるよう、パッケージ識別子を使用してください。
- オファーを Current に設定し忘れる。
offerings.currentを呼び出すクライアントには、切り替えるまで古いオファーが表示されます。