Unity SDK - 基本統合

前提条件

スムーズな統合プロセスを実現するため、Singular Unity SDK をインストールする前にこれらの前提ステップを完了してください。

必須の前提条件:


インストール

Unity Package Manager (UPM) によるインストール

Singular Unity SDK は、Git URL を使用して Unity Package Manager 経由でインストールします。次の手順に従って、SDK をプロジェクトに追加してください。

インストール手順

  1. Package Manager を開く: Unity で Window > Package Manager に移動します。
  2. Git からパッケージを追加する: 左上隅の [+] ボタンをクリックし、 「Add package from git URL」 を選択します。
  3. Git URL を入力する:
    • 標準 SDK の場合: 次を入力します: https://github.com/singular-labs/Singular-Unity-SDK.git
    • Kids SDK の場合: 次を入力します: https://github.com/singular-labs/Singular-Unity-SDK.git#kids
  4. インストールを完了する: 「Add」 をクリックして SDK パッケージをインストールします。

Google EDM4U を使用していませんか? プロジェクトで External Dependency Manager を使用していない場合は、ネイティブ依存関係を手動でダウンロードして追加する必要があります。

依存関係の手動インストール

  1. 依存関係をダウンロードする: Singular の S3 バケットから適切な Plugins.zip ファイルをダウンロードします:
  2. Assets に展開する: ダウンロードしたファイルを展開し、Unity プロジェクトの Assets > Plugins に移動します。
  3. iOS フレームワークを設定する: Assets > Plugins > iOS に移動して Singular.xcframework を選択します。
  4. バイナリを埋め込む: Inspector ペインで、 「Add to Embedded Binaries」 オプションにチェックを入れます。

Android 設定のヒント

SDK が正しく機能するように、Android のビルド設定を構成してください。Unity では、Android マニフェストや Gradle ファイルをカスタマイズする複数の方法が用意されています。

AndroidManifest.xml を更新する方法

AndroidManifest は次の 2 つの方法のいずれかで変更できます:

方法 1: Unity のカスタムマニフェスト

  1. File > Build Settings > Player Settings > Publishing Settings に移動します。
  2. Publishing Settings セクションの下で 「Custom Main Manifest」 を有効にします。
  3. Unity がデフォルトの AndroidManifest.xml ファイルを Assets/Plugins/Android/AndroidManifest.xml に生成します。
  4. このファイルを編集して、必要な権限と設定を追加します。

出典: Unity Android Manifest ドキュメント

方法 2: Android Studio

  1. File > Build Settings > Export Project を使用して Unity からプロジェクトをエクスポートします。
  2. エクスポートしたプロジェクトを Android Studio で開きます。
  3. Android Studio で AndroidManifest.xml ファイルを直接編集します。
Gradle ビルドファイルを更新する方法

方法 1: Unity のカスタムテンプレート

  1. File > Build Settings > Player Settings > Publishing Settings に移動します。
  2. Publishing Settings セクションの下で 「Custom Gradle Template」 を有効にします。
  3. Unity が mainTemplate.gradle ファイルを Assets/Plugins/Android/mainTemplate.gradle に生成します。
  4. このファイルにカスタムの Gradle 設定を追加します。

出典: Unity Gradle 概要ドキュメント

方法 2: Android Studio

  1. Unity からプロジェクトをエクスポートします。
  2. プロジェクトを Android Studio で開きます。
  3. アプリの build.gradle ファイルを直接編集します。
重複クラスエラーの解決

Unity で Android アプリをビルドする際、複数の SDK が同じ推移的依存関係を含めていることが原因で「Duplicate class」(重複クラス) エラーが発生する場合があります。これは、AppLovin SDK と Singular SDK の両方を使用している場合に、Android Vending Licensing ライブラリでよく発生します。

エラーの例:

Duplicate class com.android.vending.licensing.ILicensingService found in modules
applovin-sdk-13.5.0.aar -> jetified-applovin-sdk-13.5.0-runtime (com.applovin:applovin-sdk:13.5.0)
and singular_sdk-12.11.0.aar -> jetified-singular_sdk-12.11.0-runtime (com.singular.sdk:singular_sdk:12.11.0)

解決策 1: External Dependency Manager (EDM4U) を使用する

プロジェクトで External Dependency Manager for Unity を使用している場合 (推奨)、Dependencies XML ファイルに除外ルールを追加します。

  1. Unity プロジェクト内の *Dependencies.xml ファイルを見つけます (通常は Assets/Editor または同様の場所にあります)。
  2. いずれかの SDK 依存関係に除外ルールを追加します:
XML
<dependencies>
  <androidPackages>
    <androidPackage spec="com.applovin:applovin-sdk:13.5.0">
      <androidSdkPackageIds>
        <exclude group="com.android.vending" module="licensing"/>
      </androidSdkPackageIds>
    </androidPackage>
    <androidPackage spec="com.singular.sdk:singular_sdk:12.11.0" />
  </androidPackages>
</dependencies>

注: Android Resolver は解決処理中にカスタムテンプレートの変更を上書きする場合があるため、この方法は Gradle テンプレートを変更するよりも永続的です。

解決策 2: カスタム Gradle テンプレートを使用する

EDM4U を使用していない場合は、Gradle 設定ファイルに直接除外ルールを適用します。

  1. File > Build Settings > Player Settings > Publishing Settings に移動します。
  2. 「Custom Main Gradle Template」 または 「Custom Launcher Gradle Template」 を有効にします。
  3. Assets/Plugins/Android/mainTemplate.gradle (または launcherTemplate.gradle ) を開きます。
  4. 依存関係ブロックに除外ルールを追加します:
Gradle
dependencies {
    implementation('com.applovin:applovin-sdk:13.5.0') {
        exclude group: 'com.android.vending', module: 'licensing'
    }
    implementation 'com.singular.sdk:singular_sdk:12.11.0'
}

代替方法: 依存関係ブロックの後に次を追加して、グローバルな除外を適用します:

Gradle
configurations.all {
    exclude group: 'com.android.vending', module: 'licensing'
}

解決を確認する

  1. 除外を適用した後、 Library/Bee フォルダと Temp フォルダを削除してプロジェクトをクリーンにします。
  2. Unity で Android プロジェクトを再ビルドします。
  3. ビルド出力に重複クラスエラーが表示されなくなったことを確認します。

なぜこれで解決するのか: 両方の SDK が、同じ Android licensing ライブラリを推移的依存関係としてバンドルしています。除外を設定することで、Gradle に 1 つのコピーのみを使用するよう指示し、競合を解決します。

ProGuard の設定

プロジェクトでコードの難読化に ProGuard を使用している場合は、Singular SDK が削除されないように、次の keep ルールを proguard-unity.txt ファイルに追加してください:

proguard-unity.txt
-keep class com.singular.sdk.** { *; }
-keep public class com.android.installreferrer.** { *; }
-keep public class com.singular.unitybridge.** { *; }

iOS 設定のヒント

アトリビューション、ディープリンク、テスト機能が適切に動作するように、iOS 固有の設定を構成してください。

CocoaPods 依存関係の更新

Unity プロジェクトを iOS 向けにビルドした後、Xcode でビルドする前に、最新の SDK バージョンを取得するために CocoaPods 依存関係を更新してください。

Terminal
cd /path/to/your/ios/project
pod repo update
pod update
テスト用に IDFV をログ出力する

統合をテストするため、IDFV (Identifier for Vendor) をログ出力して、Singular SDK Console にテストデバイスをすばやく追加できます。

IDFV ログ出力を追加する

  1. Unity からビルドした後、Xcode プロジェクトを開きます。
  2. Classes > UnityAppController.mm に移動します。
  3. applicationDidBecomeActive メソッドを見つけます。
  4. IDFV をログ出力するために、次のコードを追加します:
Objective-C
// Log IDFV for testing
NSLog(@"Singular === IDFV: %@", [[[UIDevice currentDevice] identifierForVendor] UUIDString]);
  1. Xcode でアプリをビルドして実行します。
  2. Xcode コンソールログで IDFV の出力を確認します。
  3. IDFV をコピーし、 Singular SDK Console にテストデバイスとして追加します。
ディープリンクサポートの設定

Xcode プロジェクトで Associated Domains を設定して、ディープリンク用の Universal Links を有効にします。

  1. Associated Domain を追加する: Xcode で、アプリターゲットの Signing & Capabilities タブに移動します。
  2. 機能を有効にする: [+] Capability をクリックし、 「Associated Domains」 を追加します。
  3. ドメインを追加する: Singular のトラッキングドメインを次の形式で追加します: applinks:yourdomain.sng.link
  4. Team ID を設定する: Singular ダッシュボードで、アプリの設定に移動して Apple Team ID を追加します。これにより、Singular は Universal Links に必要な Apple App Site Association (AASA) ファイルを生成してホストできるようになります。

重要: Associated Domains と Team ID が適切に設定されていないと、Universal Links は機能せず、ユーザーは Singular トラッキングリンクからアプリを開くことができません。

⚠️ 重要: UnityAppController の競合の解決

UnityAppController を登録する他の SDK (Firebase、Adjust、AppsFlyer など) を使用している場合、Singular が正しく初期化されない競合が発生する可能性があります。Unity では、一度に 1 つのクラスのみが UnityAppController として登録できます。

この競合を解決するには:

  1. 開く: Xcode プロジェクトの SingularSwizzledAppController.m ファイルを開きます。
  2. このファイル内のすべてのコードのコメントを解除します。
  3. 開く: SingularAppDelegate.m を開き、次の行がコメントアウトされていないことを確認します:
    IMPL_APP_CONTROLLER_SUBCLASS(SingularAppDelegate)

これにより、UnityAppController をサブクラス化する代わりにメソッドスウィズリングを使用することで、Singular が他の SDK と並行して動作できるようになります。


SDK を統合する

SingularSDK GameObject を作成する

Singular SDK が機能するには、Unity シーン階層に GameObject が必要です。提供されているプレハブを使用するか、手動で作成して、この GameObject を追加できます。

方法 1: Singular プレハブを使用する (推奨)

プレハブをシーンに追加する

  1. Project ペインで、 Packages > Singular > SingularSDK > Prefabs に移動します。
  2. SingularSDKObject プレハブを Hierarchy ペインにドラッグします。
  3. これでプレハブを Inspector で設定する準備が整いました。
方法 2: GameObject を手動で作成する

GameObject の手動作成

  1. Hierarchy ペインで右クリックし、 Create Empty を選択します。
  2. GameObject に SingularSDKObject と名前を付けます (正確な名前が必要です)。
  3. GameObject を選択した状態で、 Inspector ペインに移動します。
  4. Add Component をクリックします。
  5. 「Singular」 を検索し、 Singular SDK スクリプトコンポーネントを選択します。

重要: SDK が適切に機能するには、GameObject に正確に SingularSDKObject という名前を付ける必要があります。

SDK 設定を構成する

Unity Inspector を通じて、SDK の認証情報と初期化設定を構成します。SDK が Singular のサーバーと通信するには、API Key と Secret が必要です。

API 認証情報を追加する

  1. SingularSDKObject を選択する: Hierarchy 内の SingularSDKObject をクリックします。
  2. 認証情報を見つける: Singular アカウント にログインし、 Developer Tools > SDK Integration > SDK Keys に移動します。
  3. キーをコピーする: SDK Key SDK Secret をコピーします。
  4. Inspector に貼り付ける: Unity の Inspector ペインで、認証情報を Singular API Key Singular API Secret のフィールドに貼り付けます。

重要: Singular Reporting API Key は使用しないでください。SDK Integration ページの SDK 専用 API Key と Secret のみを使用してください。誤った認証情報を使用すると、データが Singular に送信されなくなります。

統合を検証する: 設定後、 Singular SDK Console を使用して実装をテストし、イベントが正しく追跡されていることを確認してください。

デフォルトの Inspector 設定

SingularSDKObject には適切なデフォルト値が設定されています。これらの設定を理解することで、アプリの要件に合わせて SDK の動作をカスタマイズできます。

デフォルトの設定オプション
  • Initialize On Awake: デフォルトで有効です。GameObject が起動すると SDK が自動的に初期化されます。プライバシー同意やその他の要件のために初期化を遅延させる必要がある場合は、これを無効にしてください。
  • SKAN Enabled: デフォルトで有効です (iOS のみ)。Managed Mode での SKAdNetwork アトリビューションを有効にします。このモードでは、Singular が設定したコンバージョンモデルに基づいてコンバージョン値を自動的に更新します。
  • Wait For Tracking Authorization: 0 (無効) に設定されています。アプリで iOS App Tracking Transparency (ATT) プロンプトを表示する場合は、これを 300 秒に設定してください。これにより、ユーザーが ATT プロンプトに応答するまで SDK セッションが遅延され、同意が得られた場合に IDFA を取得できるようになります。ATT を使用しない場合は 0 のままにします。
  • Enable Logging: デフォルトで有効です。統合とトラブルシューティングに役立つ SDK のデバッグログを出力します。本番ビルドでは無効にしてください。 Log Level 設定と連動して機能します (下記参照)。
  • Log Level: デフォルトで 3 (Info) に設定されています。ログの詳細度を制御します。数値が小さいほど詳細なログが出力されます:
    C#
    // Based on Android Logger log levels
    public enum LogLevel {
       Verbose = 2,  // Most verbose
       Debug   = 3,
       Info    = 4,  // Default
       Warn    = 5,
       Error   = 6,
       Assert  = 7   // Least verbose
    }

    注: 詳細なログは主に Android で利用できます。

  • DDL Timeout Sec: 0 (60 秒のデフォルトを使用) に設定されています。SDK がサーバーからの deferred deep link データを待機する時間を決定します。このタイムアウト後に deferred deep link が見つからない場合、サーバーは検索を停止します。
  • Session Timeout Sec: 0 (60 秒のデフォルトを使用) に設定されています。フォアグラウンドに戻ったときに SDK が新しいセッションを作成するまでに、アプリをバックグラウンドにできる時間を定義します。
  • Shortlink Resolve Timeout: 0 (10 秒のデフォルトを使用) に設定されています。短縮リンクの解決を待機する最大時間です。短縮リンクを解決できない場合に長時間待機することを防ぎ、ユーザー体験を保護します。

その他の設定オプション

Facebook (Meta) Install Referrer の設定

2025 年 6 月 18 日より: Meta の Advanced Mobile Measurement (AMM) により、Meta Install Referrer を実装する必要がなくなりました。AMM レポートが有効になっている場合は、Meta Install Referrer を設定する必要はありません。

従来の Meta Install Referrer アトリビューション方式をサポートする必要がある場合は、SingularSDKObject の設定に Facebook App ID を追加してください。

設定手順

  1. シーン階層内の SingularSDKObject を選択します。
  2. Inspector ペインで、 「Facebook App ID」 フィールドを見つけます。
  3. Facebook App ID を入力します (Facebook Developer Console で確認できます)。

追加リソース:


SDK を初期化する

プライバシー法令の遵守: Singular SDK を実装する際は、GDPR、CCPA、COPPA など、事業を展開する地域のプライバシー法を遵守してください。ガイダンスについては、 SDK のオプトインとオプトアウトの方法 を参照してください。

アプリが起動するたびに Singular SDK を初期化してください。SDK の初期化は、すべての Singular アトリビューション機能に不可欠であり、ユーザーリテンション指標を計算するための新しいセッションを作成します。

自動初期化

デフォルトでは、 SingularSDK.cs スクリプトは、シーンがロードされるときに Unity の Awake() メソッドを通じて SDK を自動的に初期化します。Inspector で Initialize On Awake が有効になっている場合は、追加のコードは必要ありません。

手動初期化

特定のタイミングで (たとえば、ユーザーの同意を得た後に) SDK を初期化する必要がある場合は、自動初期化を無効にして、初期化メソッドを手動で呼び出してください。

手動初期化のセットアップ

  1. シーン階層内の SingularSDKObject を選択します。
  2. Inspector ペインで、 Initialize On Awake のチェックを外します。
  3. 初期化の準備ができたら、コード内で SingularSDK.InitializeSingularSDK() を呼び出します。

InitializeSingularSDK メソッド

自動初期化が無効になっている場合に、このメソッドを使用して SDK を手動で初期化します。

C#
using UnityEngine;
using Singular;

public class GameInitializer : MonoBehaviour
{
    void Start()
    {
        // Perform any required setup (e.g., consent management)
        CheckUserConsent();

        // Initialize Singular SDK after consent is obtained
        // SDK Key and Secret are configured on the SingularSDKObject
        SingularSDK.InitializeSingularSDK();
    }

    void CheckUserConsent()
    {
        // Your consent logic here
    }
}

スレッドセーフティ: Singular Unity SDK のメソッドは、常に他の Unity API 呼び出しに使用するスレッドと同じスレッドから呼び出してください。SDK は複数スレッドにわたってスレッドセーフではありません。


高度な設定

Google Ads iOS Integrated Conversion Measurement に必須

アプリで iOS 14.5 以降のユーザーをターゲットとする Google Ads キャンペーンを実施する場合、iOS Integrated Conversion Measurement (ICM) をサポートするために、追加の SDK 設定ステップが必要です。これには次が含まれます:

  • Google の On-Device Measurement (ODM) SDK の統合
  • Singular iOS SDK v12.8.1 以降 (Unity の場合は v5.5.0 以降、Flutter/Cordova の場合は v1.8.0 以降、React Native の場合は v3.9.0 以降) へのアップデート
  • -ObjC リンカーフラグの追加と、 SingularConfig での enableOdmWithTimeoutInterval の有効化

注: enableOdmWithTimeoutInterval を有効にすると SDK の初期化が遅延し、ディープリンクのコールバックが先送りされる場合があります。手戻りを避けるため、このセットアップは SDK の初期実装時に完了してください。

iOS ICM の技術要件の全文を見る


セッションタイムアウトを設定する

アプリがフォアグラウンドに戻ったときに SDK が新しいセッションを作成するまでに、アプリをバックグラウンドに置いておける時間をカスタマイズします。

セッションタイムアウトの設定

デフォルトのセッションタイムアウトは 60 秒です。この値を変更するには:

  1. シーン階層内の SingularSDKObject を選択します。
  2. Inspector ペインで、 Session Timeout Sec フィールドを見つけます。
  3. 希望するタイムアウト値を秒単位で入力します (例: 2 分の場合は 120)。
  4. デフォルトの 60 秒のタイムアウトを使用する場合は 0 のままにします。

ベストプラクティス: セッションタイムアウトを設定する際は、アプリの一般的な利用パターンを考慮してください。短いセッションが頻繁に発生するゲームでは短めのタイムアウトが有効な場合があり、生産性向上アプリでは長めのタイムアウトが必要な場合があります。


.unitypackage から UPM へのアップグレード

従来の .unitypackage インストール方式から最新の Unity Package Manager (UPM) 方式に移行する場合は、次の重要なアップグレード手順に従ってください。

移行手順: .unitypackage から UPM へ

重要: UPM パッケージをインストールする前に、既存の Singular SDK ファイルをすべて手動で削除する必要があります。これを怠ると、競合やビルドエラーが発生します。

アップグレード手順

Unity Package Manager 経由で SDK をインストールする前に、これらの手順を順番に完了してください:

ステップバイステップのファイル削除

1. コードファイルを削除する

プロジェクトの /Code フォルダ (通常は Assets/Singular/Code ) に移動し、Singular 関連のすべての C# スクリプトを削除します。

2. Android 依存関係を削除する

/Plugins/Android に移動し、次の Singular ファイルを削除します:

  • 名前に「singular」を含むすべての .aar ファイル
  • 名前に「singular」を含むすべての .jar ファイル
  • singular-sdk.aar
  • install-referrer-*.aar
  • singular-unitybridge.aar

3. iOS 依存関係を削除する

/Plugins/iOS に移動し、次の Singular ファイルを削除します:

  • すべての .h ヘッダーファイル (例: SingularSDK.h )
  • すべての .m 実装ファイル (例: SingularUnityBridge.m )
  • Singular.xcframework フォルダ

重要: Singular 固有のファイルのみを削除してください。プロジェクトが依存している他のプラグインファイルを削除しないように注意してください。

4. クリーンな状態を確認する

  1. ファイルを削除した後、Unity を完全に閉じます。
  2. Unity にアセットの再インポートを強制するため、プロジェクトディレクトリ内の Library フォルダを削除します。
  3. Unity プロジェクトを再度開きます。
  4. Unity がアセットの再インポートを完了するまで待ちます。
  5. UPM インストールに進む前に、コンパイルエラーがないことを確認します。

5. UPM パッケージをインストールする

これで、Unity Package Manager 経由で Singular SDK をインストールする準備が整いました。このガイドの冒頭にある UPM インストール手順 に従ってください。