Unity SDKのインストールと設定

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

  • Core Adapty: AdaptyをアプリでSDKが正常に動作するために必要な必須モジュールです。
  • AdaptyUI: フローおよび旧ビルダーのペイウォールをレンダリングするモジュールです。
Tip

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

要件

Adapty SDK は iOS 13.0+ をサポートしていますが、ペイウォールビルダーで作成したペイウォールを使用するには iOS 15.0+ が必要です。フローのサポートを追加する Adapty SDK 4.1 は、アプリ全体で iOS 15.0+ が必要です。デプロイメントターゲットがこれより低い場合、Unity Editor のビルドバリデーターが iOS ビルドを停止します。また、SDK 4.x を使用して iOS 向けにビルドするには Xcode 26 以降が必要です。これは、Swift パッケージとして追加されるネイティブ iOS SDK が Swift ツール 6.2 でビルドされているためです。

Info

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

依存関係

Adapty SDK は、Android で以下のバージョンの Google Play Billing Library に対応しています。

Adapty SDK バージョンBilling Library バージョン
3.17.0 以降v8
3.15.0〜3.15.2デフォルトは v7、別の依存関係によって引き上げられる場合は v8
Note

Billing Library のバージョンとの互換性があるからといって、Google がそのバージョンで導入したすべての機能を Adapty がサポートしているわけではありません。新しい Google Play の課金機能を導入する前に、Play Store のプロダクト を確認してください。

Adapty SDK のインストール

Release

常に最新バージョンのSDKをインストールすることをお勧めします。最新の安定性修正と改善が含まれています。

お好みのインストール方法を選択してください:

SDKをインストールしたら、以下の手順を完了してください:

  1. External Dependency Manager (EDM) プラグインをインストールしてください。Adapty SDKはこれを使用してiOSの依存関係とAndroidのGradle依存関係を処理します。

  2. EDMをインストールした後、依存関係マネージャーを手動で実行する必要がある場合があります:

    Assets -> External Dependency Manager -> Android Resolver -> Force Resolve

    および

    Assets -> External Dependency Manager -> iOS Resolver -> Install Cocoapods

  3. Unity プロジェクトを iOS 向けにビルドすると、Unity-iPhone.xcworkspace ファイルが生成されます。Cocoapods の依存関係を正しく使用するには、Unity-iPhone.xcodeproj ではなく、こちらのファイルを開いてください。

Adapty SDK 4.1

SDK 4.1 — フローのサポートを追加した最初の安定版リリースです(4.x ライン) — Unity Package Manager 経由でインストールする場合は、Git URL にバージョンタグを追加してください:

https://github.com/adaptyteam/AdaptySDK-Unity.git?path=/Packages/com.adapty.unity-sdk#4.1.0

Unity パッケージ経由でインストールする場合は、4.1.0 リリースから adapty-unity-plugin-4.1.0.unitypackage をダウンロードしてください。

4.xには、2つのビルド設定の変更が伴います。ネイティブiOS Adapty SDKはリモートのSwiftパッケージとして宣言されるようになり、CocoaPodsによるインストールは不要になりました。

  • External Dependency Manager を 1.2.188 以降に更新してください — それより古いバージョンは Swift Package Manager の依存関係をサポートしていません。これは SDK 4.1 がピア依存関係として宣言しているバージョンであり、プロジェクトに古いバージョンが含まれている場合は Unity が警告を表示します。
  • 上記の CocoaPods の手順(iOS Resolver -> Install CocoapodsUnity-iPhone.xcworkspace を開く)は SDK 3.x のみに適用されます。SDK 4.1 では、EDM が生成された Xcode プロジェクトに Swift パッケージを自動的に追加します。
  • iOS のデプロイメントターゲットを 15.0 以降に設定してください。Unity Editor のビルドバリデーターにより、これを満たさない場合は iOS ビルドが停止します。

4.x ラインでの変更点の全リストは、移行ガイドを参照してください。

Adapty SDK の Adapty モジュールを有効化する

アプリのコードで Adapty SDK を有効化します。

Note

Adapty SDK はアプリ内で一度だけ有効化する必要があります。

Public SDK Key を取得するには:

  1. Adapty ダッシュボードを開き、App settings → General に移動します。
  2. Api keys セクションで、Public SDK Key(Secret Key ではない)をコピーします。
  3. コード内の "YOUR_PUBLIC_SDK_KEY" を置き換えます。

または、Adapty CLI を使ってプログラムから取得することもできます:

npm install -g adapty
adapty auth login
adapty apps list

あるいは、直接実行する場合:

npx adapty auth login
adapty apps list
  • Adapty の初期化には必ず Public SDK key を使用してください。Secret keyサーバーサイド API 専用です。
  • SDK keys はアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。
using UnityEngine;
using AdaptySDK;

public class AdaptyListener : MonoBehaviour, AdaptyEventListener {
    void Start() {
        DontDestroyOnLoad(this.gameObject);
        Adapty.SetEventListener(this);

        var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY");

        Adapty.Activate(builder.Build(), (error) => {
            if (error != null) {
                // handle the error
                return;
            }
        });
    }

    public void OnLoadLatestProfile(AdaptyProfile profile) { }
    public void OnInstallationDetailsSuccess(AdaptyInstallationDetails details) { }
    public void OnInstallationDetailsFail(AdaptyError error) { }
}
Note

SDK 4.1 では、リスナーインターフェースが C# の I プレフィックス規則に従い、AdaptyEventListener の代わりに IAdaptyEventListener を実装します。また、インターフェースにはもう1つのメソッド OnReceivePromotedPurchase が必要です。詳細は移行ガイドをご覧ください。

Important

他の Adapty SDK メソッドを呼び出す前に、Activate の完了コールバックを待ってください。完全なシーケンスについては、Unity SDK の呼び出し順序をご覧ください。

イベントリスナーの設定

Adapty のイベントを受け取るスクリプトを作成します。シーン内で AdaptyListener という名前を付けてください。アプリケーションのライフサイクル全体を通じてオブジェクトが維持されるよう、DontDestroyOnLoad メソッドの使用をお勧めします。

2ccd564-create_adapty_listener.webp

Adapty は AdaptySDK 名前空間を使用します。Adapty SDK を使用するスクリプトファイルの先頭に以下を追加できます:

using AdaptySDK;

Adapty のイベントを購読します:

using UnityEngine;
using AdaptySDK;

public class AdaptyListener : MonoBehaviour, AdaptyEventListener {
    public void OnLoadLatestProfile(AdaptyProfile profile) {
        // handle updated profile data
    }

    public void OnInstallationDetailsSuccess(AdaptyInstallationDetails details) { }
    public void OnInstallationDetailsFail(AdaptyError error) { }
}

AdaptyListenerをDefault Timeより前に配置するよう、Script Execution Orderを調整することをおすすめします。これにより、Adaptyをできるだけ早く初期化できます。

activate_unity.webp

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

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

フロー & ペイウォールビルダーを使用する予定があり、AdaptyUI モジュールをインストール済みの場合は、AdaptyUI を有効化する必要があります。設定時に有効化できます:

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetActivateUI(true);

オプション設定

ログ設定

ログシステムの設定

Adapty はエラーやその他の重要な情報をログに記録し、状況を把握しやすくします。以下のログレベルが利用できます。

レベル説明
errorエラーのみがログに記録されます
warnエラーと、致命的なエラーではないものの注意が必要なSDKからのメッセージがログに記録されます
infoエラー、警告、および各種情報メッセージがログに記録されます
verbose関数呼び出しやAPIクエリなど、デバッグ時に役立つ追加情報がすべてログに記録されます

Adapty の設定時にログレベルを指定できます:

// 'verbose' is recommended for development and the first production release
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY");
builder.LogLevel = AdaptyLogLevel.Verbose;

実行時にログレベルを変更することも可能です:

Adapty.SetLogLevel(AdaptyLogLevel.Verbose, (error) => {
    // handle result
});

データポリシー

Adapty はユーザーの個人データを保存しませんが(明示的に送信した場合を除く)、ストアや国のガイドラインに準拠するために追加のデータセキュリティポリシーを設定できます。

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

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

このパラメータを使用して、ユーザープライバシーを強化し、地域のデータ保護規制(GDPRやCCPAなど)に準拠し、IPベースの機能がアプリに不要な場合の不必要なデータ収集を削減できます。

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetIPAddressCollectionDisabled(true);

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

Adapty モジュールを有効化する際に、広告識別子の収集を無効にするには SetAppleIDFACollectionDisabled および/または SetGoogleAdvertisingIdCollectionDisabledtrue に設定します。デフォルト値は false です。

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

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetAppleIDFACollectionDisabled(true)
    .SetGoogleAdvertisingIdCollectionDisabled(true);

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

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

デフォルトのキャッシュ設定を上書きするには、SetAdaptyUIMediaCache を使用します:

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetAdaptyUIMediaCache(
        100 * 1024 * 1024, // MemoryStorageTotalCostLimit 100MB
        null, // MemoryStorageCountLimit
        100 * 1024 * 1024 // DiskStorageSizeLimit 100MB
    );

パラメーター:

ParameterRequiredDescription
memoryStorageTotalCostLimitoptionalメモリ内のキャッシュ合計サイズ(バイト単位)。デフォルト値はプラットフォームによって異なります。
memoryStorageCountLimitoptionalメモリストレージのアイテム数の上限。デフォルト値はプラットフォームによって異なります。
diskStorageSizeLimitoptionalディスク上のファイルサイズの上限(バイト単位)。デフォルト値はプラットフォームによって異なります。

Android でローカルアクセスレベルを有効にする

デフォルトでは、ローカルアクセスレベルは iOS で有効、Android で無効になっています。Android でも有効にするには、SetGoogleLocalAccessLevelAllowedtrue に設定してください。

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetGoogleLocalAccessLevelAllowed(true);

バックアップリストア時のデータクリア

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

Note

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

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetAppleClearDataOnBackup(true);

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

Info

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

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

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetAdaptyAttributionEnabled(true);

トラブルシューティング

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

Unityでは、これらの変更を Assets/Plugins/Android/AndroidManifest.xml に適用し、バックアップルールファイルを Assets/Plugins/Android/res/xml/ 以下に作成してください。

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

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

購入フローを正しく動作させるには、購入フローを開始する Activity のランチモードを standard または singleTop のみ使用し、それ以外のモードは避けてください。

AndroidManifest.xml で、購入フローを開始する Activity のランチモードが standard または singleTop に設定されていることを確認してください。

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

Android でペイウォール表示時にアプリがクラッシュする

Android でペイウォールを表示したときにアプリがクラッシュする場合、Kotlin プラグインが Gradle の設定に含まれていない可能性があります。追加するには次の手順を実施してください。

  1. Player Settings で、Custom Launcher Gradle TemplateCustom Base Gradle Template のオプションが選択されていることを確認します。

    kotlin-plugin1.webp
  2. /Assets/Plugins/Android/launcherTemplate.gradle に以下の行を追加します。

   apply plugin: 'com.android.application'
   apply plugin: 'kotlin-android'
   apply from: 'setupSymbols.gradle'
   apply from: '../shared/keepUnitySymbols.gradle'
  1. /Assets/Plugins/Android/baseProjectTemplate.gradle に以下の行を追加します:

    plugins {
        // If you are changing the Android Gradle Plugin version, make sure it is compatible with the Gradle version preinstalled with Unity
        // See which Gradle version is preinstalled with Unity here https://docs.unity3d.com/Manual/android-gradle-overview.html
        // See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle
        // To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle version
        id 'com.android.application' version '8.3.0' apply false
        id 'com.android.library' version '8.3.0' apply false
        id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
        **BUILD_SCRIPT_DEPS**
    }