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

Important

このガイドは純粋な React Native(非Expo)プロジェクトにのみ適用されます。 Expo を使用している場合は、代わりにExpoインストールガイドをご覧ください。

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

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

Adapty SDKをモバイルアプリに実際に統合した例を見たいですか?ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを示すサンプルアプリをご覧ください。

必要条件

必要条件バージョン
React Native0.75以降。React NativeのSPMインテグレーションは0.87以降が必要。
iOS15.0以降
Swift6.2以降(Xcode 26に同梱)
Google Play Billing LibraryAdapty React Native SDK 4.0.3よりv8
Info

Billing Libraryのバージョンとの互換性は、Adaptyがそのバージョンで導入されたすべての機能をサポートしていることを意味しません。新しいGoogle Play課金機能を採用する前に、Play StoreのProudctを参照してください。

Info

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

Adapty SDK のインストール

Release

パッケージをプロジェクトに追加します:

# using npm
npm install react-native-adapty

# or using yarn
yarn add react-native-adapty

iOSプロジェクトのセットアップ

AdaptyのネイティブiOS SDK(AdaptyAdaptyUIAdaptyPlugin)はSwiftパッケージとしてのみ公開されています。v4ではCocoaPodsによる配布が廃止されました(CocoaPodsのスペックリポジトリは2026年12月に読み取り専用になります)。どちらのオプションも同じSwiftパッケージをインストールしますが、インストールを駆動する仕組みが異なります。

  • CocoaPods(デフォルト、SDK 4.0以降): iOSプロジェクトはPodfileを維持し、React Nativeのspm_dependencyヘルパーがAdaptyのSwiftパッケージをPodsプロジェクトに追加します。Swiftパッケージは動的にリンクされるため、PodfileはダイナミックフレームワークへのDefaultへの切り替えが必要です。
  • React NativeのSPMインテグレーション(SDK 4.1以降): iOSプロジェクトはCocoaPodsを使わず、React NativeがAdaptyのPackage.swiftマニフェストからSwiftパッケージを直接解決します。React NativeはこのインテグレーションをReact Native 0.87で追加しました(プレビュー段階)。現時点では本番環境への使用は推奨されていません。

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

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

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

Tip

開発環境でのアクティベーションエラーを避けるには、ヒントを参照してください。

AdaptyUI モジュールの有効化

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

オプション設定

ロギング

ロギングシステムのセットアップ

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

LevelDescription
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 モジュールを有効化する際に、ipAddressCollectionDisabledtrue に設定すると、ユーザーのIPアドレスの収集と共有を無効にできます。デフォルト値は false です。

このパラメーターを使用すると、ユーザーのプライバシー保護、地域のデータ保護規制(GDPRやCCPAなど)への準拠、またはIPベースの機能がアプリに不要な場合の不必要なデータ収集の削減に役立ちます。

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

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

Adapty モジュールをアクティベートする際、広告識別子の収集を無効にするには、iOS の場合は ios.idfaCollectionDisabled、Android の場合は android.adIdCollectionDisabledtrue に設定してください。デフォルト値は 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でも有効にするには、localAccessLevelAllowedtrueに設定します:

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

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

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

Note

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

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

Adapty Attributionを有効にする

Info

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

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

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
   adaptyAttributionEnabled: 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
}
Note

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

ローカルテスト用モックモードの設定

ローカル開発・テスト時には、サンドボックスの App Store/Google Play アカウントを使わずにすむモックモードを有効にすることで、開発サイクルを高速化できます。モックモードでは Adapty のネイティブモジュールを完全にバイパスし、シミュレートされたデータを返します。

Important

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

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

実際の購入やペイウォールビルダーのペイウォールをテストするには、モックモードを無効にしてサンドボックスアカウントを使用してください。

モックモードを有効にするには、enableMocktrue に設定します。

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:fullBackupContentandroid: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)

Note

これらの変更は、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のルールをres/xml/ディレクトリにXMLファイルを作成し、AdaptyのルールをほかのSDKのルールと組み合わせます。AndroidはOSのバージョンによって異なるバックアップルール形式を使用するため、両方のファイルを作成することで、アプリがサポートするすべてのAndroidバージョンとの互換性が確保されます。

Note

以下の例では、サードパーティ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 に standard または singleTop の起動モードのみを使用し、それ以外のモードは避けてください。

AndroidManifest.xml で、購入フローを開始する Activity が standard または singleTop に設定されていることを確認してください:

<activity
    android:name=".MainActivity"
    android:launchMode="standard" />

React Native 0.73未満でのKotlin Gradleプラグインバージョンエラー

React Native 0.73.0より古いバージョンでは、Kotlin Gradle プラグインのバージョンが原因で Android ビルドが失敗します。/android/build.gradle ファイルを更新してください。kotlin-gradle-plugin:1.8.0 以降の依存関係があることを確認してください。

...
buildscript {
  ...
  dependencies {
    ...
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
  }
}
...

Podfile の SWIFT_VERSION オーバーライドによる Swift 6 ビルドエラー

Note

これは SDK 3.x に適用されます。このバージョンでは、iOS 用のネイティブ SDK が CocoaPods としてインストールされます。SDK 4.0 以降では Swift パッケージとしてインストールされるため、post_install 内での SWIFT_VERSION のオーバーライドは適用されなくなります。

iOS 向けに React Native アプリをビルドする際、Adapty の Pod ターゲットで Swift 6 のコンパイルエラーが発生することがあります。典型的な症状としては、AdaptyUIBuilderLogic での @Sendable の不一致、Adapty 型に対する Sendable 適合の欠如、またはアクター分離エラーなどが挙げられます。

Adapty の pods は s.swift_version = '6.0' を宣言しており、ビルドに Swift 6 が必要です。自分のアプリコードは Swift 5 のままで構いません — Adapty の pod ターゲット(AdaptyAdaptyUIAdaptyUIBuilderAdaptyLoggerAdaptyPlugin)だけが Swift 6 でビルドされる必要があります。

最も一般的な原因は、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 SettingsSwift Language Version を選択します。Swift 6 になっていれば正常です。