インタースティシャル広告

インタースティシャル広告は、ホストアプリのインターフェースを覆うようにフルスクリーンで表示される広告です。 通常、アプリの操作中に画面が自然に切り替わるタイミングで表示されます。 たとえば、ゲームのレベルが切り替わる合間の一時停止などです。アプリに ユーザーは広告をタップして アプリを閉じてからアプリに戻ります。

このガイドでは、インタースティシャル広告を Unity アプリに組み込む方法について説明します。

前提条件

必ずテスト広告でテストする

次のサンプルコードには、広告ユニット ID が含まれています。この ID を使用して、 テスト広告。これは、特定の要素の代わりにテスト広告を返すように 安全に使用できます。

ただし、 独自の広告ユニットを作成し アプリで使用する ID。デバイスをテスト用として明示的に設定します デバイス 必要があります。

Mobile Ads SDK を初期化する

広告を読み込む前に、以下を呼び出して Mobile Ads SDK を初期化します。 MobileAds.Initialize()。この処理は 1 回だけ行います(アプリの起動時に行うのが理想的です)。

using GoogleMobileAds;
using GoogleMobileAds.Api;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    public void Start()
    {
        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize((InitializationStatus initStatus) =>
        {
            // This callback is called once the MobileAds SDK is initialized.
        });
    }
}

メディエーションを使用している場合は、コールバックが発生するのを待ってから、広告を これにより、すべてのメディエーション アダプタが確実に初期化されます。

実装

インタースティシャル広告を実装する主な手順は次のとおりです。

  1. インタースティシャル広告を読み込む
  2. インタースティシャル広告を表示する
  3. インタースティシャル広告イベントをリッスンする
  4. インタースティシャル広告をクリーンアップする
  5. 次のインタースティシャル広告をプリロードする

インタースティシャル広告を読み込む

インタースティシャル広告を読み込むには、Load() InterstitialAd クラス。読み込みメソッドでは、広告ユニット ID、 AdManagerAdRequest オブジェクトと、次の読み込みを行う完了ハンドラ は、広告の読み込みが成功または失敗したときに呼び出されます。読み込まれた AdManagerInterstitialAd オブジェクトは、 完了ハンドラがあります。以下の例は、Python や Curl で AdManagerInterstitialAd


  // This ad unit is configured to always serve test ads.
  private string _adUnitId = "/21775744923/example/interstitial";

  private InterstitialAd _interstitialAd;

  /// <summary>
  /// Loads the interstitial ad.
  /// </summary>
  public void LoadInterstitialAd()
  {
      // Clean up the old ad before loading a new one.
      if (_interstitialAd != null)
      {
            _interstitialAd.Destroy();
            _interstitialAd = null;
      }

      Debug.Log("Loading the interstitial ad.");

      // create our request used to load the ad.
      var adRequest = new AdManagerAdRequest();

      // send the request to load the ad.
      AdManagerInterstitialAd.Load(_adUnitId, adRequest,
          (InterstitialAd ad, LoadAdError error) =>
          {
              // if error is not null, the load request failed.
              if (error != null || ad == null)
              {
                  Debug.LogError("interstitial ad failed to load an ad " +
                                 "with error : " + error);
                  return;
              }

              Debug.Log("Interstitial ad loaded with response : "
                        + ad.GetResponseInfo());

              _interstitialAd = ad;
          });
  }

インタースティシャル広告を表示する

読み込まれたインタースティシャル広告を表示するには、Show() AdManagerInterstitialAd インスタンス。広告は 1 回につき 1 回表示できます 負荷を軽減できます。CanShowAd() メソッドを使用して、広告を表示する準備ができていることを確認します。

/// <summary>
/// Shows the interstitial ad.
/// </summary>
public void ShowInterstitialAd()
{
    if (_interstitialAd != null && _interstitialAd.CanShowAd())
    {
        Debug.Log("Showing interstitial ad.");
        _interstitialAd.Show();
    }
    else
    {
        Debug.LogError("Interstitial ad is not ready yet.");
    }
}

インタースティシャル広告イベントをリッスンする

広告の動作をさらにカスタマイズするには、 広告のライフサイクルで測定されます。委任を登録してこれらのイベントをリッスンする 次のように指定します。

private void RegisterEventHandlers(InterstitialAd interstitialAd)
{
    // Raised when the ad is estimated to have earned money.
    interstitialAd.OnAdPaid += (AdValue adValue) =>
    {
        Debug.Log(String.Format("Interstitial ad paid {0} {1}.",
            adValue.Value,
            adValue.CurrencyCode));
    };
    // Raised when an impression is recorded for an ad.
    interstitialAd.OnAdImpressionRecorded += () =>
    {
        Debug.Log("Interstitial ad recorded an impression.");
    };
    // Raised when a click is recorded for an ad.
    interstitialAd.OnAdClicked += () =>
    {
        Debug.Log("Interstitial ad was clicked.");
    };
    // Raised when an ad opened full screen content.
    interstitialAd.OnAdFullScreenContentOpened += () =>
    {
        Debug.Log("Interstitial ad full screen content opened.");
    };
    // Raised when the ad closed full screen content.
    interstitialAd.OnAdFullScreenContentClosed += () =>
    {
        Debug.Log("Interstitial ad full screen content closed.");
    };
    // Raised when the ad failed to open full screen content.
    interstitialAd.OnAdFullScreenContentFailed += (AdError error) =>
    {
        Debug.LogError("Interstitial ad failed to open full screen content " +
                       "with error : " + error);
    };
}

インタースティシャル広告をクリーンアップする

AdManagerInterstitialAd が終了したら、次のように設定します。 参照を削除する前に、必ず Destroy() メソッドを呼び出します。

_interstitialAd.Destroy();

これにより、オブジェクトが使用されなくなったことがプラグインに通知されます。また、 解放されますこのメソッドを呼び出さないと、メモリリークが発生します。

次のインタースティシャル広告をプリロードする

インタースティシャル広告は 1 回限りのオブジェクトです。つまりインタースティシャル広告を実装すると そのオブジェクトは再使用できません。別のインタースティシャル広告をリクエストするには、 新しい AdManagerInterstitialAd オブジェクトを作成します。

次のインプレッションの機会に備えてインタースティシャル広告を用意するには、 OnAdFullScreenContentClosedまたは OnAdFullScreenContentFailed の広告イベントが発生します。

private void RegisterReloadHandler(InterstitialAd interstitialAd)
{
    // Raised when the ad closed full screen content.
    interstitialAd.OnAdFullScreenContentClosed += ()
    {
        Debug.Log("Interstitial Ad full screen content closed.");

        // Reload the ad so that we can show another as soon as possible.
        LoadInterstitialAd();
    };
    // Raised when the ad failed to open full screen content.
    interstitialAd.OnAdFullScreenContentFailed += (AdError error) =>
    {
        Debug.LogError("Interstitial ad failed to open full screen content " +
                       "with error : " + error);

        // Reload the ad so that we can show another as soon as possible.
        LoadInterstitialAd();
    };
}

アプリ内イベント

アプリイベントを使用すると、アプリコードにメッセージを送信できる広告を作成できます。アプリ はこれらのメッセージに基づいてアクションを実行できます。

アド マネージャー固有のアプリイベントをリッスンするには、AppEvent を使用します。これらのイベントは 読み込みが呼び出される前であっても、広告のライフサイクル中に任意の時点で発生する可能性があります。

namespace GoogleMobileAds.Api.AdManager;

/// The App event message sent from the ad.
public class AppEvent
{
    // Name of the app event.
    string Name;
    // Argument passed from the app event.
    string Value;
}

OnAppEventReceived は、広告でアプリイベントが発生すると発生します。こちらの コード内でこのイベントを処理する方法の例を以下に示します。

_interstitialAd.OnAppEventReceived += (AppEvent args) =>
{
    Debug.Log($"Received app event from the ad: {args.Name}, {args.Value}.");
};

アプリの背景色を変更する方法の例 色の名前で表示されます:

_interstitialAd.OnAppEventReceived += (AppEvent args) =>
{
  if (args.Name == "color")
  {
    Color color;
    if (ColorUtility.TryParseColor(arg.Value, out color))
    {
      gameObject.GetComponent<Renderer>().material.color = color;
    }
  }
};

対応するクリエイティブは次のとおりです。

<html>
<head>
  <script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
      // Send a color=green event when ad loads.
      admob.events.dispatchAppEvent("color", "green");

      document.getElementById("ad").addEventListener("click", function() {
        // Send a color=blue event when ad is clicked.
        admob.events.dispatchAppEvent("color", "blue");
      });
    });
  </script>
  <style>
    #ad {
      width: 320px;
      height: 50px;
      top: 0px;
      left: 0px;
      font-size: 24pt;
      font-weight: bold;
      position: absolute;
      background: black;
      color: white;
      text-align: center;
    }
  </style>
</head>
<body>
  <div id="ad">Carpe diem!</div>
</body>
</html>

ベスト プラクティス

インタースティシャル広告がアプリに適した広告タイプかどうかを判断する。
インタースティシャル広告は、画面の切り替わりがあるアプリで最適に機能します。 画像の共有や ゲームレベルでは、そのようなポイントが生まれます。学習計画で注力すべきポイントを インタースティシャル広告を適切に表示するためのフローと、ユーザーが反応する可能性を把握します。
インタースティシャル広告を表示する際にアクションを一時停止する。
インタースティシャル広告にはさまざまなタイプがあり、テキスト、 画像、動画などですアプリの画面にコードを表示する際は、 リソースの使用を中断して広告が 活用してください。たとえば、スペースを表示するための呼び出しを行うと、 アプリからの音声出力は、必ず一時停止してください。 OnAdFullScreenContentClosed() イベントで音声の再生を再開できます。 ユーザーが広告の操作を終了したときに呼び出すことができます。イン さらに、負荷の高い計算タスクを一時的に停止することを 広告が表示されている間、ゲームループに入ります。これにより ユーザーは グラフィックが遅い、反応しない、動画がスムーズに再生されない。
大量の広告をユーザーに表示することは避けてください。
アプリでインタースティシャル広告の表示頻度を増やすと、 ユーザーエクスペリエンスの低下にも つながります クリック率の低下につながりますユーザーがそれほど頻繁にアクセスしないようにします。 中断されることがなくなります。

参考情報