Roba Memo - 素人のUnity覚書と奮闘記

素人のUnity覚書と奮闘記

AdMob 導入方法(自分用)

自分用です。
AdMobでの手続きは割愛します。

パッケージをインポート

(1)下記から、unitypackageをダウンロードする。
Releases · googleads/googleads-mobile-unity · GitHub

(2)GoogleMoblieAds.unitypackageをインポートする。
f:id:nico-taniku:20170808103136p:plain:w300

インポートできたら、プロジェクトにフォルダが増える。
f:id:nico-taniku:20170808103424p:plain:w300

iOS用設定

(1)下記からframeworkをダウンロードする。
Google Mobile Ads SDK  |  AdMob for iOS  |  Google Developers

(2)GoogleMovieAds.frameworkをPlugins-iOSフォルダに入れる。

(3)下記画像のように、フレームワークを設定する。
f:id:nico-taniku:20170808103713p:plain:h500

(4)xcodeでのエラー回避
GoogleMobileAds - Editor - AdMobDeperndenciesクラスを開く
56行目あたり iOSの部分をコメントアウトしておく。

#elif UNITY_IOS
//        Type iosResolver = Google.VersionHandler.FindClass(
//            "Google.IOSResolver", "Google.IOSResolver");
//        if (iosResolver == null) {
//            return;
//        }
//        Google.VersionHandler.InvokeStaticMethod(
//            iosResolver, "AddPod",
//            new object[] { "Google-Mobile-Ads-SDK" },
//            namedArgs: new Dictionary<string, object>() {
//                { "version", "7.13+" }
//            });

スクリプト

※IDは適宜設定すること。

using UnityEngine;
using System.Collections;
using GoogleMobileAds.Api;

public class AdMobManager : MonoBehaviour
{
    static public AdMobManager instance;
     
    private string android_BannerID;
    private string android_InterstitialID;
    private string iOS_BannerID;
    private string iOS_InterstitianID;
    private string deviceID1;
    private string deviceID2;
    private string deviceID3;
    private string deviceID4;
    private BannerView bannerView;
    private InterstitialAd interstitialAd;
    bool show;

    void Awake ()
    {
        //シングルトン処理
        if (instance == null) {
            instance = this;
            DontDestroyOnLoad (this.gameObject);
        } else {
            Destroy (this.gameObject);
        }

        //パブリッシャーIDと実機デバイスID
        android_BannerID = "ca-app-pub-xxxxxx";
        android_InterstitialID = "ca-app-pub-xxxxx";
        iOS_BannerID = "ca-app-pub-xxxxx";
        iOS_InterstitianID = "ca-app-pub-xxxxx";
        deviceID1 = "xxxxx";
        deviceID2 = "xxxxx";
        deviceID3 = "xxxxx";
        deviceID4 = "xxxxx";
    }

    public void RequestBanner ()
    {
       #if UNITY_ANDROID
        string adUnitId = android_BannerID;
       #elif UNITY_IPHONE
        string adUnitId = iOS_BannerID;
       #else
        string adUnitId = "unexpected_platform";
       #endif
         
        bannerView = new BannerView (adUnitId, AdSize.SmartBanner, AdPosition.Top);
         
        AdRequest request = new AdRequest.Builder ()
                    .AddTestDevice (AdRequest.TestDeviceSimulator)
                    .AddTestDevice (deviceID1)
                    .AddTestDevice (deviceID2)
                    .AddTestDevice (deviceID3)
                    .AddTestDevice (deviceID4)
                    .Build ();
        bannerView.LoadAd (request);
    }

    public void DestroyBanner ()
    {
        bannerView.Destroy ();
    }

    public void RequestInterstitial ()
    {
       #if UNITY_ANDROID
        string adUnitId = android_InterstitialID;
       #elif UNITY_IPHONE
        string adUnitId = iOS_InterstitianID;
       #else
        string adUnitId = "unexpected_platform";
       #endif
         
         
        interstitialAd = new InterstitialAd (adUnitId);
        AdRequest request = new AdRequest.Builder ()
                    .AddTestDevice (AdRequest.TestDeviceSimulator)
                    .AddTestDevice (deviceID1)
                    .AddTestDevice (deviceID2)
                    .AddTestDevice (deviceID3)
                    .AddTestDevice (deviceID4)
                    .Build ();
        interstitialAd.OnAdClosed += InterstitialAd_OnAdClosed;
        interstitialAd.LoadAd (request);
    
    }

    public void viewInterstitial ()
    {
        show = true;
    }

    void OnGUI ()
    {
        if (show) {
            if (interstitialAd.IsLoaded ()) {
                show = false;
                interstitialAd.Show ();
            }
        }
    }

    void InterstitialAd_OnAdClosed (object sender, System.EventArgs e)
    {
        DestroyInterstitial ();
    }

    public void DestroyInterstitial ()
    {
        show = false;
        interstitialAd.Destroy ();
        RequestInterstitial ();
    }

}

AdMob用のゲームオブジェクトを作成し、スクリプトをアタッチする。

f:id:nico-taniku:20170808100236p:plain:w500

インタースティシャルのリクエス

読み込みに時間がかかるので、リクエストだけスプラッシュ画面でやっとく。
インタースティシャル広告が閉じられた時に、広告を破棄してリクエストを開始するようにしてあるので、読み込むのは最初のシーンだけでOK。
シングルトンクラスにしてあるので、読み込んだ広告は、シーンをまたいで保持してくれる。

using UnityEngine;
using System.Collections;

public class Splash : MonoBehaviour
{

    void Start ()
    {
        AdMobManager.instance.RequestInterstitial ();

    }

}

インタースティシャルの表示

任意のタイミングで下記を実行。

AdMobManager.instance.viewInterstitial ();

バナーの読み込みと表示

バナーは読み込んだら即時表示させる。
任意のタイミングで下記を実行。

AdMobManager.instance.RequestBanner ();

バナーはスマートバナーでTopに固定してます。
AdMobManager内にあるスクリプトで適宜変更してください。

//AdMobManager 変更箇所
bannerView = new BannerView (adUnitId, AdSize.SmartBanner, AdPosition.Top);

以上。