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 を使用します。
Billing Library のバージョンとの互換性は、Google がそのバージョンで導入したすべての機能を Adapty がサポートすることを意味しません。新しい Google Play の課金機能を導入する前に、Play Store のプロダクトをご確認ください。
SDKのインストールは、Adaptyセットアップのステップ5です。アプリ内で課金が機能するようにするには、アプリをストアに接続し、Adapty ダッシュボードでプロダクト、ペイウォール、プレースメントを作成する必要があります。クイックスタートガイドでは、必要なすべての手順を説明しています。
Adapty SDK のインストール
v4 以降、Adapty React Native SDK はネイティブ依存関係の CocoaPods インストールをサポートしなくなりました。v4 以降(フロービルダー向け)が必要な場合は、代わりに以下の Adapty SDK 4.0: Swift Package Manager を有効にする を参照してください。
Expo Dev Client(カスタム開発ビルド)は、Expo プロジェクトで Adapty を使用するために必要です。
Expo Go はカスタムネイティブモジュールをサポートしていないため、UI/ロジック開発用のモックモードでのみ使用できます(実際の購入および AdaptyUI/ペイウォールビルダーのレンダリングは利用不可)。
- Adapty SDK をインストールします:
npx expo install react-native-adapty npx expo prebuild - EAS またはローカルビルドを使用して、開発用アプリをビルドします:
- 開発サーバーを起動します:
npx expo start --dev-client
Adapty SDK 4.0: Swift Package Manager を有効にする
React Native SDK 4.0 — フローBuilder サポートを追加 — は React Native 0.75 以降 が必要です。SDK をインストールします:
npx expo install react-native-adapty@^4.0.0
v4はCocoaPodsのサブ依存関係の代わりに、Swift Package Manager経由でネイティブiOS SDK(Adapty、AdaptyUI、AdaptyPlugin)を取得します(CocoaPodsのspecリポジトリは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
iOS ビルドで 'React/RCTBridge.h' file not found が発生した場合は、トラブルシューティング項目を参照してください。
完全な移行手順については、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 のバックアップ要件にのみ対応しています。 プロジェクト内の他のライブラリがカスタムバックアップルールを定義している場合は、手動で設定する必要があります。
'React/RCTBridge.h' file not found で iOS ビルドが失敗する
Adapty SDK 4.0 で動的フレームワークを有効化すると、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
}
}
]
]
}
}