Adapty Kotlin Multiplatform SDKのインストールと設定

Adapty SDKは、モバイルアプリへのシームレスな統合を実現する2つの主要モジュールで構成されています。

  • Core Adapty: Adapty がアプリで正しく機能するために必要な、必須の SDK です。
  • AdaptyUI (io.adapty:adapty-kmp-ui): Compose Multiplatform レンダリングレイヤー(view.present())で Adapty ペイウォールビルダー を使用する場合に必要なモジュールです。プロジェクトで Compose Multiplatform を使用しない場合は、代わりにコアモジュールの createNativePaywallViewcreateNativeOnboardingView を使用できます。

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

完全な実装のウォークスルーについては、こちらの動画もご参照ください:

動作要件

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

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

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

GradleでAdapty SDKをインストールする

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

依存関係の設定方法を選んでください:

  • 標準のGradle:モジュールレベルbuild.gradle に依存関係を追加する
  • プロジェクトで .gradle.kts ファイルを使用している場合は、モジュールレベルbuild.gradle.kts に依存関係を追加する
  • バージョンカタログを使用している場合は、libs.versions.toml ファイルに依存関係を追加し、build.gradle.kts でそれを参照する

Adapty Kotlin Multiplatform SDK 4.0 はプレリリース版です。Gradle は動的バージョン範囲(+latest.release など)ではプレリリースバージョンを自動選択しないため、io.adapty:adapty-kmp:4.0.0-beta.1libs.versions.toml での adapty-kmp = "4.0.0-beta.1" のように、バージョンを明示的に指定する必要があります。詳しくは Adapty Kotlin Multiplatform SDK を v4 へ移行する を参照してください。

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

追加方法の手順

プロジェクトの settings.gradledependencyResolutionManagement がない場合は、トップレベルの build.gradle の repositories の末尾に以下を追加してください:

allprojects {
    repositories {
        ...
        mavenCentral()
    }
}

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

dependencyResolutionManagement {
    ...
    repositories {
        ...
        google()
        mavenCentral()
    }
}

Adapty SDK を有効化する

基本的なセットアップ

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

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


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}")
    }

activateの完了を待ってから、他のAdapty SDKメソッドを呼び出してください。完全な順序については、Kotlin Multiplatform SDKの呼び出し順序を参照してください。

Public SDK Keyを取得するには:

  1. Adapty ダッシュボードにアクセスし、App settings → Generalに移動します。
  2. Api keysセクションから、Public SDK Key(Secret Keyではない)をコピーします。
  3. コード内の"YOUR_PUBLIC_SDK_KEY"を置き換えます。
  • Adaptyの初期化にはPublic SDKキーを使用してください。SecretキーはサーバーサイドAPI専用です。
  • SDKキーはアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。

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

AdaptyUI モジュールを有効化する

Adapty ペイウォールビルダーを使用するために AdaptyUI モジュールを有効化する場合は、設定で .withActivateUI(true) を指定してください。

important コード内では、AdaptyUI を有効化する前に、コアの Adapty モジュールを先に有効化する必要があります。


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)

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

オプション設定

ログ

ログシステムの設定

Adapty は、何が起きているかを把握できるよう、エラーやその他の重要な情報をログに記録します。以下のログレベルが利用できます。

LevelDescription
AdaptyLogLevel.ERRORエラーのみがログに記録されます。
AdaptyLogLevel.WARNエラーと、重大なエラーは引き起こさないが注意が必要なSDKからのメッセージがログに記録されます。
AdaptyLogLevel.INFOエラー、警告、および各種情報メッセージがログに記録されます。デフォルト値。
AdaptyLogLevel.VERBOSE関数呼び出し、APIクエリなど、デバッグ時に役立つ可能性のある追加情報がログに記録されます。
AdaptyLogLevel.DEBUG内部デバッグデータを含む、最も詳細な情報がログに記録されます。

アプリでAdaptyを設定する前に、ログレベルを設定できます。


val config = AdaptyConfig
     .Builder("PUBLIC_SDK_KEY")
     .withLogLevel(AdaptyLogLevel.VERBOSE) // recommended for development
     .build()

データポリシー

IPアドレスの収集と共有を無効にする

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

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


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

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

Adaptyモジュールを有効化する際に、appleIdfaCollectionDisabled(iOS)またはgoogleAdvertisingIdCollectionDisabled(Android)をtrueに設定すると、広告識別子の収集を無効にできます。デフォルト値はfalseです。

App Store/Play Storeのポリシーへの準拠、App Tracking Transparencyプロンプトの表示回避、または広告IDに基づくアドバタイジングアトリビューションや分析がアプリに不要な場合に、このパラメーターを使用してください。


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

AdaptyUI のメディアキャッシュ設定

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

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


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)

デフォルトでは、Android ではローカルアクセスレベルが無効になっています。有効にするには、withLocalAccessLevelAllowedtrue に設定します:


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

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

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

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


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

トラブルシューティング

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)

これらの変更は、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"/>

    

Kotlin Multiplatform プロジェクトでは、APK/AAB を生成する Android アプリケーションモジュール(例: androidApp または app)にこれらの変更を適用してください:

  • マニフェスト: androidApp/src/main/AndroidManifest.xml
  • バックアップルール XML: androidApp/src/main/res/xml/

Android で別のアプリから戻った後に購入が失敗する

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

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

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

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