さて次にUnityでGoogle Admobのインタースティシャル広告の実装についてやっていきます。
前回のバナー広告実装の時と操作はほぼ一緒なのでURL載せておきます。
まず、Google Admobでインタースティシャル広告の設定を行うのですがバナー広告と同じようなやり方で何とかなります。
ちなみにここのサイトを参考にしました。
そしたらUnityの操作なんですが
まず、インタースティシャル広告用のゲームオブジェクトを作成しましょう。
いつも通りHierarchyの+ボタンからCreate Emptyを選択して名前を「Interstitial_Ads」にでも変更しましょう。
作ったらInterstitial_Adsのオブジェクトを選択してもらってInspectorウィンドウの下にあるAdd Componentを選択します。
そしたらいつも通りスクリプトを作成するので名前を「InterstitialAdManager」にでもしてスクリプトを作成しましょう。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds;
public class InterstitialAdManager : MonoBehaviour
{
// これらの広告ユニットは、常にテスト広告を配信するように設定されています。
#if UNITY_ANDROID
private string _adUnitId = "ca-app-pub-3940256099942544/1033173712";
#elif UNITY_IPHONE
private string _adUnitId = "ca-app-pub-3940256099942544/4411468910";
#else
private string _adUnitId = "unused";
#endif
private InterstitialAd interstitialAd;
/// <summary>
/// Loads the interstitial ad.
/// </summary>
public void Start()
{
// Google Mobile Ads SDK を初期化します。
MobileAds.Initialize((InitializationStatus initStatus) =>
{
// このコールバックは、MobileAds SDK が初期化されると呼び出されます。
});
LoadInterstitialAd();
Debug.Log("広告をロード");
}
public void LoadInterstitialAd()
{
// 既にロードされている広告があれば破棄します。
if (interstitialAd != null)
{
interstitialAd.Destroy();
interstitialAd = null;
}
Debug.Log("インタースティシャル広告を読み込んでいます。");
// 広告を読み込むために使用するリクエストを作成します。
var adRequest = new AdRequest();
adRequest.Keywords.Add("unity-admob-sample");
// 広告を読み込むリクエストを送信します。
InterstitialAd.Load(_adUnitId, adRequest,
(InterstitialAd ad, LoadAdError error) =>
{
// エラーが null でない場合、ロード リクエストは失敗しました。
if (error != null || ad == null)
{
Debug.LogError("インタースティシャル広告が広告を読み込めませんでした " +
"with error : " + error);
return;
}
Debug.Log("レスポンスを伴うインタースティシャル広告が読み込まれる : "
+ ad.GetResponseInfo());
interstitialAd = ad;
RegisterEventHandlers(interstitialAd);
Debug.Log("イベントハンドラーの登録");
RegisterReloadHandler(interstitialAd);
Debug.Log("ロードハンドラーの登録");
});
}
/// <summary>
/// Shows the interstitial ad.
/// </summary>
public void ShowAd()
{
if (interstitialAd != null && interstitialAd.CanShowAd())
{
Debug.Log("インタースティシャル広告を表示しています。");
interstitialAd.Show();
}
else
{
Debug.LogError("インタースティシャル広告はまだ準備ができていません。");
}
}
//イベントハンドラーの登録
private void RegisterEventHandlers(InterstitialAd ad)
{
// 広告が収益を上げたと推定される場合に発生します。
ad.OnAdPaid += (AdValue adValue) =>
{
Debug.Log(String.Format("Interstitial ad paid {0} {1}.",
adValue.Value,
adValue.CurrencyCode));
};
// 広告のインプレッションが記録されるときに発生します。
ad.OnAdImpressionRecorded += () =>
{
Debug.Log("インタースティシャル広告がインプレッションを記録しました。");
};
// 広告のクリックが記録されたときに発生します。
ad.OnAdClicked += () =>
{
Debug.Log("インタースティシャル広告がクリックされました。");
};
// 広告が全画面コンテンツを開いたときに発生します。
ad.OnAdFullScreenContentOpened += () =>
{
Debug.Log("インタースティシャル広告の全画面コンテンツが開きました。");
};
// 広告が全画面コンテンツを閉じたときに発生します。
ad.OnAdFullScreenContentClosed += () =>
{
Debug.Log("インタースティシャル広告の全画面コンテンツが閉じられました。");
};
// 広告が全画面コンテンツを開けなかった場合に発生します。
ad.OnAdFullScreenContentFailed += (AdError error) =>
{
Debug.LogError("インタースティシャル広告が全画面コンテンツを開けませんでした " +
"with error : " + error);
};
}
private void RegisterReloadHandler(InterstitialAd ad)
{
// 広告が全画面コンテンツを閉じたときに発生します。
ad.OnAdFullScreenContentClosed += () =>
{
Debug.Log("インタースティシャル広告の全画面コンテンツが閉じられました。");
// できるだけ早く別の広告を表示できるよう、広告をリロードしてください。
LoadInterstitialAd();
};
// 広告が全画面コンテンツを開けなかった場合に発生します。
ad.OnAdFullScreenContentFailed += (AdError error) =>
{
Debug.LogError("インタースティシャル広告が全画面コンテンツを開けませんでした " +
"with error : " + error);
// できるだけ早く別の広告を表示できるよう、広告をリロードしてください。
LoadInterstitialAd();
};
}
}
スクリプトを開いたらこのコードをコピペしてください。
※本番環境に実装する際は自身の広告ユニットIDに変更してください。
広告ユニットIDの確認方法は下記を参照してください。
少し解説をするとStart()関数でGoogle Mobile Ads SDK を初期化しています。
これをすることによりアプリ起動時に安定して広告を表示されることが可能になります。
Start()関数でLoadInterstitialAd();を実行することによりこの後に表示される広告をセットしておきます。
LoadInterstitialAd()関数は広告を読み込むための関数です。
この関数の最後にイベントハンドラーをセットしておくことで次の広告をセットするためのハンドラーを用意しておくみたいなイメージですね。
ShowAd()関数は後ほどUnity内に設置するボタンにアタッチするための関数です。
これを実行すると先ほど読み込んだ広告を流すみたいなことができます。
RegisterEventHandlers関数とRegisterReloadHandler関数はUnity内で特定のイベントが発生するとコードが実行されます。
注意点として一回ハンドラーを実行すると再度ハンドラーの登録をしなければいけないので実行した後もハンドラーをセットできるように適切な場所で登録しておくことが重要です。(今回はLoadInterstitialAd()関数でセットしています)
ここからUnityの操作方法です。
Hierarchyウィンドウの+ボタンからUIを選んでButtonを選択してください。
するとCanvasが生成されのその中にButtonが配置されます。
分かりやすいように「AdButton」にでも名前を変えておきます。(名前はなんでもいいです。)
AdButtonを選択してInspectorウィンドウでボタンのPosや大きさの変更をおこないます。
PosX,Y,Zともに0にします。
その下のWidthは500にHeightは200に設定します。
するとこんな感じにボタンが配置されたかなと思います。
そのあとAdButtonのInspectorウィンドウのOn Click()に先ほど書いたコードをアタッチしていきます。
OnClick()に何も入っていないと思うので+ボタンを押してください。
するとこんな感じに追加されたと思うのでNoneのところに先ほど作ったInterstitial_AdsをHierarchyウィンドウからドラック&ドロップします。
するとアタッチされるのでNo Functionのプルダウンから下記のようにShowAd()をアタッチしてください。
これで設定は終了です。
この画面が出てコンソールに記録ができていれば完成です。
念のため広告を閉じて繰り返しインタースティシャル広告を出してみてください。
上手く設定できていないと二回目以降は表示されずエラーが出ることがあります。
大体の原因はイベントハンドラーが適切に登録されていないことが挙げられると思います。
今回はこんな感じでインタースティシャル広告の実装をできたかなと思います!!
今後はこれを利用しつつゲームを作っていこうかな
ばいちゃ