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

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

  • Core Adapty: アプリで Adapty を正常に動作させるために必要な SDK です。
  • AdaptyUI: クロスプラットフォーム対応のペイウォールをノーコードで簡単に作成できるツール Adapty ペイウォールビルダー を使用する場合に必要なモジュールです。

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

要件

Adapty SDK は iOS 13.0 以上をサポートしていますが、ペイウォールビルダーで作成したペイウォールを使用するには iOS 15.0 以上が必要です。

Adapty は Google Play Billing Library 8.x 以下と互換性があります。デフォルトでは、Adapty は Google Play Billing Library v7.0.0 を使用します。新しいバージョンを使用するには、Android ビルドで Billing の依存関係を上書きしてください。

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

Adapty SDK のインストール

Release

  1. GitHub から adapty-unity-plugin-*.unitypackage をダウンロードし、プロジェクトにインポートします。
456bd98-adapty-unity-plugin.webp
  1. External Dependency Manager プラグインをダウンロードしてインポートします。

  2. SDK は「External Dependency Manager」プラグインを使用して iOS Cocoapods の依存関係と Android gradle の依存関係を管理します。インストール後、依存関係マネージャーを手動で実行する必要がある場合があります。

    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 ではなく、この Unity-iPhone.xcworkspace を開いてください。

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

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

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

他の 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) { }
}

Adapty ができるだけ早く初期化されるよう、スクリプト実行順序を調整して AdaptyListener をデフォルト時間より前に配置することをお勧めします。

activate_unity.webp

プロジェクトに Kotlin プラグインを追加する

この手順は必須です。スキップすると、ペイウォールの表示時にモバイルアプリがクラッシュする可能性があります。

  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'
  3. /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**
    }

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

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
    );

パラメータ:

パラメータ必須説明
memoryStorageTotalCostLimit任意メモリ内の合計キャッシュサイズ(バイト)。プラットフォーム固有のデフォルト値を使用します。
memoryStorageCountLimit任意メモリストレージのアイテム数の上限。プラットフォーム固有のデフォルト値を使用します。
diskStorageSizeLimit任意ディスク上のファイルサイズの上限(バイト)。プラットフォーム固有のデフォルト値を使用します。

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

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

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

バックアップ復元時にデータを消去する

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

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

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

トラブルシューティング

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

    

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

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

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

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

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

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