---
title: "Capacitor - Adapty SDK のインストールと設定"
description: "サブスクリプション型アプリ向けに Capacitor へ Adapty SDK をインストールするステップバイステップガイド。"
---

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

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

:::tip
Adapty SDK をモバイルアプリに統合した実際の例を見たい方は、[サンプルアプリ](https://github.com/adaptyteam/AdaptySDK-Capacitor/tree/master/examples)をご確認ください。ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを確認できます。
:::

## 要件 \{#requirements\}

[Adapty Capacitor SDK](https://github.com/adaptyteam/AdaptySDK-Capacitor/) には以下のバージョン要件があります。

| Adapty SDK バージョン | Capacitor バージョン | iOS バージョン |
|--------------------|-------------------|-------------|
| 3.16.0+            | 8                 | 15.0+       |
| 3.15               | 7                 | 14.0+       |

Capacitor バージョン 6 以下はサポートされていません。

:::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-Capacitor.svg?style=flat&logo=capacitor)](https://github.com/adaptyteam/AdaptySDK-Capacitor/releases)

Adapty SDK をインストールします。

```sh
npm install @adapty/capacitor
npx cap sync
```

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

:::note
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 を有効化するために、以下のコードをアプリの任意のファイルにコピーしてください。

```typescript showLineNumbers

try {
  await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
      // verbose logging is recommended for the development purposes and for the first production release
        logLevel: 'verbose',
      // in the development environment, use this variable to avoid multiple activation errors. Set it to your development environment variable
      __ignoreActivationOnFastRefresh: true,
    }
  });
  console.log('Adapty activated successfully!');
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
}
```

:::important
他の Adapty SDK メソッドを呼び出す前に、`activate` の完了を待ってください。完全な呼び出し順序については [Capacitor SDK の呼び出し順序](capacitor-sdk-call-order) を参照してください。
:::

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

次に、アプリでペイウォールをセットアップします。

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

## 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
// Set log level before activation
adapty.setLogLevel({ logLevel: 'verbose' });

// Or set it during configuration
await adapty.activate({
  apiKey: 'YOUR_PUBLIC_SDK_KEY',
  params: {
    logLevel: 'verbose',
  }
});
```

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

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

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

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

IP ベースの機能がアプリに必要でない場合や、GDPR や CCPA などの地域データ保護規制に準拠する必要がある場合、あるいは不必要なデータ収集を減らしたい場合に使用してください。

```typescript showLineNumbers
await adapty.activate({
  apiKey: 'YOUR_PUBLIC_SDK_KEY',
  params: {
    ipAddressCollectionDisabled: true,
  }
});
```

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

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

App Store/Play Store ポリシーへの準拠、アプリトラッキングの透明性プロンプトの非表示、または広告 ID に基づくアトリビューションや分析がアプリに不要な場合に使用してください。

```typescript showLineNumbers
await adapty.activate({
  apiKey: 'YOUR_PUBLIC_SDK_KEY',
  params: {
    ios: {
      idfaCollectionDisabled: true,
    },
    android: {
      adIdCollectionDisabled: true,
    },
  }
});
```

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

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

デフォルトのキャッシュ設定を上書きするには `mediaCache` を使用してください。

```typescript showLineNumbers
await adapty.activate({
  apiKey: 'YOUR_PUBLIC_SDK_KEY',
  params: {
    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
await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
        android: {
            localAccessLevelAllowed: true,
        },
    }
});
```

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

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

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

```swift showLineNumbers
await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
        ios: {
            clearDataOnBackup: true,
        },
    }
});
```

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

#### Capacitor のライブリロードでの SDK 有効化エラーのトラブルシューティング \{#troubleshoot-sdk-activation-errors-on-capacitors-live-reload\}

Capacitor で Adapty SDK を開発中に、次のエラーが発生することがあります: `Adapty can only be activated once. Ensure that the SDK activation call is not made more than once.`

これは Capacitor のライブリロード機能が開発中に複数回の有効化呼び出しをトリガーするために発生します。これを防ぐには、`__ignoreActivationOnFastRefresh` オプションを Capacitor の開発モードフラグに設定してください。使用するバンドルによって異なります。

```typescript showLineNumbers
try {
  await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
        // Set your development environment variable
      __ignoreActivationOnFastRefresh: true,
    }
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}
```

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

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

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

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

#### Android のバックアップルール（Auto Backup の設定） \{#android-backup-rules-auto-backup-configuration\}

一部の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"/>

:::tip
ネイティブ Android ファイルを変更した後は、`npx cap sync android` を実行してプラットフォームを再生成した際に Capacitor が更新されたリソースを取得できるようにしてください。
:::

#### 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 向けに Capacitor アプリをビルドする際に、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/App/Podfile` の `post_install` フックがすべての pod ターゲットの `SWIFT_VERSION` を上書きしていることです。

```ruby showLineNumbers title="ios/App/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/App/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
```

その後、`npx cap sync ios` を実行してリビルドしてください。

確認するには、`ios/App/Pods/Pods.xcodeproj` を開き、`Adapty` pod ターゲットを選択して **Build Settings** → **Swift Language Version** を確認します。**Swift 6** になっている必要があります。