バナー広告
バナーは、リクエスト送信してロードされるとすぐ表示されるので
すぐにHideして非表示にしています。
そして表示したいタイミングでShow、非表示にしたいタイミングでHideします。
public void RequestBanner(){
if (bannerView == null)
{
string adUnitId = bannerId;
// Create a 320x50 banner at the top of the screen.
bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top);
// create our request used to load the ad.
var adRequest = new AdRequest();
bannerView.OnBannerAdLoadFailed += (LoadAdError error) => {
//読み込み失敗したのでクリーンアップして再読み込みする
bannerView.Destroy();
bannerView = null;
};
// send the request to load the ad.
bannerView.LoadAd(adRequest);
bannerView.Hide();
}
else
{
bannerView.Show();
}
}
インタースティシャル広告
インタースティシャルは、実際に表示するよりも前にリクエストしてロードしておきます。
広告を表示した後は、リクエストしてロードするようイベントを仕込みます。
private void RequestInterstitial(){
//広告読み込み済みなら中断
if (interstitial != null)
{
if (interstitial.CanShowAd()) return;
}
string adUnitId = interstitialId;
if (interstitial != null)
{
interstitial.Destroy();
interstitial = null;
}
// create our request used to load the ad.
var adRequest = new AdRequest();
// send the request to load the ad.
InterstitialAd.Load(adUnitId, adRequest,
(InterstitialAd ad, LoadAdError error) =>
{
// if error is not null, the load request failed.
if (error != null || ad == null)
{
Debug.LogError("interstitial ad failed to load an ad " +
"with error : " + error);
return;
}
Debug.Log("Interstitial ad loaded with response : "
+ ad.GetResponseInfo());
interstitial = ad;
//インタースティシャルのイベント登録
RegisterReloadHandler(interstitial);
});
}
private void InterstitialReload()
{
//クリーンアップして再読み込み
if (interstitial != null) interstitial.Destroy();
interstitial = null;
RequestInterstitial();
}
private void RegisterReloadHandler(InterstitialAd interstitialAd)
{
// Raised when the ad closed full screen content.
interstitialAd.OnAdFullScreenContentClosed += () =>
{
// Reload the ad so that we can show another as soon as possible.
InterstitialReload();
};
// Raised when the ad failed to open full screen content.
interstitialAd.OnAdFullScreenContentFailed += (AdError error) =>
{
// Reload the ad so that we can show another as soon as possible.
InterstitialReload();
};
}
public void AdMobInterStitialShow(){
if(interstitial != null)
{
if (interstitial.CanShowAd())
{
interstitial.Show();
}
else
{
RequestInterstitial();
}
}
else
{
RequestInterstitial();
}
}
リワード広告
これはゲームクリア時のコイン報酬をリワード広告を再生することによって倍増させるサンプルです。
RequestCoinRewardをゲームスタート時に事前に呼び出してロードしておきます。
ゲームクリア時にWatchCoinRewardAdをユーザーが再生ボタンを押すことで呼び出して
正常にリワード広告を見終わったら、コルーチンRewardCoinBonusが呼ばれるようになっています。
コルーチンにしているのは、広告再生後、1フレーム待たないと報酬が付与されない事があったため。
public void RequestCoinReward()
{
//広告読み込み済みなら中断
if (rewardedCoinAd != null)
{
if (rewardedCoinAd.CanShowAd()) return;
}
if (rewardedCoinAd != null)
{
rewardedCoinAd.Destroy();
rewardedCoinAd = null;
}
// create our request used to load the ad.
var adRequest = new AdRequest();
// send the request to load the ad.
RewardedAd.Load(adUnitId, adRequest,
(RewardedAd ad, LoadAdError error) =>
{
// if error is not null, the load request failed.
if (error != null || ad == null)
{
Debug.LogError("Rewarded ad failed to load an ad " +
"with error : " + error);
return;
}
Debug.Log("Rewarded ad loaded with response : "
+ ad.GetResponseInfo());
rewardedCoinAd = ad;
});
}
public void WatchCoinRewardAd()
{
if(rewardedCoinAd == null)
{
//リワード報酬付与失敗の処理
}else if (rewardedCoinAd.CanShowAd())
{
rewardedCoinAd.Show((Reward reward) =>
{
//リワード報酬付与の処理
StartCoroutine(RewardCoinBonus());
});
}
else
{
//リワード報酬付与失敗の処理
}
}
private IEnumerator RewardCoinBonus()
{
//1フレーム待たないと正しく報酬付与されないので待つ
yield return new WaitForEndOfFrame();
//クリア報酬倍増の処理
報酬を倍にする処理を書く
//広告内容破棄してクリーンアップ
rewardedCoinAd.Destroy();
rewardedCoinAd = null;
//次のリワード広告準備のためにリクエスト
RequestCoinReward()
}
以上です。
コメント