RevenueCat Offerings とは
Overview
Offering(オファリング) は、RevenueCatにおける「ユーザーに提示する販売プランのセット」
アプリ内で表示する月額・年額などの課金商品(Product)を、ひとつのまとまりとして構成する。
Offerings は RevenueCat の Paywalls、Experiments、Targeting 機能と連携することで、強力な表示コントロールが可能になる。
ヒント
Offeringsを設定した場合、アプリのアップデートを必要とせずにユーザーに表示する商品をコントロールすることができる。
様々な商品構成に対応できる動的な支払い画面を構築することで、リモートアップデートの柔軟性を最大限に高めることができる。
🧩 Offerings の構造
Offering
- 「プランの束」そのもの
- 1つのOfferingの中に複数の Package を持つことができる
defaultOffering は SDK のgetOfferings()で取得される「current offering」として使われる- 複数の Offering を用途や対象ごとに使い分けることができる(例:A/Bテスト、国・地域別プラン、プロモーション限定プランなど)
- SDKでは
offerings.currentが自動的にdefaultOffering を指す getOfferings()で取得した全Offeringを列挙し、offering[offeringId].availablePackagesで各プランにアクセス可能
Package
- 1つの課金プラン(例:月額、年額、買い切りなど)を表現
- 各プラットフォーム(iOS / Android / Web)で同等のProduct IDをまとめる
monthly,annual,lifetimeなどのプリセットIDがあるが、customIDも設定可能- パッケージIDは
monthly,annual,lifetimeなどのプリセット(予約済み)を使うとSDKで優先表示される - 一方で、
basic_annual,premium_monthlyなどのカスタムIDも利用可能 - 予約済みIDは1つのOffering内で重複使用できないため、同種プランが複数ある場合は片方をカスタムIDにする必要がある
Product
- App Store や Google Play に登録されたアイテム
- Packageに追加することで、アプリでの表示・購入が可能になる
Offering の設定手順(RevenueCatダッシュボード)
- Offerings タブを開く
- 「New」ボタンで Offering を作成(例:ID =
default) - Offering 内に Package を追加(
monthly,annualなど) - 各 Package に対応する Product(ストアで登録済)を紐付け
- 保存
🧠 よくある構成例
| Offering ID | Package ID | Product ID (例) | 説明 |
|---|---|---|---|
| default | monthly | com.example.monthly | 月額プラン |
| default | annual | com.example.annual | 年額プラン |
| default | lifetime | com.example.lifetime | 買い切り |
| default | premium_annual | com.example.premium_annual | プレミアム年額プラン |
💡 Tips
getOfferings()を使えば、default Offering の構成をアプリ側で取得可能- Offering を切り替えることで、アプリをアップデートせずに UI を変更可能
- Entitlement に紐付いていない Product も Offering に入れることが可能(例:消耗型商品)
🔍 SDKでの Offering 利用例
パッケージ一覧を取得して画面に表示
Flutterの場合の例:
final offerings = await Purchases.getOfferings();
final current = offerings.current;
if (current != null) {
final packages = current.availablePackages;
for (var pkg in packages) {
print("📦 ID: ${pkg.identifier}");
print("💰 値段: ${pkg.product.priceString}");
}
}
複数の Offering に対応する(キャンペーンや地域別など)
final offerings = await Purchases.getOfferings();
final jpOffering = offerings.getOffering("jp_campaign");
final usOffering = offerings.getOffering("us_default");
🔗 関連機能
| 機能名 | 説明 |
|---|---|
| Paywalls | RevenueCatでのUI表示機能。Offeringと1:1で対応。 |
| Experiments | 複数の Offering をA/Bテストできる |
| Targeting | ユーザー属性に応じて表示Offeringを切り替えられる |