メインコンテンツまでスキップ

RevenueCat Offerings とは

Overview

Offering(オファリング) は、RevenueCatにおける「ユーザーに提示する販売プランのセット」
アプリ内で表示する月額・年額などの課金商品(Product)を、ひとつのまとまりとして構成する。
Offerings は RevenueCat の Paywalls、Experiments、Targeting 機能と連携することで、強力な表示コントロールが可能になる。

ヒント

Offeringsを設定した場合、アプリのアップデートを必要とせずにユーザーに表示する商品をコントロールすることができる。
様々な商品構成に対応できる動的な支払い画面を構築することで、リモートアップデートの柔軟性を最大限に高めることができる。

🧩 Offerings の構造

Offering

  • 「プランの束」そのもの
  • 1つのOfferingの中に複数の Package を持つことができる
  • default Offering は SDK の getOfferings() で取得される「current offering」として使われる
  • 複数の Offering を用途や対象ごとに使い分けることができる(例:A/Bテスト、国・地域別プラン、プロモーション限定プランなど)
  • SDKでは offerings.current が自動的に default Offering を指す
  • getOfferings() で取得した全Offeringを列挙し、offering[offeringId].availablePackages で各プランにアクセス可能

Package

  • 1つの課金プラン(例:月額、年額、買い切りなど)を表現
  • 各プラットフォーム(iOS / Android / Web)で同等のProduct IDをまとめる
  • monthly, annual, lifetime などのプリセットIDがあるが、custom IDも設定可能
  • パッケージIDは monthly, annual, lifetime などのプリセット(予約済み)を使うとSDKで優先表示される
  • 一方で、basic_annual, premium_monthly などのカスタムIDも利用可能
  • 予約済みIDは1つのOffering内で重複使用できないため、同種プランが複数ある場合は片方をカスタムIDにする必要がある

Product

  • App Store や Google Play に登録されたアイテム
  • Packageに追加することで、アプリでの表示・購入が可能になる

Offering の設定手順(RevenueCatダッシュボード)

  1. Offerings タブを開く
  2. 「New」ボタンで Offering を作成(例:ID = default
  3. Offering 内に Package を追加(monthly, annual など)
  4. 各 Package に対応する Product(ストアで登録済)を紐付け
  5. 保存

🧠 よくある構成例

Offering IDPackage IDProduct ID (例)説明
defaultmonthlycom.example.monthly月額プラン
defaultannualcom.example.annual年額プラン
defaultlifetimecom.example.lifetime買い切り
defaultpremium_annualcom.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");

🔗 関連機能

機能名説明
PaywallsRevenueCatでのUI表示機能。Offeringと1:1で対応。
Experiments複数の Offering をA/Bテストできる
Targetingユーザー属性に応じて表示Offeringを切り替えられる

Resource