Expo プロジェクトへの Adapty React Native SDK のインストールと設定

Important

このガイドでは、Expo プロジェクトへの Adapty React Native SDK のインストールと設定について説明します。

**純粋な React Native(Expo なし)**を使用している場合は、代わりに React Native インストールガイド をご覧ください。

Adapty SDK には、React Native アプリへのシームレスな統合のための 2 つの主要モジュールが含まれています:

  • Core Adapty: Adapty がアプリで正常に機能するために必要なモジュールです。
  • AdaptyUI: このモジュールは、旧ビルダーのペイウォールに加えてフローもレンダリングします。AdaptyUI はコアモジュールと同時に自動的に有効化されます。

React Nativeアプリへのアプリ内課金の実装方法について詳しく知りたい場合は、こちらをご覧ください。

Tip

Adapty SDK を Expo アプリに統合した実際の例を見たいですか?サンプルアプリをご確認ください:

完全な実装のウォークスルーは、以下の動画でもご確認いただけます:

要件

要件バージョン
React Native0.75 以降
iOS15.0 以降
Swift6.2 以降(Xcode 26 に同梱)
Info

SDKのインストールは、Adaptyセットアップのステップ5です。アプリ内で課金が機能するようにするには、アプリをストアに接続し、Adapty ダッシュボードでプロダクト、ペイウォール、プレースメントを作成する必要があります。クイックスタートガイドでは、必要なすべての手順を説明しています。

依存関係

Adapty SDK は Android で以下の Google Play Billing Library バージョンと動作します:

Adapty SDK バージョンBilling Library バージョン
3.17.0 以降v8
3.15.0–3.15.6デフォルトは v7、別の依存関係によって引き上げられる場合は v8
Note

Billing Library のバージョンへの対応は、Google がそのバージョンで導入したすべての機能をサポートすることを意味しません。新しい Google Play の課金機能を採用する前に、Play Store のプロダクト をご確認ください。

Adapty SDKのインストール

Important

Adapty React Native SDK v4以降では、ネイティブiOS SDK(Adapty、AdaptyUI、AdaptyPlugin)をSwiftパッケージとして提供しています。ExpoプロジェクトでもCocoaPodsによるインストールは可能ですが、Swiftパッケージは動的にリンクされるため、ビルドにはダイナミックフレームワークが必要です。詳しくはAdapty SDK v4のダイナミックフレームワークを有効化するをご覧ください。

Release

常に最新バージョンのSDKをインストールすることをお勧めします。最新の安定性修正と改善が含まれています。

Important

Expo Dev Client(カスタム開発ビルド)は、Expo プロジェクトで Adapty を使用するために必要です。

Expo Go はカスタムネイティブモジュールをサポートしていないため、UI/ロジック開発用のモックモードでのみ使用できます(実際の購入および AdaptyUI/ペイウォールビルダーのレンダリングは利用不可)。

  1. Adapty SDK をインストールします:
    npx expo install react-native-adapty
    npx expo prebuild
  2. EAS またはローカルビルドを使用して、開発用アプリをビルドします:
  1. 開発サーバーを起動します:
    npx expo start --dev-client

Adapty SDK v4 でダイナミックフレームワークを有効にする

React Native SDK 4.0(フローのサポートを追加)には React Native 0.75 以降 が必要です。SDK をインストールします。

npx expo install react-native-adapty@^4.0.0

v4では、ネイティブiOS SDK(Adapty、AdaptyUI、AdaptyPlugin)をCocoaPodsのサブ依存関係ではなくSwiftパッケージとして取得します(CocoaPodsのスペックリポジトリは2026年12月に読み取り専用になります)。SwiftパッケージはExpoでexpo-build-propertiesプラグインを使って動的リンクを有効にする必要があります。app.json(またはapp.config.js)に追加してください:

{
  "expo": {
    "plugins": [
      [
        "expo-build-properties",
        {
          "ios": {
            "useFrameworks": "dynamic"
          }
        }
      ]
    ]
  }
}

次に、プラグインをインストールしてネイティブプロジェクトを再生成します:

npx expo install expo-build-properties
npx expo prebuild --clean

iOS ビルドで 'React/RCTBridge.h' file not found というエラーが発生した場合は、トラブルシューティング項目を参照してください。

完全な移行手順については、Adapty React Native SDK の v4 への移行を参照してください。

Adapty SDK の Adapty モジュールを有効化する

Public SDK Key を取得するには:

  1. Adapty ダッシュボードを開き、App settings → General に移動します。
  2. Api keys セクションで、Public SDK Key(Secret Key ではない)をコピーします。
  3. コード内の "YOUR_PUBLIC_SDK_KEY" を置き換えます。

または、Adapty CLI を使ってプログラムから取得することもできます:

npm install -g adapty
adapty auth login
adapty apps list

あるいは、直接実行する場合:

npx adapty auth login
adapty apps list
  • Adapty の初期化には必ず Public SDK key を使用してください。Secret key はサーバーサイド API 専用です。
  • SDK keys はアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。

App.tsx に以下のコードをコピーして Adapty を有効化します:


adapty.activate('YOUR_PUBLIC_SDK_KEY');
Important

activate が解決するまで、他の Adapty SDK メソッドを呼び出さないでください。完全な順序については React Native SDK の呼び出し順序 を参照してください。

次に、アプリ内でペイウォールを設定します:

Tip

開発環境でのアクティベーションエラーを回避するには、ヒントをご確認ください。

Adapty SDK の AdaptyUI モジュールを有効化する

フロー & ペイウォールビルダーを使用する予定がある場合は、AdaptyUI モジュールが必要です。コアモジュールを有効化すると自動的に有効になるため、追加の操作は不要です。

オプション設定

ログ

ログシステムの設定

Adapty はエラーやその他の重要な情報をログに記録し、状況を把握しやすくします。以下のログレベルが利用可能です。

LevelDescription
errorエラーのみがログに記録されます
warnエラーおよび重大なエラーは引き起こさないものの注意すべきSDKからのメッセージがログに記録されます
infoエラー、警告、および各種情報メッセージがログに記録されます
verbose関数呼び出し、APIクエリなど、デバッグ時に役立つ可能性のある追加情報がすべてログに記録されます

ログレベルは、Adapty の設定前または設定中にアプリ内で指定できます。

// Set log level before activation
// 'verbose' is recommended for development and the first production release
adapty.setLogLevel('verbose');

// Or set it during configuration
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  logLevel: 'verbose',
});

データポリシー

Adaptyはユーザーの個人データを明示的に送信しない限り保存しませんが、ストアや国のガイドラインに準拠するために追加のデータセキュリティポリシーを実装することができます。

IPアドレスの収集と共有を無効にする

Adaptyモジュールをアクティベートする際に、ipAddressCollectionDisabledをtrueに設定すると、ユーザーのIPアドレスの収集と共有を無効にできます。デフォルト値はfalseです。

このパラメータを使用して、ユーザーのプライバシーを強化し、地域のデータ保護規制(GDPRやCCPAなど)に準拠し、IPベースの機能がアプリに不要な場合に不必要なデータ収集を削減できます。

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  ipAddressCollectionDisabled: true,
});

広告IDの収集と共有を無効にする

Adapty モジュールを有効化する際、広告識別子の収集を無効にするには、iOS の場合は ios.idfaCollectionDisabled、Android の場合は android.adIdCollectionDisabled を true に設定してください。デフォルト値は false です。

App Store / Play Store のポリシーへの準拠、App Tracking Transparency プロンプトの表示回避、または広告 ID に基づくアトリビューションや分析がアプリで不要な場合に、このパラメータを使用してください。

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  ios: {
    idfaCollectionDisabled: true,
  },
  android: {
    adIdCollectionDisabled: true,
  },
});

AdaptyUI のメディアキャッシュ設定

デフォルトでは、AdaptyUI はパフォーマンス向上とネットワーク使用量の削減のために、画像や動画などのメディアをキャッシュします。カスタム設定を指定することで、キャッシュの動作を変更できます。

mediaCache を使用して、デフォルトのキャッシュ設定を上書きしてください:

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  mediaCache: {
    memoryStorageTotalCostLimit: 200 * 1024 * 1024, // Optional: memory cache size in bytes
    memoryStorageCountLimit: 2147483647,            // Optional: max number of items in memory
    diskStorageSizeLimit: 200 * 1024 * 1024,       // Optional: disk cache size in bytes
  },
});
パラメーター必須説明
memoryStorageTotalCostLimit任意メモリ上のキャッシュサイズ(バイト単位)。デフォルト値はプラットフォームによって異なります。
memoryStorageCountLimit任意メモリストレージのアイテム数制限。デフォルト値はプラットフォームによって異なります。
diskStorageSizeLimit任意ディスク上のファイルサイズ制限(バイト単位)。デフォルト値はプラットフォームによって異なります。

ローカルアクセスレベルを有効にする(Android)

デフォルトでは、ローカルアクセスレベルは iOS で有効、Android で無効になっています。Android でも有効にするには、localAccessLevelAllowed を true に設定してください:

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  android: {
     localAccessLevelAllowed: true,
  },
});

バックアップ復元時のデータクリア

clearDataOnBackup を true に設定すると、SDKはアプリがiCloudバックアップから復元されたことを検出し、キャッシュされたプロファイル情報、プロダクト詳細、ペイウォールなど、ローカルに保存されたすべてのSDKデータを削除します。その後、SDKはクリーンな状態で初期化されます。デフォルト値は false です。

Note

削除されるのはローカルのSDKキャッシュのみです。Appleとのトランザクション履歴およびAdaptyサーバー上のユーザーデータは変更されません。

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
   ios: {
       clearDataOnBackup: true
   },
});

Adapty アトリビューションを有効にする

Info

このパラメーターは SDK バージョン 4.1 以降で利用可能です。

Adapty アトリビューションを使用する場合は、SDK をアクティベートする際に adaptyAttributionEnabled を true に設定してください。デフォルト値は false です。このパラメーターを指定しない場合、SDK はインストールを登録せず、インストールの詳細をアプリに配信しません。SDK バージョン 4.1 未満では、Adapty アトリビューションは自動的に有効になります。

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
   adaptyAttributionEnabled: true,
});

開発環境に関するヒント

Expo Go / Expo Web 向けモックモードの設定

Expo Go および Expo Web 環境では、Adapty のネイティブモジュールにアクセスできません。ランタイムエラーを避けながら、アプリの UI やペイウォールのロジックをビルド・テストできるよう、Adapty はモックモードを提供しています。

Important

モックモードは、実際の購入をテストするためのツールではありません:

  • App Store / Google Play の購入フローを開かず、実際のトランザクションを作成しません。
  • フローや旧ビルダーのペイウォール(AdaptyUI)をレンダリングしません。
  • Adapty のネイティブモジュールは完全にバイパスされます—Xcode/Android ビルドにネイティブ SDK ファイルが存在しない場合や、無効な API キーでもエラーは発生しません。

実際の購入やペイウォールビルダーのペイウォールをテストするには、モックモードが自動的に無効になる Expo Dev Client/本番ビルドを使用してください。

デフォルトでは、SDKはExpo GoおよびWeb環境を自動的に検出し、モックモードを有効にします。モックデータをカスタマイズしたい場合を除き、設定は不要です。

モックモードが有効な場合:

  • すべてのAdaptyメソッドは、Adaptyのサーバーへのネットワークリクエストを行わずにモックデータを返します。
  • デフォルトでは、初期モックプロファイルにアクティブなサブスクリプションはありません。
  • デフォルトでは、makePurchase(...) は購入成功をシミュレートし、プレミアムアクセスを付与します。

アクティベーション時に mockConfig を使ってモックデータをカスタマイズできます。設定フォーマットとサポートされているパラメータはこちらをご覧ください。


try {
  await adapty.activate('YOUR_PUBLIC_SDK_KEY', {
    mockConfig: {
      // Customize the initial mock profile (optional)
    },
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
}

SDKのメソッドを有効化前に呼び出す必要がある場合(isActivated()やsetLogLevel()など)、activate()の前にenableMock()を使用してください。ブリッジがすでに初期化されている場合、このメソッドは何もしません。


adapty.enableMock(); // オプション: mockConfigを渡してモックデータをカスタマイズできます

// これで有効化前にメソッドを呼び出せます

await adapty.activate('YOUR_PUBLIC_SDK_KEY');

開発目的でSDKの有効化を遅らせる

Adapty は SDK のアクティベーション時に必要なユーザーデータをすべて事前取得するため、最新データへのアクセスが高速になります。

ただし、iOS シミュレーターでは開発中に認証を頻繁に求められるため、問題が生じることがあります。Adapty は StoreKit の認証フローを制御できませんが、SDK が最新のユーザーデータを取得するリクエストを遅延させることができます。

__debugDeferActivation プロパティを有効にすると、次に Adapty SDK を呼び出すまで activate の実行が保留されます。これにより、必要でない場合に認証データを求めるプロンプトが不必要に表示されるのを防げます。

この機能は開発用途のみを想定したものであり、すべてのユーザーシナリオに対応しているわけではない点にご注意ください。本番環境では、実際のデバイスは認証データを記憶しており、何度も認証を求めることはないため、アクティベーションを遅らせるべきではありません。

推奨する使用方法は以下のとおりです。

try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __debugDeferActivation: isSimulator(), // 'isSimulator' from any 3rd party library
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}

React NativeのFast RefreshにおけるSDKアクティベーションエラーのトラブルシューティング

React NativeでAdapty SDKを使って開発していると、次のエラーが発生することがあります:Adapty can only be activated once. Ensure that the SDK activation call is not made more than once.

これは、React Native のファスト リフレッシュ機能が開発中に複数のアクティベーション呼び出しをトリガーするために発生します。これを防ぐには、__ignoreActivationOnFastRefresh オプションを __DEV__(React Native の開発モードフラグ)に設定してください。

try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __ignoreActivationOnFastRefresh: __DEV__,
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}
Note

このオプションを有効にすると、SDKはすでに有効化されている場合、有効化の呼び出し全体をスキップします。そのため、有効化パラメータへの変更はファストリフレッシュ時に反映されません。新しい有効化パラメータを適用するには、アプリを完全に終了してから再起動してください。

トラブルシューティング

iOSの最小バージョンエラー

iOSビルド時に、最小iOSバージョンまたはデプロイメントターゲットに関するエラーが表示されることがあります。AdaptyはiOS 15.0以降を必要とします。

ExpoはiOSプロジェクト(Podfileを含む)をexpo prebuildの実行時に生成するため、Podfileを直接編集しないでください。代わりに、expo-build-properties設定プラグインを使用してデプロイメントターゲットを設定してください。

  1. プラグインをインストールします:

    npx expo install expo-build-properties
  2. ExpoのConfig(app.jsonまたはapp.config.js)を更新して、iOSのデプロイメントターゲットを設定します:

{
    "expo": {
        // ...other Expo config...
        "plugins": [
            [
                "expo-build-properties",
                {
                    "ios": {
                        // Adapty requires iOS 15.0+.
                        "deploymentTarget": "15.0"
                    }
                }
            ],
        ]
    }
}
  1. ネイティブ iOS プロジェクトを再生成してリビルドします:
npx expo prebuild --clean
npx expo run:ios      # or `eas build -p ios` on your CI

Android Auto Backup マニフェストの競合

Expo で複数の SDK(Adapty、AppsFlyer、expo-secure-store など)を使用していて、それぞれが Android Auto Backup を設定している場合、マニフェストのマージ競合が発生することがあります。

典型的なエラーは次のようになります: Manifest merger failed : Attribute application@fullBackupContent value=(@xml/secure_store_backup_rules) from AndroidManifest.xml:24:248-306 is also present at [io.adapty:android-sdk:3.12.0] AndroidManifest.xml:9:18-70 value=(@xml/adapty_backup_rules).

この競合を解決するには、Adapty プラグインに Android バックアップ設定を管理させる必要があります。 プロジェクトで expo-secure-store も使用している場合は、重複を避けるためにそのバックアップ設定を無効にしてください。

app.json の設定方法は以下のとおりです。

{
  "expo": {
    "plugins": [
      ["react-native-adapty", { "replaceAndroidBackupConfig": true }],
      ["expo-secure-store", { "configureAndroidBackup": false }]
    ]
  }
}

replaceAndroidBackupConfig オプションはデフォルトで false です。有効にすると、Adapty プラグインが Android のバックアップルールを管理できるようになります。 expo-secure-store を使用している場合は、警告を防ぐために "configureAndroidBackup": false を含めてください。SecureStore のバックアップ設定は Adapty によって処理されます。

Important

このセットアップは、Adapty、AppsFlyer、expo-secure-store のバックアップ要件のみに対応しています。 プロジェクト内の他のライブラリがカスタムバックアップルールを定義している場合は、手動で設定する必要があります。

'React/RCTBridge.h' file not found で iOS ビルドが失敗する場合

Adapty SDK v4 のダイナミックフレームワークを有効化すると、expo-updates、@expo/ui、または Objective-C ソースを含む別のパッケージで iOS ビルドが失敗することがあります。

error: 'React/RCTBridge.h' file not found

この問題は expo-modules-autolinking パッケージ(expo の依存パッケージ)のバグが原因です。影響を受けるバージョンは 57.0.5〜57.0.9(Expo SDK 57)および 56.0.19〜56.0.21(Expo SDK 56)で、57.0.10 および 56.0.22 でバグが修正されています。

ビルドを修正するには、expo-modules-autolinking を修正済みバージョンに更新し、ネイティブプロジェクトを再生成してください:

npm update expo-modules-autolinking
npx expo prebuild

お使いの Expo SDK 向けの修正済みバージョンがまだ利用できない場合は、代わりに React Native をソースからビルドしてください。iOS のビルド時間は長くなりますが、バグを回避できます:

{
  "expo": {
    "plugins": [
      [
        "expo-build-properties",
        {
          "ios": {
            "useFrameworks": "dynamic",
            "buildReactNativeFromSource": true
          }
        }
      ]
    ]
  }
}