UnityでAdmob広告を使用する場合の注意
使い方は簡単なのですがたまに表示されなかったりする場合の注意など。
インタースティシャル広告を連続で出す
みんな大好きAdmob。インタースティシャル広告を連続で出す場合は注意が必要です。
広告を閉じた際にDestryo後、再度Requestを行わなければなりません【Destroy()およびRequestInterStitial()】
OnAdFailedToLoad/OnAdClosed/ OnAdLeavingApplicationなどのイベントを利用しましょう。
using UnityEngine;
using System.Collections;
using System;
using GoogleMobileAds;
using GoogleMobileAds.Api;
public class AdMob : MonoBehaviour<AdMob> {
public BannerView bannerView;
private InterstitialAd interStitialView;
public enum Position {
TOP,
BOTTOM,
TOP_LEFT,
TOP_RIGHT,
BOTTOM_LEFT,
BOTTOM_RIGHT,
}
[SerializeField]
public string iPhoneAdmobID;
[SerializeField]
public string iPhoneInterstitialAdmobID;
[SerializeField]
public string androidAdmobID;
[SerializeField]
public string androidInterstitialAdmobID;
[SerializeField]
public Position position;
void Start () {
}
public void RequestBanner()
{
string adunitID = "";
#if UNITY_IPHONE
adunitID = iPhoneAdmobID;
#elif UNITY_ANDROID
adunitID = androidAdmobID;
#else
adunitID = androidAdmobID;
#endif
bannerView = new BannerView(adunitID, AdSize.Banner, (AdPosition)position);
AdRequest adRequest = new AdRequest.Builder().Build();
bannerView.LoadAd(adRequest);
}
public void RequestInterStitial()
{
string adunitID = "";
#if UNITY_IPHONE
adunitID = iPhoneInterstitialAdmobID;
#elif UNITY_ANDROID
adunitID = androidInterstitialAdmobID;
#else
adunitID = androidInterstitialAdmobID;
#endif
// Initialize an InterstitialAd.
interStitialView = new InterstitialAd(adunitID);
// Create an empty ad request.
AdRequest request = new AdRequest.Builder().Build();
// 広告が閉じたときのイベント登録
//ちなみに古いAdmobのSDKだと.AdClosedとか微妙に違う
interStitialView.OnAdFailedToLoad += HandleInterstitialFailedToLoad;
interStitialView.OnAdClosed += HandleInterstitialClosed;
interStitialView.OnAdLeavingApplication += HandleInterstitialLeftApplication;
interStitialView.LoadAd(request);
}
public void showInterstitial()
{
if (interStitialView != null && interStitialView.IsLoaded())
{
interStitialView.Show();
}
}
/// <summary>
/// 広告が閉じたときにDestroyして再生成する
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
void HandleInterstitialClosed(object sender, EventArgs args)
{
if(interStitialView != null) interStitialView.Destroy();
RequestInterStitial();
}
void HandleInterstitialFailedToLoad(object sender, EventArgs args)
{
if (interStitialView != null) interStitialView.Destroy();
RequestInterStitial();
}
void HandleInterstitialLeftApplication(object sender, EventArgs args)
{
if (interStitialView != null) interStitialView.Destroy();
RequestInterStitial();
}
}
広告が表示されない場合
広告がクリックできないときはAndroidManifest.xmlに
を追加すれば良いのですが、広告自体が表示されないことがまれによくあります。
こういうときは、大概以下のどれかが原因です。
- 広告IDが間違っている、配信されていない
- AndroidManifest.xmlがおかしい
- jarファイルの不足
広告IDのコピペミス。「ca-app-pub-xxx/xxx」のスラッシュ以降のコピペ漏れ。申請すぐの使用でまだ配信されていない。
これ結構有ります。特に、既存プロジェクトでごちゃごちゃしている場合にありがちです。一旦バックアップを取ってマニフェストファイルを整理するとあら不思議、表示されちゃったりします。
古いjar(android-support-v4.jar、unity-admob-plugin.jar)が重複している場合はビルドエラーになりますが、不足しているとアプリが落ちたり広告が表示されなかったりします。
Plugins/Androidフォルダーを右クリックしてResolveClientJarsしましょう(PlayServiceResolver万歳)