使ってみる

このガイドでは、ネイティブ広告アドオンを使用して AdMob ネイティブ広告を Unity アプリに実装する方法と、その過程で考慮すべき重要な点について説明します。

ネイティブ広告は、広告掲載場所でユーザーが体験しているデザインと機能の両方にマッチするフォーマットです。また、配信中のアプリのビジュアル デザインにもマッチします。 AdMob のネイティブ広告フォーマットを使用すると、コンテンツに自然になじむ広告を表示できます。このテクノロジーを使用すると、Unity アプリのネイティブ コードを最大限に活用して高度なカスタム レンダリングを実装できます。

ネイティブ広告は、すでに作成しているアプリと同じタイプの GameObjects を使用して表示され、ユーザー エクスペリエンスのビジュアル デザインに合わせてフォーマットできます。ネイティブ広告が読み込まれると、アプリはそのアセットを含むネイティブ オブジェクトを受け取り、(SDK ではなく)Unity アプリによって広告が表示されます。

前提条件

  • Google Mobile Ads Unity プラグイン バージョン 7.0.0 以降。
  • スタートガイドを完了している。
  • ネイティブ広告アドオンをダウンロードしてインストールします。

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

ネイティブ広告は、AdLoader クラスを介して読み込まれます。このクラスには、作成時にカスタマイズするための独自の AdLoader.Builder クラスがあります。ForNativeAd() メソッドは、ネイティブ広告を処理するように AdLoader を設定します。

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

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

ネイティブ広告の読み込みが成功または失敗したときに通知を受け取るには、下記のイベントの AdLoader クラスにデリゲートを追加します。

OnNativeAdLoaded

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

OnAdFailedToLoad

ネイティブ広告の読み込みに失敗したときに呼び出されます。

広告を読み込む

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

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

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

以下のコード スニペットは、ネイティブ広告をリクエストするように設定され、広告の読み込みの成功と失敗に対するデリゲートの設定、広告リクエストの送信を行う AdLoader の作成方法を示しています。

private void RequestNativeAd() {
    AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
        .ForNativeAd()
        .Build();
    adLoader.OnNativeAdLoaded += this.HandleNativeAdLoaded;
    adLoader.OnAdFailedToLoad += this.HandleAdFailedToLoad;
    adLoader.LoadAd(new AdRequest.Builder().Build());
}

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

OnAdFailedToLoad イベントのタイプは EventHandle<AdFailedToLoadEventArgs> です。このイベントから広告の読み込みに失敗した理由を解析すると、次のようになります。

private void RequestNativeAd() {
    ...
    adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}

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

ネイティブ広告を表示する

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

広告の読み込みを処理する

OnNativeAdLoaded イベントのタイプは EventHandler<NativeAdEventArgs> です。次に示すように、広告は NativeAd オブジェクトにカプセル化され、NativeAdEventArgs から取得できます。

private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
}

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

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

private bool nativeAdLoaded;
private NativeAd nativeAd;

void Update() {
    ...

    if (this.nativeAdLoaded) {
        this.nativeAdLoaded = false;
        // Get Texture2D for the icon asset of native ad.
        Texture2D iconTexture = this.nativeAd.GetIconTexture();

        // Get string for headline asset of native ad.
        string headline = this.nativeAd.GetHeadlineText();
    }
}

private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
    this.nativeAdLoaded = true;
}

広告アセットには、Unity スクリプトの Update() メソッドなど、メインスレッドでのみアクセスします。また、次のアセットが常に存在するとは限りません。表示する前に確認する必要があります。

  • GetStarRating()
  • GetStore()
  • GetPrice()
  • GetAdvertiser()
  • GetIconTexture()

AdChoices アセット

AdChoices 広告アセットはネイティブ広告の一部として表示する必要があります。 また、AdChoices 広告アセットは見やすいことが重要です。適切な背景色と画像を選択してください。

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

Unity アプリに表示される広告アセットの GameObject を登録する必要があります。登録が成功すると、GameObject の登録に使用されたメソッドから bool が返されます。List<GameObject> の場合、このメソッドは、正常に登録された GameObject 数を示す int を返します。

広告アセットの登録に失敗した場合、対応するネイティブ広告のインプレッションとクリックは認識されません。

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

広告アセットに登録する GameObject には、GameObject のサイズと形状を表す凸型コライダー コンポーネントが必要です。広告アセットに登録されている 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.nativeAd.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 bool nativeAdLoaded;
private NativeAd nativeAd;
...
void Update() {
    ...

    if (this.nativeAdLoaded) {
        this.nativeAdLoaded = false;
        // Get Texture2D for icon asset of native ad.
        Texture2D iconTexture = this.nativeAd.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 native ad.
        if (!this.nativeAd.RegisterIconImageGameObject(icon))
        {
            // Handle failure to register ad asset.
        }
    }
}
...

private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
    this.nativeAdLoaded = true;
}