カスタム イベントを作成

カスタム イベントを使用すると、 Ad Manager 他の第三者広告ネットワーク用にウォーターフォール メディエーションを追加する サポートされている広告ネットワーク このガイドでは、Android 向けに作成された既存のカスタム イベントと、 Unity プロジェクトでのみです。

前提条件

  • スタートガイドの手順を完了します。Unity アプリに Google Mobile Ads Unity プラグインがインポートされている必要があります。

  • Android と iOS 向けにあらかじめ作成されたカスタム イベント アダプタ。カスタム の詳細については、カスタム イベント ガイドをご覧ください。 AndroidiOS

カスタム イベントを定義する

カスタム イベントをメディエーションに参加させるには、カスタム イベントが次の条件を満たしている必要があります。 ウェブ インターフェースで Ad Manager 定義します。 カスタム イベントを Android と iOS のメディエーション グループ。

パラメータの入力方法
クラス名(iOS)

iOS の場合は、カスタム イベントを実装するクラスの名前を入力します。

クラスを Swift で実装する場合は、クラス名の先頭に アプリまたはフレームワーク モジュールの名前( appName.className)。

プロジェクトに複数のターゲットがある場合や、 プロジェクト名はターゲット名とは異なります。ターゲット名を使用すると、 appName_targetName.className のようになります。また ダッシュなどの英数字以外の文字は、必ず 使用します。

クラス名(Android) Android の場合は、Class Name に指定する値が次のとおりであることを確認します。 Android の完全修飾クラス名(例: com.google.ads.mediation.sample.customevent.SampleCustomEvent)。
ラベル イベントの一意の名前を入力します。
パラメータ カスタム イベントに文字列引数を渡す場合、たとえば 指定します。

カスタム イベント ライブラリをインポートする

カスタム イベントを機能させるには、追加のライブラリの追加が必要になる場合があります 確認します。たとえば、次のライブラリのインクルードが必要になることがあります。

  • Android サードパーティ SDK
  • Android の第三者カスタム イベント
  • iOS 第三者広告 SDK
  • iOS の第三者カスタム イベント

ライブラリの種類

Android または iOS のコードを Unity プロジェクトにインポートする方法は複数あります。 例:

  • External Dependency を使用してビルド済みの Android または iOS アーティファクトをインポートする Unity 用マネージャー
  • AAR プラグインと Android ライブラリをインポートする
  • Java と Kotlin のソースファイルをインポートする
  • iOS ソースファイルと静的ライブラリをインポートする

使用するライブラリのパッケージ化方法によっては、 インポート戦略を指定します。各オプションについては、後で詳しく説明します。

(推奨)ビルド済みの Android または iOS アーティファクトをインポートする

External API を使用して、Maven または CocoaPods からビルド済みのアーティファクトをインポートする Dependency Manager for Unity。 このプラグインは、GoogleMobileAds プラグインに含まれています。

既存のアーティファクトをインポートするには、構成ファイルを作成して インポートします。ファイル名とパスには次の要件があります。

  • このファイルは /Editor/ フォルダ内に存在する必要があります。
  • ファイル名は Dependencies.xml で終わる必要があります。

たとえば、架空の広告ネットワーク用にカスタム イベントのアダプタをインポートする場合、 AdPub という名前で次のファイルを作成します。

Assets/AdPub/Editor/AdPubDependencies.xml

次に、AdPubDependencies.xml ファイル内で依存関係を定義します。ルール 設定方法については、このモジュールの Unity 用 External Dependency Manager を入手する Started(開始)。「 Android と iOS の SDK とカスタム イベントを含むコード スニペット (例: 仮の「AdPub」用)のライブラリあります

Assets/AdPub/Editor/AdPubDependencies.xml

<dependencies>
  <androidPackages>
    <androidPackage spec="com.adpub.android:adpub-sdk:1.0.0" />
    <androidPackage spec="com.adpub.android:adpub-custom-event:1.0.0">
      <repositories>
        <repository>https://repo.maven.apache.org/maven2/</repository>
        <repository>https://dl.google.com/dl/android/maven2/</repository>
      </repositories>
    </androidPackage>
  </androidPackages>
  <iosPods>
    <iosPod name="AdPubSDK" version="1.0" />
    <iosPod name="AdPubCustomEvent" version="1.0">
      <sources>
        <source>https://github.com/CocoaPods/Specs</source>
      </sources>
    </iosPod>
  </iosPods>
</dependencies>

カスタム イベント アーティファクトが必要な広告とすでに依存関係がある場合 SDK の依存関係を明示的に定義する必要はありません。

External Dependency Manager は構成の変更を自動的にモニタリングします 依存関係を解決します 次のコマンドを実行します。

Assets > External Dependency Manager > Android Resolver > Force Resolve

AAR プラグインと Android ライブラリをインポートする

Unity は、*.aar ファイルと Android ライブラリ プロジェクトのインポートをサポートしています。条件 (AAR プラグインと Android ライブラリをご覧ください。 それらのファイルを Unity プロジェクトに含める方法を確認します。

Java と Kotlin のソースファイルをインポートする

Unity 2018.2 以降で、Android カスタム イベント コードが コンパイルされていない *.java または *.kt ファイルがある場合は、Java または Kotlin のソースファイル 使用しないでください

iOS ソースファイルと静的ライブラリをインポートする

Unity は、*.framework アーティファクト、*.h*.m ソースファイルをサポートしています。インポート中 iOS のアーティファクトとソースファイルについては、Unity のネイティブ プラグインです。

広告インスペクタでカスタム イベントをテストする

広告インスペクタを使用すると、 カスタム イベントがアプリケーションに正しくインポートされていることを確認します。広告 インスペクタはジェスチャーだけで開くことも、最小限のコードでプログラムによって開くこともできます。

(省略可)C# スクリプトからサードパーティ SDK のネイティブ メソッドを呼び出す

第三者広告ネットワーク SDK には特別な要件があり、 Android または iOS のメソッドを直接呼び出すことができます。これらのメソッドを呼び出すプロセスは、 直接次のとおりです。

  1. プラットフォーム クライアントの共通インターフェースを定義する
  2. サポートされていないプラットフォーム用のデフォルト クライアントを実装する
  3. Android メソッドを呼び出すための Android クライアントを実装する
  4. iOS メソッドを呼び出すための iOS クライアントを実装する
  5. クライアント factory を、条件付きで iOS クライアントと Android クライアントを切り替える
  6. 第三者広告ネットワーク SDK のすべての機能にアクセスするための API を定義する

次のセクションでは、これらのステップを 「AdPub」という広告ネットワークです(Android のメソッドを呼び出せる C# API) iOS:

Android

package com.adpub.android;

public class AdPubSdk
{
    public static void setHasUserConsent(boolean hasUserConsent);
}

iOS

@interface AdPubSdk : NSObject
+ (void)setHasUserConsent:(BOOL)hasUserConsent;
@end

プラットフォーム クライアントの共通インターフェースを定義する

基盤となるインフラストラクチャを IAdPubClient Android と iOS の API。

Assets/AdPub/Common/IAdPubClient.cs

namespace AdPub.Common
{
    public interface IAdPubClient
    {
        ///<summary>
        /// Sets a flag indicating if the app has user consent for advertisement.
        ///</summary>
        void SetHasUserConsent(bool hasUserConsent);
    }
}

サポートされていないプラットフォーム用のデフォルト クライアントを定義する

IAdPubClient インターフェースを実装する DefaultClient クラスを作成します。 メソッド名のみをログに記録しますこの実装は、Unity エディタと プラットフォーム(Android または iOS 以外)に対応しています。

Assets/AdPub/Common/DefaultClient.cs

namespace AdPub.Common
{
    public class DefaultClient : IAdPubClient
    {
        public void SetHasUserConsent(bool hasUserConsent)
        {
            Debug.Log("SetHasUserConsent was called.");
        }
    }
}

iOS プラットフォーム クライアントを実装する

IAdPubClient インターフェースを実装する iOSAdPubClient クラスを作成します。 iOS。この実装では、 呼び出す InteropServices iOS の AdPubSdk クラスの setHasUserConsent() メソッド

Assets/AdPub/Platforms/iOS/iOSAdPubClient.cs

// Wrap this class in a conditional operator to make sure it only runs on iOS.
#if UNITY_IOS

// Reference InteropServices to include the DLLImportAttribute type.
using System.Runtime.InteropServices;

using AdPub.Common;

namespace AdPub.Platforms.Android
{
    public class iOSAdPubClient : IAdPubClient
    {
        public void SetHasUserConsent(bool hasUserConsent)
        {
            GADUAdPubSetHasUserConsent(hasUserConsent);
        }

        [DllImport("__Internal")]
        internal static extern void GADUAdPubSetHasUserConsent(bool hasUserConsent);
    }
}
#endif

次に、定義された GADUAdPubSetHasUserConsent() メソッドを実装します。 ご覧ください。C メソッドで AdPubClientBridge.m を作成する GADUAdPubSetHasUserConsent() を使用して Unity からのメソッド呼び出しを処理し、 AdPubSDK

AdPubClientBridge は iOS ソースファイルであり、 Plugins/iOS フォルダ(Unity のネイティブ ガイドを参照) プラグインです。

Assets/AdPub/Plugins/iOS/AdPubClientBridge.m

#import <AdPubSDK/AdPubSDK.h>

void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
  [AdPubSDK setHasUserConsent:hasUserConsent];
}

Android プラットフォーム クライアントを実装する

IAdPubClient インターフェースを実装する AndroidAdPubCient クラスを作成します。 Android。この実装では、 Android Java ヘルパーを使用しています。 クラス Android 静的メソッド setHasUserConsent() を呼び出します。

Android の Java ヘルパークラスは、Android Studio でのみ利用可能であり、 UNITY_ANDROID コンパイラを使用することで、コンパイル エラーを防止できます。 ディレクティブを使用して、 置き換えます。代わりに、アセンブリ 定義 Unity 2017.4 以降でこの問題を解決できます。

Assets/AdPub/Platforms/Android/AndroidAdPubClient.cs

// Wrap this class in a conditional operator to make sure it only runs on Android.
#if UNITY_ANDROID

// Reference the UnityEngine namespace which contains the JNI Helper classes.
using UnityEngine;

using AdPub.Common;

namespace AdPub.Platforms.Android
{
    public class AndroidAdPubClient : IAdPubClient
    {
        public void SetHasUserConsent(bool hasUserConsent)
        {
             // Make a reference to the com.adpub.AdPubSDK.
            AndroidJavaClass adPubSdk = new AndroidJavaClass("com.adpub.AdPubSdk");

            // Call the native setHasUserConsent method of com.adpub.AdPubSDK.
            adPubSdk.CallStatic("setHasUserConsent", hasUserConsent);
        }
    }
}
#endif

正しいクライアント実装を返すファクトリ メソッドを作成する

各プラットフォームのクライアントを実装したので、次は AdPubClientFactory クラスを使用して、 IAdPubClient インターフェース(ランタイム プラットフォームによって異なります)。このクラスで使用する コンパイラ ディレクティブを 正しいクライアントをIAdPubClient返します。

Assets/AdPub/Common/AdPubClientFactory.cs

namespace AdPub.Common
{
    public class AdPubClientFactory
    {
        // Return the correct platform client.
        public static IAdPubClient GetClient()
        {
#if   !UNITY_EDITOR && UNITY_ANDROID
            return new AdPub.Platforms.Android.AndroidAdPubClient();
#elif !UNITY_EDITOR && UNITY_IOS
            return new AdPub.Platforms.iOS.iOSAdPubClient();
#else
            // Returned for the Unity Editor and unsupported platforms.
            return new DefaultClient();
#endif
        }
    }
}

インターフェース メソッドごとに公開 API を定義する

各クライアント メソッドのメソッド呼び出しを持つ AdPubApi クラスを IAdPubClient インターフェース。このクラスは、AdPubClientFactory を使用して IAdPubClient のインスタンスを作成し、基になる SDK のためにそのクライアントを呼び出します。 サポートしています。

Assets/AdPub/AdPubApi.cs

using AdPub.Common;

namespace AdPub
{
    public class AdPubApi
    {
        private static readonly IAdPubClient client = GetAdPubClient();

        // Returns the correct client for the current runtime platform.
        private static IAdPubClient GetAdPubClient()
        {
            return AdPubClientFactory.GetClient();
        }

        // Sets the user consent using the underlying SDK functionality.
        public static void SetHasUserConsent(bool hasUserConsent)
        {
            client.SetHasUserConsent(hasUserConsent);
        }
    }
}

新しく定義した API を呼び出す

上で定義した API を呼び出す方法は次のとおりです。

Assets/Scripts/AdPubController.cs

using UnityEngine;
using AdPub;

public class AdPubController : MonoBehaviour
{
    // TODO: Get consent from the user and update this userConsent field.
    public bool userConsent;

    // Called on startup of the GameObject it's assigned to.
    public void Start()
    {
        // Pass the user consent to AdPub.
        AdPubApi.SetHasUserConsent(userConsent);
    }
}

その他の第三者広告ネットワーク アダプタの例

Google Mobile Ads Unity Plugin GitHub にアクセス リポジトリ で、C# API を実装する第三者メディエーション アダプタのその他の例をご確認ください。 iOS と Android のメソッドの呼び出しをラップします。