純粋な React Native プロジェクトへの Adapty SDK のインストールと設定
このガイドは純粋な React Native(非 Expo)プロジェクトにのみ適用されます。 Expo を使用している場合は、代わりに Expo インストールガイドを参照してください。
Adapty SDK には、React Native アプリへシームレスに統合するための 2 つの主要モジュールが含まれています:
- Core Adapty: このモジュールは、アプリでAdaptyを正しく動作させるために必要です。
- AdaptyUI: このモジュールは、クロスプラットフォームのペイウォールをノーコードで簡単に作成できるAdapty ペイウォールビルダーを使用する場合に必要です。AdaptyUIはコアモジュールと一緒に自動的に有効になります。
Adapty SDKをモバイルアプリに実際に統合した例を見たいですか?ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを示すサンプルアプリをご覧ください。
要件
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): Swift Package Manager を有効にする を参照してください。
- Adapty SDK をインストールします(
@adapty/coreも自動的にインストールされます):# using npm npm install react-native-adapty # or using yarn yarn add react-native-adapty - iOS の場合、pods をインストールします:
cd ios && pod install
Android で React Native のバージョンが 0.73.0 より古い場合(クリックして展開)
/android/build.gradle ファイルを更新してください。kotlin-gradle-plugin:1.8.0 以降の依存関係が含まれていることを確認してください:
...
buildscript {
...
dependencies {
...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
}
}
...Adapty SDK 4.0 (beta): Swift Package Manager を有効にする
React Native SDK 4.0 — フロービルダーのサポートを追加したバージョン — はプレリリース版であり、React Native 0.75 以降が必要です。正確なバージョンを指定してインストールしてください(npm はキャレット/チルダの範囲指定ではプレリリースを解決しません):
npm install react-native-adapty@4.0.0-beta.1
# or using yarn
yarn add react-native-adapty@4.0.0-beta.1
v4 では、CocoaPods のサブ依存関係の代わりに Swift Package Manager を使用してネイティブ iOS SDK(Adapty、AdaptyUI、AdaptyPlugin)を取得します(CocoaPods のスペックリポジトリは2026年12月に読み取り専用になります)。SPM はダイナミックフレームワークを必要とするため、ios/Podfile のターゲットに以下を追加してから、pods を再インストールしてください。
use_frameworks! :linkage => :dynamic
cd ios && pod install --repo-update
以前に Adapty、AdaptyUI、または AdaptyPlugin を CocoaPods のサブ依存関係として追加していた場合は、まず Podfile から pod 'Adapty'、pod 'AdaptyUI'、pod 'AdaptyPlugin' の記述を削除してください。
デフォルトの静的リンクからダイナミックフレームワークに切り替えると、モジュラーヘッダーに未対応のライブラリと競合したり、Flipper と非互換になる場合があります。詳細は 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');
他の Adapty SDK メソッドを呼び出す前に、activate の解決を待ってください。完全な順序については React Native SDK の呼び出し順序 を参照してください。
次に、アプリ内でペイウォールを設定します:
- Adapty ペイウォールビルダーを使用する場合は、ペイウォールビルダーのクイックスタートをご覧ください。
- 独自のペイウォール UI を構築する場合は、カスタムペイウォールのクイックスタートをご覧ください。
開発環境でのアクティベーションエラーを避けるには、こちらのヒントをご参照ください。
AdaptyUI モジュールを有効化する
ペイウォールビルダーを使用する場合は、AdaptyUI モジュールが必要です。コアモジュールを有効化すると自動的に有効になるため、追加の操作は不要です。
オプション設定
ロギング
ロギングシステムのセットアップ
Adapty はエラーやその他の重要な情報をログに記録し、状況を把握するのに役立てます。以下のログレベルが利用可能です。
| Level | Description |
|---|---|
error | エラーのみがログに記録されます |
warn | エラーおよび重大なエラーは発生しないものの注意が必要なSDKからのメッセージがログに記録されます |
info | エラー、警告、およびさまざまな情報メッセージがログに記録されます |
verbose | 関数呼び出しやAPIクエリなど、デバッグ時に役立つ可能性のある追加情報がすべてログに記録されます |
| AdaptyConfigurationの前後どちらでもログレベルを設定できます: |
// 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
},
});
開発環境に関するヒント
開発目的での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
}
ローカルテスト用のモックモードを設定する
ローカル開発やテスト時には、サンドボックスの App Store/Google Play アカウントを用意しなくても済むよう、またイテレーションを高速化するために、モックモードを有効にすることができます。モックモードは Adapty のネイティブモジュールを完全にバイパスし、シミュレートされたデータを返します。
モックモードは実際の購入をテストするためのツールではありません:
- App Store / Google Play の購入フローを開きません。また、実際のトランザクションを作成しません。
- Adapty ペイウォールビルダー(AdaptyUI)で作成されたペイウォール/オンボーディングをレンダリングしません。
- Adapty のネイティブモジュールは完全にバイパスされます。Xcode/Android ビルドにネイティブ SDK ファイルが存在しない場合や、無効な API キーを使用している場合でもエラーは発生しません。
- Adapty のサーバーにはデータが送信されません。
実際の購入とペイウォールビルダーのペイウォールをテストするには、モックモードを無効にしてサンドボックスアカウントを使用してください。
モックモードを有効にするには、enableMock を true に設定します:
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
enableMock: true,
});
モックモードが有効な場合:
- すべての 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(); // Optional: pass mockConfig to customize mock data
// Now you can call methods before activation
await adapty.activate('YOUR_PUBLIC_SDK_KEY');
トラブルシューティング
iOS最小バージョンエラー
iOS最小バージョンエラーが発生した場合は、Podfileを更新してください:
-platform :ios, min_ios_version_supported
+platform :ios, '15.0'
AndroidのAuto Backupマニフェスト競合
一部のSDK(Adaptyを含む)には、独自のAndroid Auto Backup設定が含まれています。バックアップルールを定義する複数のSDKを使用している場合、Androidのマニフェストマージャーが android:fullBackupContent、android:dataExtractionRules、または android:allowBackup に関するエラーで失敗することがあります。
よくあるエラーの症状: Manifest merger failed: Attribute application@dataExtractionRules value=(@xml/your_data_extraction_rules) is also present at [com.other.sdk:library:1.0.0] value=(@xml/other_sdk_data_extraction_rules)
これらの変更は、Androidプラットフォームのディレクトリ(通常はプロジェクトの android/ フォルダー内)で行う必要があります。
この問題を解決するには、以下が必要です:
-
バックアップ関連の属性に対して、アプリの値を使用するようマニフェストマージャーに指示する。
-
AdaptyのルールとほかのSDKのルールをマージしたバックアップルールファイルを作成する。
1. マニフェストに tools 名前空間を追加する
AndroidManifest.xml ファイルのルートの <manifest> タグに tools が含まれていることを確認してください:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">
...
</manifest>
2. <application> でバックアップ属性を上書きする
同じ AndroidManifest.xml ファイルで、<application> タグを更新して、アプリが最終的な値を提供し、マニフェストマージャーにライブラリの値を置き換えるよう指示します:
<application
android:name=".App"
android:allowBackup="true"
android:fullBackupContent="@xml/sample_backup_rules"
android:dataExtractionRules="@xml/sample_data_extraction_rules"
tools:replace="android:fullBackupContent,android:dataExtractionRules">
...
</application>
いずれかのSDKが android:allowBackup も設定している場合は、tools:replace に含めてください:
tools:replace="android:allowBackup,android:fullBackupContent,android:dataExtractionRules"
3. マージしたバックアップルールファイルを作成する
AndroidプロジェクトのAdaptyのルールとほかのSDKのルールを組み合わせた res/xml/ ディレクトリにXMLファイルを作成します。AndroidはOSのバージョンによって異なるバックアップルール形式を使用するため、両方のファイルを作成することで、アプリがサポートするすべてのAndroidバージョンとの互換性が確保されます。
以下の例では、サンプルのサードパーティSDKとしてAppsFlyerを使用しています。アプリで使用しているほかのSDKのルールに置き換えるか、追加してください。
Android 12以降(新しいデータ抽出ルール形式を使用):
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<exclude domain="sharedpref" path="appsflyer-data"/>
<exclude domain="sharedpref" path="appsflyer-purchase-data"/>
<exclude domain="database" path="afpurchases.db"/>
<exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
</cloud-backup>
<device-transfer>
<exclude domain="sharedpref" path="appsflyer-data"/>
<exclude domain="sharedpref" path="appsflyer-purchase-data"/>
<exclude domain="database" path="afpurchases.db"/>
<exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
</device-transfer>
</data-extraction-rules>
Android 11以前(従来のフルバックアップコンテンツ形式を使用):
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<exclude domain="sharedpref" path="appsflyer-data"/>
<exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
Androidで別のアプリから戻ったあとに購入が失敗する
購入フローを開始するActivityに非デフォルトのlaunchModeが設定されている場合、ユーザーがGoogle Play、銀行アプリ、またはブラウザから戻ったときにAndroidがActivityを誤って再生成または再利用することがあります。その結果、購入結果が失われたり、キャンセルとして処理されたりすることがあります。
購入フローを正しく機能させるには、購入フローを開始するActivityのlaunchModeにstandardまたはsingleTopのみを使用し、その他のモードは避けてください。
AndroidManifest.xmlで、購入フローを開始するActivityがstandardまたはsingleTopに設定されていることを確認してください。
<activity
android:name=".MainActivity"
android:launchMode="standard" />
Swift 6のビルドエラー(PodfileのSWIFT_VERSIONオーバーライドが原因)
React Native アプリを iOS 向けにビルドする際、Adapty の pod ターゲットで Swift 6 のコンパイルエラーが発生することがあります。よくある症状としては、AdaptyUIBuilderLogic での @Sendable の不一致、Adapty 型の Sendable 準拠の欠如、アクター分離エラーなどが挙げられます。
Adapty の pods は s.swift_version = '6.0' を宣言しており、ビルドには Swift 6 が必要です。アプリ本体のコードは Swift 5 のままで問題ありません。Swift 6 でのビルドが必要なのは、Adapty の pod ターゲット(Adapty、AdaptyUI、AdaptyUIBuilder、AdaptyLogger、AdaptyPlugin)のみです。
最も一般的な原因は、ios/Podfile の post_install フックがすべての pod ターゲットに対して SWIFT_VERSION を上書きしていることです:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '5.9'
end
end
end
修正方法: Adapty の pod ターゲットをオーバーライドの対象から除外してください:
post_install do |installer|
installer.pods_project.targets.each do |target|
next if %w[Adapty AdaptyUI AdaptyUIBuilder AdaptyLogger AdaptyPlugin].include?(target.name)
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '5.9'
end
end
end
次に、ios/ ディレクトリから pod install を実行してリビルドしてください。
確認するには、ios/Pods/Pods.xcodeproj を開き、Adapty ポッドターゲット → Build Settings → Swift Language Version を選択します。Swift 6 になっていれば正常です。