> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# RevenueCat 購入のセットアップ

RevenueCat プロジェクトを作成し、App Store と Play のプロダクトをリンクし、購入を検証する SDK キーとサーバーシークレットを配線します。

## 初心者向けのウォークスルー

存在理由:Apple と Google はアプリ内のデジタル購入を自社の課金経由に限ることを要求しており——Stripe Checkout は不可——キットはその境界を強制します。RevenueCat は両方のストアの上に載るため、1 つの統合で iOS と Android をカバーします:レシート、サブスクリプション、復元を追跡し、サーバーは RevenueCat にワークスペースが支払ったかを尋ねます。

前提条件:モバイルアカウントガイドの Apple Developer Program(年額 99 ドル)と Google Play Console(25 ドル 1 回)のアカウント——RevenueCat がリンクする前にストアプロダクトが存在する必要があります——加えて実際にテストするための EAS 開発ビルド。Expo Go はネイティブ購入モジュールをまったく実行できないためです。RevenueCat の無料枠はテストをカバーします。プロダクトが公開されるまでは何も課金されません。

用語メモ:RevenueCat プロジェクトはストアにリンクしたアプリを保持します。プロダクトは RevenueCat 内にミラーされるストアアイテムです。エンタイトルメントはサブスクリプションがアクティブな間 RevenueCat が付与するフラグで、デフォルトは `pro` です。オファリングはプロダクトをアプリが提示するペイウォールに束ねます。公開 SDK キーはモバイル env に入り、シークレット API キーと webhook 認証はサーバーサイドに留まります。

作成するもの:1 つのプロジェクト、2 つのストアリンクアプリ、プロダクト、1 つのエンタイトルメント、1 つのオファリング——約 1 時間で、そのほとんどはストアプロダクトのセットアップ待ちです。

[モバイルアカウントを作成する](https://supastack.dev/ja/docs/mobile/external-accounts.md)

[開発クライアントをビルドする](https://supastack.dev/ja/docs/mobile/eas-setup.md)


## RevenueCat アカウントとプロジェクトを作成する

1. [app.revenuecat.com](https://app.revenuecat.com) → サインアップし、製品名でプロジェクトを作成します。

期待される結果:Apps、Products、Entitlements、Offerings、API keys のタブを持つ空のプロジェクトダッシュボード——次のセクションが順に埋めていきます。


## ストアプロダクトを作成し、両アプリをリンクする

ストア側のプロダクトは RevenueCat が参照する前に存在する必要があります。iOS:[appstoreconnect.apple.com](https://appstoreconnect.apple.com) → My Apps → `ios.bundleIdentifier` でアプリレコードを作成 → In-App Purchases または Subscriptions → 販売予定のサブスクリプションプロダクトを作成(テスト中はドラフトのままで構いません)。Android:[play.google.com/console](https://play.google.com/console) → アプリを作成 → Monetize → Products → Subscriptions(またはアプリ内プロダクト)。

次に RevenueCat 内で両方をリンクします:Apps → New app。iOS は App Store を選び、バンドル ID を入力し、フォームが求める App Store Connect 認証情報を提供します——各フィールドについて RevenueCat 自身のセットアップドキュメントにリンクしています。Android は Play Store を選び、パッケージ名を入力し、Play サービスアカウント JSON をアップロードします——リンクされたドキュメントが Google Cloud での作成を案内します。

期待される結果:両アプリがプロジェクト下にリストされ、ストアコンソールにプロダクトが存在しています——この段階ではドラフト状態で構いません。


## プロダクト、エンタイトルメント、オファリング

1. Products → New:ストアプロダクトごとに 1 つの RevenueCat プロダクトを作成し、対応する App Store または Play のプロダクト ID を付けます——ID はコンソールと正確に一致する必要があります。

2. Entitlements → New:`REVENUECAT_ENTITLEMENT_ID` に合わせた名前——キットのデフォルトは `pro`——を付け、それを付与するプロダクトを紐付けます。

3. Offerings → New:オファリングを作成し、プロダクトを指すパッケージを追加し、Current にマークします——アプリはペイウォールを描画するときに `offerings.current` を読みます。

`REVENUECAT_ENTITLEMENT_KEY` はデフォルトの `ai.reference-task` のままにしてください:これはキット内部の台帳キー——同梱の Web プランが付与するのと同じキー——で、RevenueCat のアクセスはその下に書き込まれます。製品のプランキーが変わるときだけ名前を変更します。


## キーをコピーし、webhook を登録する

Project → API keys に以下の 3 種類がリストされます。公開のプラットフォーム別 SDK キー(iOS は `appl_…`、Android は `goog_…`)は `apps/mobile/.env.local` に入ります——アプリを識別するもので課金権限は持たず、`EXPO_PUBLIC_` プレフィックスはこれらに正しいものです。

シークレット API キー(`sk_…`、v1 キー)と webhook 認証は `apps/web/.env.local` のサーバー専用です——`EXPO_PUBLIC_` には入れず、コミットもしません。サーバーはシークレットキーで RevenueCat のサブスクライバー API を呼び、各ワークスペースの購入状態を検証します。

Webhook:RevenueCat → Integrations → Webhooks → URL に `{APP_URL}/api/billing/webhook/revenuecat` を設定し、Authorization ヘッダー値——あなたが考案する任意の長いランダム文字列——を設定し、まったく同じ文字列を `REVENUECAT_WEBHOOK_AUTHORIZATION` に入れます。キットはヘッダーを逐語的に比較し、それ以外を拒否するため、更新・キャンセル・返金が次のアプリ起動を待たずにサーバーに届きます。

サンドボックス購入は本番以外では自動的に受け入れられます。本番 env の `REVENUECAT_ALLOW_SANDBOX=true` は起動時に拒否されるため、公開後は未設定のままにしてください。

```
# apps/mobile/.env.local
EXPO_PUBLIC_MOBILE_PURCHASES_PROVIDER=revenuecat
EXPO_PUBLIC_REVENUECAT_IOS_API_KEY=appl_…
EXPO_PUBLIC_REVENUECAT_ANDROID_API_KEY=goog_…

# apps/web/.env.local — server side
MOBILE_PURCHASES_PROVIDER=revenuecat
REVENUECAT_SECRET_API_KEY=sk_…
REVENUECAT_WEBHOOK_AUTHORIZATION=<the exact Authorization value set on the webhook>
REVENUECAT_ENTITLEMENT_ID=pro
REVENUECAT_ENTITLEMENT_KEY=ai.reference-task
```


## サンドボックス購入で確認する

購入は開発または本番ビルド内でのみ実行されます——Expo Go にはネイティブモジュールが完全にないため、この手順は `eas build --profile development` が開発クライアントを生成済みであることを前提とします(EAS ガイドがそれをビルドします)。

1. 開発ビルドをサンドボックスアカウントにサインインしたデバイスまたはシミュレーターにインストールします:iOS は App Store Connect → Users and Access → Sandbox Testers、Android は Play Console → license testing。

2. アプリでペイウォールを開き、サンドボックスアカウントで購入します。期待される結果:購入がサンドボックスで完了し——実際の課金なし——購入の復元が機能し、ワークスペースのエンタイトルメントがアクティブと表示され、`ai.reference-task` キーの下にサーバーサイドで記録されます。

よくある失敗:空のペイウォールはオファリングが Current でないかプロダクトが未リンクであることを意味します。デバイスでの購入失敗はストアプロダクトがまだドラフトか、間違ったサンドボックスアカウントでサインインしていることを意味します。反転しないエンタイトルメントは `MOBILE_PURCHASES_PROVIDER`/`EXPO_PUBLIC_MOBILE_PURCHASES_PROVIDER` がオフか、webhook Authorization が不一致であることを意味します——RevenueCat のダッシュボードが各 webhook 配信のステータスを一覧します。

[デバイスでビルドして検証する](https://supastack.dev/ja/docs/mobile/builds.md)

[Web チェックアウトは代わりに Stripe を使用](https://supastack.dev/ja/docs/web/stripe-payments.md)


設定を続けるには、[ビルドと端末検証](https://supastack.dev/ja/docs/mobile/builds.md)をご覧ください。


## 次へ

[ビルドと端末検証](https://supastack.dev/ja/docs/mobile/builds.md)
