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

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

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

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をインストールする

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

依存関係の設定方法を選択してください:

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

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

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

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

他の Adapty SDK メソッドを呼び出す前に、activate の完了を待ってください。詳細な順序については、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 の初期化には必ずパブリック SDK キーを使用してください。シークレットキーはサーバーサイド API 専用です。
  • SDK キーはアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。

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

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

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

重要 コード内では、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 はエラーやその他の重要な情報をログに記録し、何が起きているかを把握できるようにします。利用可能なログレベルは以下のとおりです:

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

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


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

トラブルシューティング

Android バックアップルール(自動バックアップの設定)

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