広告のプレースメント

このガイドでは、Google Mobile Ads Unity プラグインの広告プレースメント機能を使用して、アプリ用の広告を作成して表示する方法を説明します。

前提条件

Google Mobile Ads Unity Plugin を初期化する

広告を読み込む前に、Google Mobile Ads Unity Plugin を呼び出して MobileAds.Initialize() を初期化します。Action<InitializationStatus> コールバックを使用します。この処理が必要なのは 1 回のみです(できればアプリの起動時に行います)。

using GoogleMobileAds.Api;
using System.Collections.Generic;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    ...
    public void Start()
    {
        // Initialize Google Mobile Ads Unity Plugin.
        MobileAds.Initialize((initStatus) =>
        {
            // SDK initialization is complete
        });
        ...
    }
}

広告プレースメントを作成する

Google Mobile Ads でバナーを表示する最初の手順は、広告プレースメントを作成して設定することです。それには、Unity Editor の [Assets](アセット)> [Google Mobile Ads](Google モバイル広告)> [Ad Placements](広告プレースメント) で、バナー、インタースティシャル、リワードのいずれかのフォーマットの広告プレースメントを選択します。すると、3 つのデモ用広告プレースメントが設定され、使えるようになります。

新しい広告プレースメントを追加するには、リストの末尾にある [Add New Placement](新しいプレースメントを追加)ボタンをクリックします。広告プレースメントは、[Inspector](インスペクタ)ビューで設定できます。

広告プレースメントの設定

各プレースメントには次のプロパティがあります。

プレースメントの名前
プレースメントの名前。シーンで広告を設定するときにプレースメントを識別するために使用します。
広告フォーマット
バナー、リワード、インタースティシャル。広告のタイプ。
広告ユニット ID
Android と iOS のバナー広告ユニット ID を指定します。少なくとも 1 つの広告ユニット ID を指定する必要があります。
シーン間で永続化する
オンにすると、シーンの変更に関係なくバナーが画面に表示され続けます(DontDestroyOnLoad と同じ動作)。
自動読み込みを有効化
オンにすると、広告プレースメントに関連付けられたシーンが読み込まれたときに広告が自動的に読み込まれます。

次のスクリーンショットは、[My Awesome Banner](マイ アメージング バナー)という名前の広告プレースメントの例を示しています。

AdGameObject をシーンに追加する

バナー、インタースティシャル、リワードの各フォーマット用の AdGameObject をシーンに追加するには、Unity Editor の [GameObject](ゲーム オブジェクト)> [Google Mobile Ads](Google モバイル広告) を使って、 フォーマットを選択して、アクティブなシーンにプレースメントを追加します。

AdGameObject をシーンに追加すると、その広告を表す GameObject が Unity Editor の [Hierarchy](階層)ビューに表示されます。

プレースメントの名前を変更するには、GameObject 自体の名前を変更します。次のスクリーンショットは、[Banner Ad](バナー広告)という名前の AdGameObject の例を示しています。

AdGameObject の設定

シーンの AdGameObject は、[Ad Game Object (Script)](広告ゲームオブジェクト(スクリプト))コンポーネントの設定の [Inspector](インスペクタ)ビューで設定できます。

広告であること

設定済みプレースメントのプルダウン リストから、対象の広告プレースメントを選択します。リストには、適切なフォーマットの広告ユニットのみが表示されます。たとえば Banner Ad Game Object の場合は、設定済みのバナー広告プレースメントだけがプルダウン リストに表示されます。

BannerAdGameObject の設定(バナーのみ)

  • サイズ - 使用するバナーのサイズを選択します。
    • アンカー アダプティブ バナーには、他にも次のオプションがあります:
      • Orientation(画面の向き) - 広告の縦の長さの計算に使うデバイスの向きを選択します。
      • Use full screen width(画面の横幅を使用) - オンにすると、バナーが 画面の横幅いっぱいに表示されます。この [Use full screen width] チェックボックスをオフにすると、画面の横幅に占める割合を 50 ~ 99% の範囲で指定できるようになります。
    • Custom(カスタム) では、バナーの幅と高さを指定できます。
  • Ad Position - バナーを配置する位置を選択します。

コールバック

広告コールバックに対応する関数を実装できます。たとえば、バナー広告の読み込みに失敗した場合の処理を行うには、次の手順を行います。

  1. 広告コールバックに対応する関数を作成します。

    public void OnBannerAdFailedToLoad(string reason) {
        Debug.Log("Banner ad failed to load: " + reason);
    }
    
  2. 上記の関数を含むスクリプトをシーン内の任意の GameObject に追加します。

  3. [+] ボタンをクリックし、スクリプトを追加した GameObject をドラッグ&ドロップします。

  4. 広告コールバックにリンクする関数を選択します。パラメータ化された広告コールバックの場合は、動的変数を受け入れる関数を選択すると、SDK からパラメータ値を取得できます。

スクリプトから AdGameObject を使用する

スクリプトから AdGameObject インスタンスを取得する

すべての AdGameObject オブジェクトに便利なメソッド LoadAd() があります。これにより、プレーンでターゲット設定されていない AdRequest を使用して広告が読み込まれます。ターゲット設定の対象とするには、独自設定の広告リクエストを使う LoadAd(AdRequest adRequest) を使用する必要があります。

AdGameObject のインスタンスを取得するには、フォーマットごとに次の方法を使用します。

MobileAds.Instance.GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");

返される BannerAdGameObject オブジェクトにも、便利なメソッド Hide()Show() が含まれます。

インタースティシャル

MobileAds.Instance.GetAd<InterstitialAdGameObject>("AD_GAMEOBJECT_NAME");

返される InterstitialAdGameObject オブジェクトには、便利なメソッド ShowIfLoaded() が含まれます。

特典

MobileAds.Instance.GetAd<RewardedAdGameObject>("AD_GAMEOBJECT_NAME");

返される RewardedAdGameObject オブジェクトには、便利なメソッド ShowIfLoaded() が含まれます。

たとえば、BannerAdGameObject のインスタンスを取得して読み込むには、次のようにします。

using UnityEngine;

using GoogleMobileAds.Api;
using GoogleMobileAds.Placement;

public class BannerTestScript : MonoBehaviour
{
    BannerAdGameObject bannerAd;

    void Start()
    {
        bannerAd = MobileAds.Instance
            .GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");

        bannerAd.LoadAd();
        ...
    }
    ...
}

[BannerAd] という名前の BannerAdGameObject がある場合は、次のようにして インスタンスを取得できます。

MobileAds.Instance.GetAd<BannerAdGameObject>("BannerAd");

AdGameObject の基本的な広告オブジェクトにアクセスする

次のスニペットは、AdGameObject に関連付けられた基本の広告オブジェクトにアクセスする方法を示しています。

BannerAdGameObject bannerAd = MobileAds.Instance
    .GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");

// Access BannerView object
BannerView bannerView = bannerAd.BannerView;

インタースティシャル

InterstitialAdGameObject interstitialAdGameObject = MobileAds.Instance
    .GetAd<InterstitialAdGameObject>("AD_GAMEOBJECT_NAME");

// Access InterstitialAd object
InterstitialAd interstitialAd = interstitialAdGameObject.InterstitialAd;

特典

RewardedAdGameObject rewardedAdGameObject = MobileAds.Instance
    .Get<RewardedAdGameObject>("AD_GAMEOBJECT_NAME");

// Access RewardedAd object
RewardedAd rewardedAd = rewardedAdGameObject.RewardedAd;

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

AdGameObject を使用してインタースティシャル広告を読み込んで表示するようにゲームを設定する方法の例を次に示します。

シーンに InterstitialAdGameObject を追加し、[Auto Load Enabled](自動読み込みを有効化)機能をオンにすると、シーンの読み込み時に広告が自動的に読み込まれます。

そして、次に示す方法で SDK を初期化したことを確認します。SDK の初期化を忘れると、AdGameObject の [Auto Load](自動読み込み)機能は動作しませんのでご注意ください。

そのうえで、シーンが遷移する間に InterstitialAdGameObject.ShowIfLoaded() 関数を呼び出して、インタースティシャル広告を表示します。次に示すのは、シーンが遷移する間にインタースティシャル広告を表示するコード例です。

using UnityEngine;
using UnityEngine.SceneManagement;

using GoogleMobileAds.Api;
using GoogleMobileAds.Placement;

public class MainScene : MonoBehaviour
{
    InterstitialAdGameObject interstitialAd;

    void Start()
    {
        interstitialAd = MobileAds.Instance
            .GetAd<InterstitialAdGameObject>("interstitial");

        MobileAds.Initialize((initStatus) => {
            Debug.Log("Initialized MobileAds");
        });
    }

    public void OnClickShowGameSceneButton()
    {
        // Display an interstitial ad
        interstitialAd.ShowIfLoaded();

        // Load a scene named "GameScene"
        SceneManager.LoadScene("GameScene");
    }
}

広告プレースメントで [Auto Load](自動読み込み)機能を有効にしたため、広告を明示的にリクエストする必要はありません。シーンが切り替わると、インタースティシャル広告が表示されます(準備ができている場合)。

広告を手動でリクエストする場合は、広告プレースメント インスペクタで [Auto Load](自動読み込み)機能を無効にし、代わりに InterstitialAdGameObject.LoadAd() 関数を呼び出します。次のコード スニペットは、広告を手動でリクエストする方法を示しています。

public class MainScene : MonoBehaviour
{
    InterstitialAdGameObject interstitialAd;

    void Start()
    {
        interstitialAd = MobileAds.Instance
            .GetAdGameObject<InterstitialAdGameObject>("interstitial");

        MobileAds.Initialize((initStatus) => {
            Debug.Log("MobileAds initialized");

            // Load an interstitial ad after the SDK initialization is complete
            interstitialAd.LoadAd();
        });
    }
    ...
}

[リワード広告を視聴] ボタンのステータスを処理する

以下は、広告プレースメントを使って [リワード広告を視聴] ボタンを有効にする方法の例です。

この例では「Button 」と名付けられたボタン GameObject をシーンに追加します。これは、リワード広告の表示に使われます。このボタンは、リワード広告が利用可能な場合に限って使えるようにします。

Start() メソッドで、Button のアクティビティの状態を false に変更します。これにより、ボタンがシーンから消えます。

public class MainScene : MonoBehaviour
{
    ...
    void Start()
    {
        GameObject.Find("Button").SetActive(false);
        ...
    }
}

シーンに RewardedAdGameObject を追加し、プルダウンで [AdMob Demo Rewarded Ad](AdMob デモリワード広告)広告プレースメントを選択します。

RewardedAdGameObject インスペクタの [Callbacks](コールバック)セクションで、[On Ad Loaded()] の [+] ボタンをクリックし、リワード広告が読み込まれたときに、この関数が呼び出されるようにします。

前の手順で追加した Button GameObject を [None (Object)](なし(オブジェクト))フィールドにドラッグ&ドロップし、 プルダウンから呼び出す関数を選択します。 [No Function > GameObject > SetActive(bool)]をクリックし、そのチェックボックスをオンにして、 パラメータとして true を送信するようにします(SetActive(true) を呼び出します)。

この [Callbacks](コールバック)セクションでは、RewardedAd.OnUserEarnedReward イベント発生時に呼び出すイベントへのリンクも設定できます。詳しくは、 こちらのセクションをご覧ください。

次に、このボタンがクリックされたときにリワード広告を表示するようにします。Button インスペクタの [On Click()](Click() 時のコールバック)セクションで [+] をボタンをクリックし、Rewarded Ad(この例での名前)プレースメントの GameObject を [None (Object)](なし(オブジェクト))フィールドにドラッグ&ドロップします。

そして、このボタンの [On Click()](Click() 時のコールバック)に RewardedAdGameObject.ShowIfLoaded() 関数を追加します。

最後に、SDK を忘れずに初期化してください。次のコード スニペットは、この例で使用するシーンの完全なコードです。

using UnityEngine;

using GoogleMobileAds.Api;

public class MainScene : MonoBehaviour
{
    void Start()
    {
        GameObject.Find("Button").SetActive(false);

        MobileAds.Initialize((initStatus) => {
            Debug.Log("Initialized MobileAds");
        });
    }
}

このプロジェクトを実行すると、リワード広告が読み込まれて表示の準備が整った時点で、シーンにボタンが表示されます。

RewardedAdGameObject のリワード コールバックを設定する

次の例は、リワード広告プレースメントにリワード コールバックを設定し、コールバック関数が呼び出されたときにユーザーに報酬を付与する方法を示しています。

新しいスクリプトを作成し、Reward をパラメータとして受け取る関数を次のように定義します。

using UnityEngine;
using GoogleMobileAds.Api;

class RewardedTestScript : MonoBehaviour {
    ...
    public void OnUserEarnedReward(Reward reward) {
        Debug.Log("OnUserEarnedReward: reward=" +
            reward.Type + ", amount=" + reward.Amount);
    }
    ...
}

RewardedTestScript スクリプトをシーン内の任意の GameObject(広告プレースメント GameObject を除く)に追加します。この例では、Main Camera GameObject に追加されています。

シーンに RewardedAdGameObject を追加します。次に、RewardedAdGameObject インスペクタの [Callbacks](コールバック)セクションで、[On User Earned Reward (Reward)](ユーザーが報酬を獲得した時点(リワード)の [+] ボタンをクリックし、ユーザーに報酬を付与するときにこの関数が呼び出されるようにします。

前の手順で追加した Main Camera GameObject を [None (Object)](なし(オブジェクト))フィールドにドラッグ&ドロップし、 プルダウンから呼び出す関数を選択します。[No Function > RewardedTestScript > OnUserEarnedReward](関数なし > RewardedTestScript > OnUserEarnedReward)をクリックします。

プロジェクトを実行してリワード広告を視聴すると、広告の操作と引き換えに報酬が付与される際に RewardedTestScript.OnUserEarnedReward() が呼び出されます。