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

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

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

  1. External Dependency Manager (EDM) プラグインをインストールします。Adapty SDKはこれを使用して、iOS Cocoapodsおよび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 の 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) { }
}

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 です。

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

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetAppleClearDataOnBackup(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)

これらの変更は、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がそのア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**
    }