---
title: "純粋な React Native プロジェクトへの Adapty SDK のインストールと設定"
description: "サブスクリプションアプリ向けに React Native で Adapty SDK をインストールするステップバイステップガイド。"
---

:::important
このガイドは**純粋な React Native（非 Expo）プロジェクト**にのみ適用されます。
**Expo** を使用している場合は、代わりに [Expo インストールガイド](sdk-installation-react-native-expo)に従ってください。
:::

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

- **Core Adapty**: Adapty をアプリで正常に動作させるために必要なモジュールです。
- **AdaptyUI**: クロスプラットフォームのペイウォールを簡単に作成できるノーコードツール [Adapty Paywall Builder](adapty-paywall-builder) を使用する場合に必要なモジュールです。AdaptyUI はコアモジュールと同時に自動的に有効化されます。

:::tip
Adapty SDK がモバイルアプリにどのように統合されているかの実例を見たいですか？ペイウォールの表示、購入、その他の基本機能を含む完全なセットアップを示す[サンプルアプリ](https://github.com/adaptyteam/AdaptySDK-React-Native/tree/master/examples)をご確認ください。
:::

## 要件 \{#requirements\}

Adapty React Native SDK は iOS 13.0 以降をサポートしていますが、[Adapty ペイウォールビルダー](adapty-paywall-builder)で作成したペイウォールを使用するには iOS 15.0 以降が必要です。

:::info
SDK v3.17 以降、Adapty SDK はデフォルトで Google Play Billing Library v8.0.0 を使用します。
:::

---
no_index: true
---
import Callout from '../../../components/Callout.astro';

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

## Adapty SDK のインストール \{#install-adapty-sdk\}

[![Release](https://img.shields.io/github/v/release/adaptyteam/AdaptySDK-React-Native.svg?style=flat&logo=react)](https://github.com/adaptyteam/AdaptySDK-React-Native/releases)

1. Adapty SDK をインストールします（`@adapty/core` も自動的にインストールされます）:
   ```sh showLineNumbers title="Shell"
   # using npm
   npm install react-native-adapty

   # or using yarn
   yarn add react-native-adapty
   ```
2. iOS の場合、pods をインストールします:
   ```sh showLineNumbers title="Shell"
   cd ios && pod install
   ```

<details>
   <summary>Android で React Native のバージョンが 0.73.0 より古い場合（クリックして展開）</summary>

`/android/build.gradle` ファイルを更新してください。`kotlin-gradle-plugin:1.8.0` 以降の依存関係があることを確認してください。

   ```groovy showLineNumbers title="/android/build.gradle"
   ...
   buildscript {
     ...
     dependencies {
       ...
       classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
     }
   }
   ...
   ```

</details>

## Adapty SDK の Adapty モジュールを有効化する \{#activate-adapty-module-of-adapty-sdk\}

**Public SDK Key** を取得するには：

1. Adapty ダッシュボードを開き、[**App settings → General**](https://app.adapty.io/settings/general) に移動します。
2. **Api keys** セクションから **Public SDK Key**（Secret Key ではない方）をコピーします。
3. コード内の `"YOUR_PUBLIC_SDK_KEY"` を置き換えます。

:::important

- Adapty の初期化には必ず **Public SDK key** を使用してください。**Secret key** は[サーバーサイド API](getting-started-with-server-side-api) 専用です。
- **SDK keys** はアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。
:::

Adapty を有効化するには、以下のコードを `App.tsx` にコピーしてください。

```typescript showLineNumbers title="App.tsx"

adapty.activate('YOUR_PUBLIC_SDK_KEY');
```

:::important
他の Adapty SDK メソッドを呼び出す前に、`activate` が完了するまで待機してください。完全なシーケンスについては、[React Native SDK の呼び出し順序](react-native-sdk-call-order)を参照してください。
:::

次にアプリにペイウォールを設定します。

- [Adapty Paywall Builder](adapty-paywall-builder) を使用する場合は、[ペイウォールビルダーのクイックスタート](react-native-quickstart-paywalls)に従ってください。
- 独自のペイウォール UI を構築する場合は、[カスタムペイウォールのクイックスタート](react-native-quickstart-manual)を参照してください。

:::tip
開発環境での有効化エラーを回避するには、[ヒント](#development-environment-tips)を参照してください。
:::

## Adapty SDK の AdaptyUI モジュールを有効化する \{#activate-adaptyui-module-of-adapty-sdk\}

[ペイウォールビルダー](adapty-paywall-builder)を使用する予定がある場合は、AdaptyUI モジュールが必要です。コアモジュールを有効化すると自動的に有効化されるため、追加の操作は必要ありません。

## オプションの設定 \{#optional-setup\}

### ロギング \{#logging\}

#### ロギングシステムのセットアップ \{#set-up-the-logging-system\}

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

| レベル     | 説明                                                         |
| ---------- | ------------------------------------------------------------ |
| `error`    | エラーのみがログに記録されます                                |
| `warn`     | エラーと、致命的なエラーを引き起こさないものの注意が必要な SDK からのメッセージがログに記録されます |
| `info`     | エラー、警告、各種情報メッセージがログに記録されます |
| `verbose`  | 関数呼び出し、API クエリなど、デバッグに役立つ追加情報がログに記録されます |

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

```typescript showLineNumbers title="App.tsx"
// 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',
});
```

### データポリシー \{#data-policies\}

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

#### IP アドレスの収集と共有を無効にする \{#disable-ip-address-collection-and-sharing\}

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

このパラメーターは、ユーザープライバシーの強化、地域のデータ保護規制（GDPR や CCPA など）への準拠、または IP ベースの機能がアプリに必要ない場合の不要なデータ収集の削減に使用してください。

```typescript showLineNumbers title="App.tsx"
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  ipAddressCollectionDisabled: true,
});
```

#### 広告 ID の収集と共有を無効にする \{#disable-advertising-id-collection-and-sharing\}

Adapty モジュールを有効化する際に、`ios.idfaCollectionDisabled`（iOS）または `android.adIdCollectionDisabled`（Android）を `true` に設定することで、広告識別子の収集を無効にできます。デフォルト値は `false` です。

App Store/Play Store のポリシーに準拠する場合、App Tracking Transparency のプロンプトをトリガーしないようにする場合、またはアプリが広告 ID に基づくアトリビューションやアナリティクスを必要としない場合に、このパラメーターを使用してください。

```typescript showLineNumbers title="App.tsx"
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  ios: {
    idfaCollectionDisabled: true,
  },
  android: {
    adIdCollectionDisabled: true,
  },
});
```

#### AdaptyUI のメディアキャッシュ設定をセットアップする \{#set-up-media-cache-configuration-for-adaptyui\}

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

`mediaCache` を使用してデフォルトのキャッシュ設定を上書きします。

```typescript
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） \{#enable-local-access-levels-android\}

デフォルトでは、[ローカルアクセスレベル](local-access-levels)は iOS で有効、Android で無効になっています。Android でも有効にするには、`localAccessLevelAllowed` を `true` に設定します。

```typescript showLineNumbers title="App.tsx"
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  android: {
     localAccessLevelAllowed: true,
  },
});
```

### バックアップ復元時のデータクリア \{#clear-data-on-backup-restore\}

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

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

```typescript showLineNumbers title="App.tsx"
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
   ios: {
      clearDataOnBackup: true
   },
});
```

## 開発環境のヒント \{#development-environment-tips\}

#### 開発目的で SDK の有効化を遅延させる \{#delay-sdk-activation-for-development-purposes\}

Adapty は SDK 有効化時に必要なユーザーデータをすべて事前取得し、新鮮なデータへの迅速なアクセスを可能にします。

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

`__debugDeferActivation` プロパティを有効にすると、次の Adapty SDK 呼び出しが行われるまで activate 呼び出しが保留されます。これにより、認証データが不要な場合の不要な認証プロンプトを防止できます。

**この機能は開発専用**であり、すべての潜在的なユーザーシナリオをカバーするわけではないことに注意してください。本番環境では有効化を遅延させるべきではありません。実際のデバイスは通常、認証データを記憶しており、繰り返し認証情報を求めることはありません。

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

```typescript showLineNumbers title="Typescript"
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 有効化エラーのトラブルシューティング \{#troubleshoot-sdk-activation-errors-on-react-natives-fast-refresh\}

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

これは、React Native の fast refresh 機能が開発中に複数の有効化呼び出しをトリガーするために発生します。これを防ぐには、`__ignoreActivationOnFastRefresh` オプションを `__DEV__`（React Native の開発モードフラグ）に設定します。

```typescript showLineNumbers title="Typescript"
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
}
```

#### ローカルテスト用のモックモードをセットアップする \{#set-up-mock-mode-for-local-testing\}

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

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

- App Store / Google Play の購入フローを**開きません**。また、実際のトランザクションを**作成しません**。
- **Adapty Paywall Builder（AdaptyUI）**で作成したペイウォール/オンボーディングを**レンダリングしません**。
- Adapty のネイティブモジュールは**完全にバイパス**されます。Xcode/Android ビルドにネイティブ SDK ファイルがなくても、無効な API キーでもエラーは発生しません。
- Adapty のサーバーにデータは送信されません。

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

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

```typescript showLineNumbers title="App.tsx"
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  enableMock: true,
});
```

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

有効化時に `mockConfig` を使用してモックデータをカスタマイズできます。設定フォーマットとサポートされているパラメーターは[こちら](https://react-native.adapty.io/interfaces/adaptymockconfig)を参照してください。

```typescript showLineNumbers title="App.tsx"

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()` を使用します。ブリッジがすでに初期化されている場合、このメソッドは何もしません。

```typescript showLineNumbers title="App.tsx"
adapty.enableMock(); // Optional: pass mockConfig to customize mock data

// Now you can call methods before activation

await adapty.activate('YOUR_PUBLIC_SDK_KEY');
```

## トラブルシューティング \{#troubleshooting\}

#### iOS の最小バージョンエラー \{#minimum-ios-version-error\}

iOS の最小バージョンエラーが発生した場合は、Podfile を更新してください。

```diff
-platform :ios, min_ios_version_supported
+platform :ios, '13.0'  # For core features only
# OR
+platform :ios, '15.0'  # If using paywalls created in the paywall builder
```

#### Android Auto Backup マニフェストの競合 \{#android-auto-backup-manifest-conflict\}

一部の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)`

:::note
これらの変更は、Androidプラットフォームのディレクトリ（通常はプロジェクトの `android/` フォルダー内）で行う必要があります。
:::

この問題を解決するには、以下が必要です：

- バックアップ関連の属性に対して、アプリの値を使用するようマニフェストマージャーに指示する。

- AdaptyのルールとほかのSDKのルールをマージしたバックアップルールファイルを作成する。

#### 1. マニフェストに `tools` 名前空間を追加する \{#1-add-the-tools-namespace-to-your-manifest\}

`AndroidManifest.xml` ファイルのルートの `<manifest>` タグに tools が含まれていることを確認してください：

```xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">

    ...
</manifest>
```

#### 2. `<application>` でバックアップ属性を上書きする \{#2-override-backup-attributes-in-application\}

同じ `AndroidManifest.xml` ファイルで、`<application>` タグを更新して、アプリが最終的な値を提供し、マニフェストマージャーにライブラリの値を置き換えるよう指示します：

```xml
<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` に含めてください：

```xml
tools:replace="android:allowBackup,android:fullBackupContent,android:dataExtractionRules"
```

#### 3. マージしたバックアップルールファイルを作成する \{#3-create-merged-backup-rules-files\}

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

:::note
以下の例では、サンプルのサードパーティSDKとしてAppsFlyerを使用しています。アプリで使用しているほかのSDKのルールに置き換えるか、追加してください。
:::

**Android 12以降**（新しいデータ抽出ルール形式を使用）：

```xml title="sample_data_extraction_rules.xml"
<?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 title="sample_backup_rules.xml"
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    
    <exclude domain="sharedpref" path="appsflyer-data"/>

    
    <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>

#### Android で別のアプリから戻った後に購入が失敗する \{#purchases-fail-after-returning-from-another-app-in-android\}

購入フローを開始する Activity がデフォルト以外の `launchMode` を使用している場合、Google Play、銀行アプリ、またはブラウザからユーザーが戻ったときに Android が Activity を誤って再作成または再利用することがあります。これにより、購入結果が失われたり、キャンセルとして処理されたりする可能性があります。

購入が正しく機能するようにするには、購入フローを開始する Activity に `standard` または `singleTop` の起動モードのみを使用し、その他のモードを避けてください。

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

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

#### Podfile の SWIFT_VERSION オーバーライドによる Swift 6 ビルドエラー \{#swift-6-build-errors-caused-by-podfile-swift_version-override\}

iOS 向けに React Native アプリをビルドすると、Adapty pod ターゲットで Swift 6 のコンパイルエラーが表示される場合があります。典型的な症状としては、`AdaptyUIBuilderLogic` での `@Sendable` の不一致、Adapty 型での `Sendable` 適合の欠如、またはアクター分離エラーがあります。

Adapty pod は `s.swift_version = '6.0'` を宣言しており、Swift 6 でビルドする必要があります。アプリ自体のコードは Swift 5 のままで問題ありません。Adapty pod ターゲット（`Adapty`、`AdaptyUI`、`AdaptyUIBuilder`、`AdaptyLogger`、`AdaptyPlugin`）のみが Swift 6 でビルドされる必要があります。

最も一般的な原因は、すべての pod ターゲットに対して `SWIFT_VERSION` を書き換える `ios/Podfile` の `post_install` フックです。

```ruby showLineNumbers title="ios/Podfile"
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 ターゲットをオーバーライドから除外します。

```ruby showLineNumbers title="ios/Podfile"
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` pod ターゲット → **Build Settings** → **Swift Language Version** を選択してください。**Swift 6** になっているはずです。