広告のプレースメント

このガイドでは、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 モバイル広告)> [広告プレースメント] で、バナー、インタースティシャル、リワード広告の各フォーマットの広告プレースメントを選択できます。その後 3 つのデモ広告プレースメントが設定され、使用可能な状態になります。

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

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

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

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

次のスクリーンショットは、My Awesome Banner という名前の広告プレースメントの例を示しています。

AdGameObject をシーンに追加する

Unity Editor で [GameObject] > [Google Mobile Ads] を選択すると、バナー、インタースティシャル、リワードの各フォーマット用の AdGameObject をシーンに追加できます。アクティブなシーンにプレースメントを追加する形式を選択します。

AdGameObject をシーンに追加すると、広告を表す GameObject が Unity エディタの [Hierarchy] ビューに表示されます。

プレースメントの名前を変更するには、GameObject 自体の名前を変更します。次のスクリーンショットは、「Banner Ad」という名前の AdGameObject の例を示しています。

AdGameObject の設定

シーンの AdGameObject は、[Ad Game Object (Script)] コンポーネントの設定にある [Inspector] ビューで設定できます。

広告であること

設定済みのプレースメントのプルダウン リストから、広告プレースメントを選択します。リストには、適切なフォーマットの広告ユニットのみが含まれます。たとえばバナー広告ゲーム オブジェクトの場合、プルダウンには設定済みのバナー広告プレースメントのみが表示されます。

BannerAdGameObject の設定(バナーのみ)

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

コールバック

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

  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 の自動読み込み機能が動作しなくなります。

その後、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");
    }
}

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

広告を手動でリクエストする場合は、広告プレースメント インスペクタで [自動読み込み] 機能を無効にし、代わりに 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(この例では Button)をシーンに追加します。これは、リワード広告の表示に使用されます。このボタンは、リワード広告が利用可能な場合にのみ利用可能になります。

Start() メソッドで、ボタンのアクティブ状態を false に変更します。これにより、ボタンがシーンに表示されなくなります。

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

シーンに RewardedAdGameObject を追加し、プルダウンから [AdMob デモリワード広告] の広告プレースメントを選択します。

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

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

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

次に、クリックされたときにリワード広告を表示するボタンを作成します。ボタン インスペクタの [On Click() Callbacks] セクションで [+] ボタンをクリックし、リワード広告プレースメント GameObject(この例では「リワード広告プレースメント」という名前)を [None (Object)] フィールドにドラッグ&ドロップします。

次に、ボタンの On 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 を除く)に追加します。この例では、メインカメラの GameObject にアタッチされています。

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

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

プロジェクトを実行してリワード広告を視聴し、広告の操作に対する報酬を受け取る際には、RewardedTestScript.OnUserEarnedReward() が呼び出されます。