このガイドでは、Google Mobile Ads Unity プラグインの広告プレースメント機能を使用して、アプリ用の広告を作成して表示する方法を説明します。
前提条件
Unity 2017.4 以降。
Google Mobile Ads Unity プラグインの初期ビルドをダウンロードしてインポートします。
Unity Editor に AdMob アプリ ID を設定します。
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](インスペクタ)ビューで設定できます。
広告プレースメントの設定
各プレースメントには次のプロパティがあります。
- プレースメントの名前
- プレースメントの名前。各シーンで広告を設定する際にプレースメントを識別するために使われます。
- 広告フォーマット
- バナー、リワード、インタースティシャル。広告の種類です。
- 広告ユニット 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
の設定(バナーのみ)
- サイズ - 使用するバナーのサイズを選択します。
- アンカー アダプティブ バナーには、他にも次のオプションがあります。
- Orientation(画面の向き)- 広告の縦の長さの計算に使うデバイスの向きを選択します。
- Use full screen width(画面の横幅を使用)- オンにすると、画面の横幅いっぱいにバナーが表示されます。この [Use full screen width] チェックボックスをオフにすると、画面の横幅に占める割合を 50 ~ 99% の範囲で指定できるようになります。
- [Custom](カスタム)を選択すると、バナーの縦横の長さを指定できます。
- アンカー アダプティブ バナーには、他にも次のオプションがあります。
- Ad Position(広告の掲載位置)- バナーを配置する位置を選択します。
コールバック
広告コールバックに対応する関数を実装できます。たとえば、バナー広告の読み込みに失敗したときは次のような関数で処理できます。
広告コールバックに対応する関数を作成します。
public void OnBannerAdFailedToLoad(string reason) { Debug.Log("Banner ad failed to load: " + reason); }
上記の関数を含むスクリプトをシーンの中の GameObject に追加します。
[+] ボタンをクリックし、スクリプトに追加した GameObject をドラッグ&ドロップします。
広告コールバックにリンクする関数を選択します。パラメータ化された広告コールバックの場合は、動的変数を受け入れる関数を選択すると、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()
が呼び出されます。