Expo プロジェクトへの Adapty React Native SDK のインストールと設定
このガイドでは、Expo プロジェクトへの Adapty React Native SDK のインストールと設定について説明します。
**Pure React Native(Expo なし)**を使用している場合は、代わりに React Native インストールガイド をご覧ください。
Adapty SDK には、React Native アプリにシームレスに統合するための 2 つの主要モジュールが含まれています:
- Core Adapty: このモジュールは、アプリで Adapty が正常に動作するために必要です。
- AdaptyUI: このモジュールは、クロスプラットフォームのペイウォールを簡単に作成できるノーコードツール「Adapty ペイウォールビルダー」を使用する場合に必要です。AdaptyUI はコアモジュールと同時に自動的に有効化されます。
React Native アプリへのアプリ内課金の実装方法について詳しく知りたい場合は、こちらのチュートリアルをご覧ください。
Adapty SDKをExpoアプリに統合する実際の例を見てみたいですか?サンプルアプリをご確認ください:
- Expo devビルドサンプル:実際の購入やペイウォールビルダーを含む全機能対応
- Expo Go & Webサンプル:モックモードでのテスト用
完全な実装のウォークスルーは、以下の動画でもご覧いただけます:
要件
Adapty React Native SDK は iOS 15.0+ が必要です。
iOS 向けにビルドするには Swift 6.0 以降が必要です。キッズモードには Swift 6.1 以降が必要です。
SDK v3.17 以降、Adapty SDK はデフォルトで Google Play Billing Library v8.0.0 を使用します。
SDKのインストールは、Adaptyセットアップのステップ5です。アプリ内で課金が機能するようにするには、アプリをストアに接続し、Adapty ダッシュボードでプロダクト、ペイウォール、プレースメントを作成する必要があります。クイックスタートガイドでは、必要なすべての手順を説明しています。
Adapty SDK のインストール
v4 以降、Adapty React Native SDK はネイティブ依存関係の CocoaPods インストールをサポートしなくなりました。v4 以降(フローBuilder 向け)が必要な場合は、以下の Adapty SDK 4.0 (beta): enable Swift Package Manager をご覧ください。
Expo Dev Client(カスタム開発ビルド)は、ExpoプロジェクトでAdaptyを使用するために必要です。
Expo Goはカスタムネイティブモジュールをサポートしていないため、UI/ロジック開発用のモックモードでのみ使用できます(実際の購入やAdaptyUI/ペイウォールビルダーのレンダリングはありません)。
- Adapty SDKをインストールします(
@adapty/coreも自動的にインストールされます):npx expo install react-native-adapty npx expo prebuild - EASまたはローカルビルドを使用して、開発用アプリをビルドします:
- 開発サーバーを起動します:
npx expo start --dev-client
Adapty SDK 4.0 (beta): Swift Package Manager を有効にする
React Native SDK 4.0 — Flow Builder サポートを追加 — はプレリリース版であり、React Native 0.75 以降が必要です。正確なバージョンを指定してインストールしてください(npm はキャレット/チルダの範囲でプレリリース版を解決しません):
npx expo install react-native-adapty@4.0.0-beta.1
v4では、CocoaPodsのサブ依存関係の代わりに、Swift Package Manager経由でネイティブiOS SDK(Adapty、AdaptyUI、AdaptyPlugin)を取得します(CocoaPodsのスペックリポジトリは2026年12月に読み取り専用になります)。SPMにはダイナミックフレームワークが必要で、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
完全な移行手順については、Adapty React Native SDK を v4 に移行するを参照してください。
Adapty SDK の Adapty モジュールを有効化する
Public SDK Key を取得するには:
- Adapty ダッシュボードを開き、App settings → General に移動します。
- Api keys セクションで、Public SDK Key(Secret Key ではない)をコピーします。
- コード内の
"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');
activate が解決するまで、他の Adapty SDK メソッドを呼び出さないでください。完全な順序については React Native SDK の呼び出し順序 を参照してください。
次に、アプリ内でペイウォールを設定します:
- Adapty ペイウォールビルダーを使用する場合は、ペイウォールビルダーのクイックスタートを参照してください。
- 独自のペイウォール UI を構築する場合は、カスタムペイウォールのクイックスタートを参照してください。
開発環境でのアクティベーションエラーを回避するには、こちらのヒントを参照してください。
AdaptyUI モジュールを有効化する
ペイウォールビルダーを使用する場合は、AdaptyUI モジュールが必要です。コアモジュールを有効化すると自動的に有効化されるため、追加の操作は不要です。
オプション設定
ログ
ログシステムの設定
Adapty はエラーやその他の重要な情報をログに記録し、状況を把握しやすくします。以下のログレベルが利用可能です。
| Level | Description |
|---|---|
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 です。
削除されるのはローカルのSDKキャッシュのみです。Appleとのトランザクション履歴およびAdaptyサーバー上のユーザーデータは変更されません。
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
ios: {
clearDataOnBackup: true
},
});
開発環境に関するヒント
Expo Go / Expo Web 向けモックモードの設定
Expo Go および Expo Web 環境では、Adapty のネイティブモジュールにアクセスできません。ランタイムエラーを避けながら、アプリの UI やペイウォールのロジックをビルド・テストできるよう、Adapty はモックモードを提供しています。
モックモードは、実際の購入をテストするためのツールではありません:
- App Store / Google Play の購入フローを開きません。また、実際のトランザクションを作成しません。
- Adapty ペイウォールビルダー(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
}
トラブルシューティング
iOSの最小バージョンエラー
iOSビルド時に、最小iOSバージョンまたはデプロイメントターゲットに関するエラーが表示されることがあります。AdaptyはiOS 15.0以降を必要とします。
ExpoはiOSプロジェクト(Podfileを含む)をexpo prebuildの実行時に生成するため、Podfileを直接編集しないでください。代わりに、expo-build-properties設定プラグインを使用してデプロイメントターゲットを設定してください。
-
プラグインをインストールします:
npx expo install expo-build-properties -
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"
}
}
],
]
}
}
- ネイティブ 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 によって処理されます。
このセットアップは、Adapty、AppsFlyer、および expo-secure-store のバックアップ要件にのみ対応しています。 プロジェクト内の他のライブラリがカスタムバックアップルールを定義している場合は、手動で設定する必要があります。