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

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

  • Core Adapty: このSDKはAdaptyをアプリで正常に動作させるために必須です。
  • AdaptyUI (io.adapty:adapty-kmp-ui): このモジュールはCompose Multiplatformのレンダリングレイヤー(view.present())を通じて、フローや旧ビルダーのペイウォールを描画します。プロジェクトでCompose Multiplatformを使用していない場合は、代わりにコアモジュールのcreateNativePaywallViewcreateNativeOnboardingViewを使用できます。
Tip

Adapty SDKがモバイルアプリに統合された実際の例を見たい方は、サンプルアプリをご覧ください。ペイウォールの表示、購入処理、その他の基本的な機能を含む完全なセットアップをデモンストレーションしています。

完全な実装のウォークスルーは、以下の動画でもご確認いただけます:

必要条件

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

Info

Adapty Kotlin Multiplatform SDK 4.0 以降は Google Play Billing Library v8 に対応しています。

Billing Library のバージョンへの対応は、Google がそのバージョンで導入したすべての機能をサポートすることを意味するわけではありません。新しい Google Play の課金機能を採用する前に、Play Store のプロダクト をご確認ください。

Info

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 で参照する
Note

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

追加方法の手順

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

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

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

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

Adapty SDK を有効化する

基本的なセットアップ

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

Note

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

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"を置き換えます。
Info
  • Adaptyの初期化にはPublic SDKキーを使用してください。SecretキーはサーバーサイドAPI専用です。
  • SDKキーはアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。

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

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

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

Info

重要 コード内では、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 です。

Note

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


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

Adapty アトリビューションを有効化する

Info

このパラメーターは SDK バージョン 4.1 以降で利用可能です。

Adapty アトリビューションを使用する場合は、SDK を有効化する際に withAdaptyAttributionEnabledtrue に設定してください。デフォルト値は false です。このパラメーターを指定しない場合、SDK はインストールを登録せず、インストールの詳細をアプリに配信しません。SDK バージョン 4.1 未満では、Adapty アトリビューションは自動的に有効化されます。


val config = AdaptyConfig
    .Builder("PUBLIC_SDK_KEY")
    .withAdaptyAttributionEnabled(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)

Note

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

Note

以下の例では、サードパーティ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"/>

    
Important

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" />