Google Mobile Ads SDK についてのフィードバックをお寄せください。年次アンケート

ネイティブ アドバンス広告

このガイドでは、Google Mobile Ads Unity プラグインを使用して Unity アプリに AdMob ネイティブ アドバンス広告を実装する方法と、その過程で注意すべき事項を説明します。

ネイティブ広告は、広告が掲載される場所のユーザー エクスペリエンスに、形式と機能の両面でマッチするフォーマットです。掲載先のアプリの視覚的なデザインにもマッチします。パブリッシャー様は AdMob のネイティブ アドバンス広告のフォーマットを使って、コンテンツと調和した広告を掲載できます。Unity アプリのネイティブ コードを最大限に活用し、表示方法を詳細にカスタマイズできます。

ネイティブ アドバンス広告は、作成中のアプリと同じ種類の GameObjects を使って表示され、ユーザー エクスペリエンスの視覚デザインに溶け込むようフォーマットできます。ネイティブ広告の読み込み時に、アプリが広告のアセットを含むネイティブ広告オブジェクトを受け取ります。そして Unity アプリ(SDK ではなく)で広告表示の処理が行われます。

標準的なネイティブ アドバンス広告のフィールドには、アプリ インストールとコンテンツの 2 つがあります。 アプリ インストール広告は NativeAppInstallAd で、コンテンツ広告は NativeContentAd で表されます。これらのオブジェクトには、ネイティブ広告のアセットが格納されています。

前提条件

ネイティブ広告フォーマットを読み込む

ネイティブ アドバンス広告の読み込みには、AdLoader クラスを使用します。このクラスには、作成時にカスタマイズするための独自の AdLoader.Builder クラスが含まれます。ForNativeAppInstallAd() メソッドは、AdLoader を設定してアプリ インストール広告を処理します。ForNativeContentAd() は、AdLoader を設定してコンテンツ広告を処理します。

private void RequestNativeAd() {
    AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
        .ForNativeAppInstallAd()
        .ForNativeContentAd()
        .Build();
}

AdLoader 広告イベントに登録する

ネイティブ アドバンス広告の読み込み成否通知を受け取るには、下記のイベントの AdLoader クラスにデリゲートを追加します。

OnNativeAppInstallAdLoaded
ネイティブ アプリ インストール広告が正常に読み込まれたときに呼び出されます。読み込まれた広告にアクセスするには、このイベントのデリゲートが必要です。
OnNativeContentAdLoaded
ネイティブ コンテンツ広告が正常に読み込まれたときに呼び出されます。読み込まれた広告にアクセスするには、このイベントのデリゲートが必要です。
OnAdFailedToLoad
ネイティブ広告の読み込みに失敗したときに呼び出されます。

広告の読み込み

AdLoader の作成が完了したら、その LoadAd() メソッドを呼び出して広告をリクエストします。

adLoader.LoadAd(new AdRequest.Builder().Build());

広告リクエストをまとめる

以下のコード スニペットは、AdLoader を作成して、アプリ インストール広告やコンテンツ広告をリクエストするよう設定する方法を示しています。また、広告の読み込みの成否を通知するデリゲートを設定したり、広告リクエストを行ったりする方法も示しています。

private void RequestNativeAd() {
    AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
        .ForNativeAppInstallAd()
        .ForNativeContentAd()
        .Build();
    adLoader.OnNativeAppInstallAdLoaded += this.HandleNativeAppInstallAdLoaded;
    adLoader.OnNativeContentAdLoaded += this.HandleNativeContentAdLoaded;
    adLoader.LoadAd(new AdRequest.Builder().Build());
}

失敗した広告の読み込みを処理する

OnAdFailedToLoad は、EventHandler<AdFailedToLoadEventArgs> タイプのイベントです。このイベントからの広告の読み込みの失敗の理由を解析する方法を以下に示します。

private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
    MonoBehaviour.print("Native ad failed to load: " + args.Message);
}

広告を表示する

ネイティブ アドバンス広告が読み込まれると、対応する広告フォーマットの広告イベントが呼び出されます。その後アプリが広告を表示しますが、すぐに表示する必要があるとは限りません。

アプリ インストール広告の読み込みを処理する

OnNativeAppInstallAdLoaded は、EventHandler<NativeAppInstallAdEventArgs> タイプのイベントです。次に示すように、アプリ インストール広告は NativeAppInstallAd オブジェクトにカプセル化され、NativeAppInstallAdEventArgs から取得できます。

private NativeAppInstallAd appInstallAd;
...
private void HandleNativeAppInstallAdLoaded(object sender, NativeAppInstallAdEventArgs args) {
    MonoBehaviour.print("App install ad loaded.");
    this.appInstallAd = args.nativeAd;
}

コンテンツ広告の読み込みを処理する

OnNativeContentAdLoaded は、EventHandler<NativeContentAdEventArgs> タイプのイベントです。次に示すように、コンテンツ広告は NativeContentAd オブジェクトにカプセル化され、NativeAppInstallAdEventArgs から取得できます。

private void HandleNativeContentAdLoaded(object sender, NativeContentAdEventArgs args) {
    MonoBehaviour.print("Content ad loaded.");
    this.contentAd = args.nativeAd;
}

ネイティブ広告アセットを取得する

広告が読み込まれると、そのアセットには以下に示すようにアクセスできます。画像アセットと映像アセットは Texture2D オブジェクトとして返され、テキスト アセットは string オブジェクトとして返されます。

private bool appInstallAdLoaded;
private NativeAppInstallAd appInstallAd;
...
void Update() {
    ...

    if (this.appInstallAdLoaded) {
        this.appInstallAdLoaded = false;
        // Get Texture2D for icon asset of app install ad.
        Texture2D iconTexture = this.appInstallAd.GetIconTexture();

        // Get string for headline asset of app install ad.
        string headline = this.appInstallAd.GetHeadlineText();
    }
}
...

private void HandleNativeAppInstallAdLoaded(object sender, NativeAppInstallAdEventArgs args) {
    MonoBehaviour.print("App install ad loaded.");
    this.appInstallAd = args.nativeAd;
    this.appInstallAdLoaded = true;
}

広告アセットにアクセスできるのは、Unity スクリプトの Update() メソッドからのみです。

AdChoices アセット

AdChoices 広告アセットは、ネイティブ アドバンス広告の一部として表示することが必須となっています。また、AdChoices オーバーレイは簡単に判別できることが重要なため、適切な背景色と背景画像を選択します。

広告アセットの GameObjects を登録する

表示される各広告アセットに対して、Unity アプリ内でのアセットの表示に使用する GameObject を登録する必要があります。GameObject を広告アセットに登録するすべてのメソッドは、登録が成功したかどうかを示す bool を返します。広告アセットの登録に失敗した場合、対応するネイティブ広告のインプレッションとクリックは認識されません。

if (!this.appInstallAd.RegisterIconImageGameObject(icon))
{
    // Handle failure to register ad asset.
}

広告アセットに登録される GameObject には、GameObject のサイズと形状を表すコンベックス型 Collider コンポーネントが必要です。広告アセットに登録された GameObject オブジェクトに Collider コンポーネントが存在しないか、正しく設定されていない場合、ネイティブ アドバンス広告は正しく動作しません。

以下のコード スニペットでは、BoxColliderGameObject に追加され、TextMesh を使ってアプリ インストール広告の広告見出し広告アセットを表示します。BoxColliderGameObject に追加されると、自動的に TextMesh コンポーネントのテキストを収容するように大きさが調整されます。

// Create GameObject that will display the headline ad asset.
GameObject headline = new GameObject();
headline.AddComponent<TextMesh>();
headline.GetComponent<TextMesh>().characterSize = 0.5 f;
headline.GetComponent<TextMesh>().anchor = TextAnchor.MiddleCenter;
headline.GetComponent<TextMesh>().color = Color.black;

// Get string of the headline asset.
string headlineText = this.appInstallAd.GetHeadlineText();
headline.GetComponent<TextMesh>().text = headlineText;

// Add box collider to the GameObject which will automatically scale.
headline.AddComponent<BoxCollider>();

デモ

以下のコードは、問題なく読み込まれたアプリ インストール広告のアイコン アセットを取得し、Quad のテクスチャを設定してアイコン広告アセットを表示する方法を示しています。また、アセットの表示に使用する GameObject を登録する方法も示しています。広告アセットを取得してネイティブ広告クラスに登録するこのプロセスは、アプリが表示するアセットごとに繰り返されます。

private GameObject icon;
private NativeAppInstallAd appInstallAd;
private bool appInstallAdLoaded;
...
void Update() {
    ...

    if (this.appInstallAdLoaded) {
        this.appInstallAdLoaded = false;
        // Get Texture2D for icon asset of app install ad.
        Texture2D iconTexture = this.appInstallAd.GetIconTexture();

        icon = GameObject.CreatePrimitive(PrimitiveType.Quad);
        icon.transform.position = new Vector3(1, 1, 1);
        icon.transform.localScale = new Vector3(1, 1, 1);
        icon.GetComponent<Renderer>().material.mainTexture = iconTexture;

        // Register GameObject that will display icon asset of app install ad.
        if (!this.appInstallAd.RegisterIconImageGameObject(icon))
        {
            // Handle failure to register ad asset.
        }
    }
}
...

private void HandleNativeAppInstallAdLoaded(object sender, NativeAppInstallAdEventArgs args) {
    MonoBehaviour.print("App install ad loaded.");
    this.appInstallAd = args.nativeAd;
    this.appInstallAdLoaded = true;
}