Unity SDKのインストールと設定
Adapty SDK には、Unity アプリへのシームレスな統合を実現する2つの主要モジュールが含まれています。
- Core Adapty: これはAdaptyがアプリで正しく機能するために必要な必須SDKです。
- AdaptyUI: このモジュールは、クロスプラットフォームのペイウォールを簡単に作成できるノーコードツールであるAdapty ペイウォールビルダーを使用する場合に必要です。
Adapty SDKがモバイルアプリにどのように統合されるかの実例を確認したいですか?ペイウォールの表示、購入処理、その他の基本的な機能を含む完全なセットアップを示すサンプルアプリをチェックしてみてください。
要件
Adapty SDK は iOS 13.0+ をサポートしていますが、ペイウォールビルダーで作成したペイウォールを使用するには iOS 15.0+ が必要です。フローBuilder サポートを追加した Adapty SDK 4.1 では、アプリ全体に iOS 15.0+ が必要です。デプロイターゲットがこれより低い場合、Unity Editor のビルドバリデーターが iOS ビルドを停止します。
Adapty Unity SDK 4.0 以降は Google Play Billing Library v8 に対応しています。
Billing Libraryのバージョンとの互換性は、Adaptyがそのバージョンで導入されたすべての機能をサポートすることを意味するわけではありません。新しいGoogle Play課金機能を採用する前に、Google PlayのプロダクトPlay Storeのプロダクトを確認してください。
SDKのインストールは、Adaptyセットアップのステップ5です。アプリ内で課金が機能するようにするには、アプリをストアに接続し、Adapty ダッシュボードでプロダクト、ペイウォール、プレースメントを作成する必要があります。クイックスタートガイドでは、必要なすべての手順を説明しています。
Adapty SDK のインストール
インストール方法を選択してください:
SDKをインストールしたら、以下の手順を完了してください:
-
External Dependency Manager (EDM) プラグインをインストールしてください。Adapty SDKはこれを使用してiOSの依存関係とAndroidのGradle依存関係を処理します。
-
EDMをインストールした後、依存関係マネージャーを手動で実行する必要がある場合があります:
Assets -> External Dependency Manager -> Android Resolver -> Force Resolveおよび
Assets -> External Dependency Manager -> iOS Resolver -> Install Cocoapods -
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 Cocoapods、Unity-iPhone.xcworkspaceを開く)は SDK 3.x のみに適用されます。SDK 4.1 では、EDM が生成された Xcode プロジェクトに Swift パッケージを自動的に追加します。 - iOS のデプロイメントターゲットを 15.0 以降に設定してください。Unity Editor のビルドバリデーターにより、これを満たさない場合は iOS ビルドが停止します。
4.x ラインでの変更点の全リストは、移行ガイドを参照してください。
Adapty SDK の Adapty モジュールを有効化する
アプリのコードで Adapty SDK を有効化します。
Adapty SDK はアプリ内で一度だけ有効化する必要があります。
Public SDK Key を取得するには:
- Adapty ダッシュボードを開き、App settings → General に移動します。
- Api keys セクションで、Public SDK Key(Secret Key ではない)をコピーします。
- コード内の
"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) { }
}
SDK 4.1 では、リスナーインターフェースが C# の I プレフィックス規則に従い、AdaptyEventListener の代わりに IAdaptyEventListener を実装します。また、インターフェースにはもう1つのメソッド OnReceivePromotedPurchase が必要です。詳細は移行ガイドをご覧ください。
他の Adapty SDK メソッドを呼び出す前に、Activate の完了コールバックを待ってください。完全なシーケンスについては、Unity SDK の呼び出し順序をご覧ください。
イベントリスナーの設定
Adapty のイベントを受け取るスクリプトを作成します。シーン内で AdaptyListener という名前を付けてください。アプリケーションのライフサイクル全体を通じてオブジェクトが維持されるよう、DontDestroyOnLoad メソッドの使用をお勧めします。
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をできるだけ早く初期化できます。
次に、アプリにペイウォールを設定します:
- Adapty ペイウォールビルダーを使用する場合は、まず以下のAdaptyUI モジュールを有効化してから、ペイウォールビルダーのクイックスタートをご覧ください。
- 独自のペイウォール UI を作成する場合は、カスタムペイウォールのクイックスタートをご覧ください。
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 モジュールを有効化する際に、SetIPAddressCollectionDisabled を true に設定すると、ユーザーの IP アドレスの収集と共有を無効化できます。デフォルト値は false です。
このパラメータを使用して、ユーザープライバシーを強化し、地域のデータ保護規制(GDPRやCCPAなど)に準拠し、IPベースの機能がアプリに不要な場合の不必要なデータ収集を削減できます。
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetIPAddressCollectionDisabled(true);
広告IDの収集と共有を無効にする
Adapty モジュールを有効化する際に、広告識別子の収集を無効にするには SetAppleIDFACollectionDisabled および/または SetGoogleAdvertisingIdCollectionDisabled を true に設定します。デフォルト値は 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
);
パラメーター:
| Parameter | Required | Description |
|---|---|---|
| memoryStorageTotalCostLimit | optional | メモリ内のキャッシュ合計サイズ(バイト単位)。デフォルト値はプラットフォームによって異なります。 |
| memoryStorageCountLimit | optional | メモリストレージのアイテム数の上限。デフォルト値はプラットフォームによって異なります。 |
| diskStorageSizeLimit | optional | ディスク上のファイルサイズの上限(バイト単位)。デフォルト値はプラットフォームによって異なります。 |
Android でローカルアクセスレベルを有効にする
デフォルトでは、ローカルアクセスレベルは iOS で有効、Android で無効になっています。Android でも有効にするには、SetGoogleLocalAccessLevelAllowed を true に設定してください。
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetGoogleLocalAccessLevelAllowed(true);
バックアップリストア時のデータクリア
SetAppleClearDataOnBackup を true に設定すると、SDKはアプリがiCloudバックアップから復元されたことを検出し、キャッシュされたプロファイル情報、プロダクト詳細、ペイウォールなど、ローカルに保存されているすべてのSDKデータを削除します。その後、SDKはクリーンな状態で初期化されます。デフォルト値は false です。
削除されるのはローカルのSDKキャッシュのみです。Appleとのトランザクション履歴およびAdaptyサーバー上のユーザーデータは変更されません。
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetAppleClearDataOnBackup(true);
Adapty アトリビューションを有効にする
このパラメーターは SDK バージョン 4.1 以降で利用できます。
Adapty アトリビューションを使用する場合、SDK をアクティブ化する際に SetAdaptyAttributionEnabled を true に設定してください。デフォルト値は 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:fullBackupContent、android: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のルールをres/xml/ディレクトリにXMLファイルを作成し、AdaptyのルールをほかのSDKのルールと組み合わせます。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 の設定に含まれていない可能性があります。追加するには次の手順を実施してください。
-
Player Settings で、Custom Launcher Gradle Template と Custom Base Gradle Template のオプションが選択されていることを確認します。
-
/Assets/Plugins/Android/launcherTemplate.gradleに以下の行を追加します。
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: 'setupSymbols.gradle'
apply from: '../shared/keepUnitySymbols.gradle'
/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** }