---
title: "Adapty Kotlin Multiplatform SDK のインストールと設定"
description: "Kotlin Multiplatform アプリ向けに Adapty SDK をインストールして設定する方法を説明します。"
---

Adapty SDKは、モバイルアプリへのシームレスな統合を実現する2つの主要モジュールで構成されています。
- **Core Adapty**: Adaptyがアプリで正常に機能するために必要な必須SDKです。
- **AdaptyUI** (`io.adapty:adapty-kmp-ui`): Compose Multiplatformレンダリングレイヤー（`view.present()`）で[Adapty ペイウォールビルダー](adapty-paywall-builder)を使用する場合に必要なモジュールです。プロジェクトでCompose Multiplatformを使用していない場合は、代わりにコアモジュールの[`createNativePaywallView`](kmp-present-paywalls#without-compose-multiplatform)および[`createNativeOnboardingView`](kmp-present-onboardings#without-compose-multiplatform)を使用できます。
:::tip
Adapty SDK がモバイルアプリにどのように統合されるか、実際の例を見てみたいですか？ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを示す[サンプルアプリ](https://github.com/adaptyteam/AdaptySDK-KMP/tree/main/example)をご覧ください。
:::

完全な実装のウォークスルーについては、以下の動画もご参照ください：
<iframe width="560" height="315" src="https://www.youtube.com/embed/JfwJvwnloNw?si=HskPxRk4WGkF_u9s" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## 動作要件 \{#requirements\}

Adapty Kotlin Multiplatform SDK は Xcode 16.2 以降に対応しています。

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

## GradleでAdapty SDKをインストールする \{#install-adapty-sdk-via-gradle\}

Adapty SDKのGradleによるインストールは、AndroidとiOSの両方のアプリに必要です。

依存関係の設定方法を選択してください:
- 標準Gradle: **モジュールレベル**の`build.gradle`に依存関係を追加する
- プロジェクトで`.gradle.kts`ファイルを使用している場合は、**モジュールレベル**の`build.gradle.kts`に依存関係を追加する
- バージョンカタログを使用している場合は、`libs.versions.toml`ファイルに依存関係を追加し、`build.gradle.kts`で参照する

<Tabs>
<TabItem value="module-level build.gradle" label="module-level build.gradle" default>
```kotlin showLineNumbers
kotlin {
    sourceSets {
        commonMain {
            dependencies {
                implementation libs.adapty.kmp
            }
        }
    }
}
```

</TabItem>
<TabItem value="module-level build.gradle.kts" label="module-level build.gradle.kts" default>

```kotlin showLineNumbers
kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation(libs.adapty.kmp)
            }
        }
    }
}
```

</TabItem>

<TabItem value="version-catalog" label="バージョンライブラリ" default>
```toml showLineNumbers
// libs.versions.toml
[versions]
..
adapty-kmp    = "<the latest SDK version>"

[libraries]
..
adapty-kmp = { module = "io.adapty:adapty-kmp", version.ref = "adapty-kmp" }

// build.gradle.kts

kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation(libs.adapty.kmp)
            }
        }
    }
}

```

</TabItem>
</Tabs>

:::note
Maven 関連のエラーが発生した場合は、Gradle スクリプトに `mavenCentral()` が含まれていることを確認してください。

<details>
   <summary>追加方法の手順</summary>
プロジェクトの `settings.gradle` に `dependencyResolutionManagement` がない場合は、トップレベルの `build.gradle` のリポジトリ末尾に以下を追加してください：

```groovy showLineNumbers title="top-level build.gradle"
allprojects {
    repositories {
        ...
        mavenCentral()
    }
}
```

`dependencyResolutionManagement` がある場合は、`settings.gradle` の `dependencyResolutionManagement` セクション内の `repositories` に以下を追加してください：

```groovy showLineNumbers title="settings.gradle"
dependencyResolutionManagement {
    ...
    repositories {
        ...
        google()
        mavenCentral()
    }
}
```
</details>
:::
## Adapty SDK を有効化する \{#activate-adapty-sdk\}

### 基本セットアップ \{#basic-setup\}

初期化はできるだけ早い段階で追加してください。通常は、両プラットフォーム共通の Kotlin コード内で行います。

:::note
Adapty SDK はアプリ内で一度だけ有効化すれば十分です。
:::

```kotlin title="Kotlin" showLineNumbers

val config = AdaptyConfig
    .Builder("PUBLIC_SDK_KEY")
    .build()

Adapty.activate(configuration = config)
    .onSuccess {
        Log.d("Adapty", "SDK initialised")
    }
    .onError { error ->
        Log.e("Adapty", "Adapty init error: ${error.message}")
    }
```
:::important
他の Adapty SDK メソッドを呼び出す前に、`activate` の完了を待ってください。詳細な順序については、[Kotlin Multiplatform SDK の呼び出し順序](kmp-sdk-call-order)を参照してください。
:::

**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"` を置き換えます。
:::info
- Adapty の初期化には必ずパブリック SDK キーを使用してください。シークレットキーは[サーバーサイド API](getting-started-with-server-side-api) 専用です。
- SDK キーはアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。
  :::

次に、アプリにペイウォールを設定します：
- [Adapty ペイウォールビルダー](adapty-paywall-builder)を使う場合は、まず以下の[AdaptyUI モジュールを有効化](#activate-adaptyui-module-of-adapty-sdk)してから、[ペイウォールビルダーのクイックスタート](kmp-quickstart-paywalls)に進んでください。
- 独自のペイウォール UI を構築する場合は、[カスタムペイウォールのクイックスタート](kmp-quickstart-manual)を参照してください。
## AdaptyUI モジュールを有効化する \{#activate-adaptyui-module-of-adapty-sdk\}

[ペイウォールビルダー](kmp-present-paywalls)を使用するために **AdaptyUI** モジュールを有効化する場合は、設定に `.withActivateUI(true)` を追加してください。

:::info
重要
コード内では、AdaptyUI を有効化する前に、コアの Adapty モジュールを先に有効化する必要があります。
:::
```kotlin title="Kotlin" showLineNumbers

val config = AdaptyConfig
    .Builder("PUBLIC_SDK_KEY")
    .withActivateUI(true)           // true for activating the AdaptyUI module
    .build()

Adapty.activate(configuration = config)
    .onSuccess {
        Log.d("Adapty", "SDK initialised")
    }
    .onError { error ->
        Log.e("Adapty", "Adapty init error: ${error.message}")
    }
```

## Proguard の設定（Android） \{#configure-proguard-android\}

本番環境でアプリを公開する前に、Proguard の設定に `-keep class com.adapty.** { *; }` を追加する必要がある場合があります。

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

### ログ記録 \{#logging\}

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

Adapty はエラーやその他の重要な情報をログに記録し、何が起きているかを把握できるようにします。利用可能なログレベルは以下のとおりです：
| レベル                    | 説明                                                                                                               |
| :----------------------- | :------------------------------------------------------------------------------------------------------------------------ |
| `AdaptyLogLevel.ERROR`   | エラーのみがログに記録されます。                                                                                               |
| `AdaptyLogLevel.WARN`    | エラーと、致命的なエラーは引き起こさないものの注意が必要なSDKからのメッセージがログに記録されます。     |
| `AdaptyLogLevel.INFO`    | エラー、警告、およびさまざまな情報メッセージがログに記録されます。デフォルト値。                                                         |
| `AdaptyLogLevel.VERBOSE` | 関数呼び出しやAPIクエリなど、デバッグ時に役立つ可能性のある追加情報がログに記録されます。 |
| `AdaptyLogLevel.DEBUG`   | 内部デバッグデータを含む、最も詳細な情報がログに記録されます。                                                                             |
Adapty を設定する前に、アプリでログレベルを設定できます:

```kotlin title="Kotlin" showLineNumbers

val config = AdaptyConfig
     .Builder("PUBLIC_SDK_KEY")
     .withLogLevel(AdaptyLogLevel.VERBOSE) // recommended for development
     .build()
```
### データポリシー \{#data-policies\}

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

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

このパラメーターは、ユーザーのプライバシーを強化する場合、GDPRやCCPAなどの地域データ保護規制に準拠する場合、またはIPベースの機能がアプリに不要な場合に不要なデータ収集を減らすために活用してください。
```kotlin title="Kotlin" showLineNumbers

val config = AdaptyConfig
     .Builder("PUBLIC_SDK_KEY")
     .withIpAddressCollectionDisabled(true)
     .build()
```
#### 広告IDの収集と共有を無効にする \{#disable-advertising-id-collection-and-sharing\}

Adapty モジュールを有効化する際、広告識別子の収集を無効にするには `appleIdfaCollectionDisabled`（iOS）または `googleAdvertisingIdCollectionDisabled`（Android）を true に設定してください。デフォルト値は false です。
このパラメータは、App Store/Play Storeのポリシーに準拠するため、App Tracking Transparencyのプロンプト表示を避けるため、または広告IDに基づくアドバタイジングアトリビューションやアナリティクスがアプリに不要な場合に使用してください。

```kotlin title="Kotlin" showLineNumbers

val config = AdaptyConfig
     .Builder("PUBLIC_SDK_KEY")
     .withGoogleAdvertisingIdCollectionDisabled(true)        // Android only
     .withAppleIdfaCollectionDisabled(true)                  // iOS only
     .build()
```

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

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

val config = AdaptyConfig
    .Builder("PUBLIC_SDK_KEY")
    .withMediaCacheConfiguration(
        AdaptyConfig.MediaCacheConfiguration(
            memoryStorageTotalCostLimit = 200 * 1024 * 1024, // 200 MB
            memoryStorageCountLimit = Int.MAX_VALUE,
            diskStorageSizeLimit = 200 * 1024 * 1024 // 200 MB
        )
    )
    .build()
```

### ローカルアクセスレベルの有効化（Android） \{#enable-local-access-levels-android\}

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

```kotlin title="Kotlin" showLineNumbers

val config = AdaptyConfig
    .Builder("PUBLIC_SDK_KEY")
    .withGoogleLocalAccessLevelAllowed(true)
    .build()
```

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

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

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

val config = AdaptyConfig
    .Builder("PUBLIC_SDK_KEY")
    .withAppleClearDataOnBackup(true)
    .build()
```

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

####  Android バックアップルール（自動バックアップの設定） \{#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"/>

:::important
Kotlin Multiplatform プロジェクトでは、APK/AAB を生成する Android アプリケーションモジュール（例：`androidApp` または `app`）に以下の変更を適用してください：
- マニフェスト：`androidApp/src/main/AndroidManifest.xml`
- バックアップルール XML：`androidApp/src/main/res/xml/`
:::

#### Android で別のアプリから戻った後に購入が失敗する \{#purchases-fail-after-returning-from-another-app-in-android\}
購入フローを開始するアクティビティが非デフォルトの `launchMode` を使用している場合、ユーザーが Google Play、銀行アプリ、またはブラウザから戻ったときに Android がそのアクティビティを誤って再生成または再利用することがあります。これにより、購入結果が失われたり、キャンセル扱いになったりする可能性があります。

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

`AndroidManifest.xml` で、購入フローを開始するアクティビティが `standard` または `singleTop` に設定されていることを確認してください：
```xml
<activity
    android:name=".MainActivity"
    android:launchMode="standard" />
```