広告プレースメントを使用する

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

前提条件

Google Mobile Ads SDK を初期化する

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

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

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

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

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

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

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

Placement Name(プレースメント名)
プレースメントの名前。各シーンで広告を設定する際にプレースメントを識別するために使われます。
Ad Format(広告フォーマット)
バナー、リワード、インタースティシャル。広告の種類です。
Ad unit ID(広告ユニット ID)
Android と iOS 向けのバナー広告ユニット ID を指定します。少なくとも 1 つの広告ユニット ID を指定してください。
Persistent across scenes(シーンをまたいで存続)
これをオンにすると、シーンが変わっても画面にバナーが存続し続けます(DontDestroyOnLoad と同じ動作になります)。
Auto Load Enabled(自動読み込みが有効)
これをオンにすると、その広告プレースメントに関連付けられたシーンが読み込まれた際に、広告が自動的に読み込まれます。

次のスクリーンショットは、「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 の設定(バナーのみ)

  • Size(サイズ)- 使用するバナーのサイズを選択します。
    • アンカー アダプティブ バナーには、他にも次のオプションがあります。
      • 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() Callbacks](Click() 時のコールバック)セクションで [+] をボタンをクリックし、Rewarded Ad(この例での名前)プレースメントの GameObject を [None (Object)](なし(オブジェクト))フィールドにドラッグ&ドロップします。

そして、このボタンの 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(Ad Placement GameObject を除く)に追加します。この例では、Main Camera GameObject に追加されています。

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

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

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