UnityアプリにAdMobを実装する手順について[Google Mobile Ads]

何回もやってるので、ドキュメントとしてまとめておく的な感じ。Google/AdSense/AdMobあたりのアカウントは取得済みという状況から開始します。基本的には公式のドキュメントに沿って進めていきます。(https://developers.google.com/admob/unity/quick-start?hl=ja)

目次

パッケージの追加や設定など

AdMobを使うための事前準備として、パッケージを導入したり、必要な設定を行ったりします。

パッケージの入手と導入

パッケージは生物なので、こちらのリンクの下図ボタンから最新のものを入手してください。

上記ダウンロードボタンを押すと、Githubのページにリダイレクトされます。リダイレクト先の下の方に「GoogleMbileAds-vその時のバージョン.unitypackage」がありますのでそこからダウンロード(クリックでダウンロード)

入手したパッケージをUnityプロジェクトに追加します。「Assets > Import Package > Custom Package」からダウンロードしたパッケージを選択してください。プロジェクトビューにドラッグアンドドロップしても追加可能です。インポートダイアログが表示されると、Importボタンで追加!

インポート後依存関係に関する問題解決を自動で行うかどうかのダイアログが表示されます。ポップアップされた場合、「Enable」を選択してください。

この設定を手動で行う場合は「Assets > External Dependency Manager > Android Resolver」

スライム

Player SettingsでCompany NameがDefaultCompanyのままだとうまくいかないことがあります。Product Nameを変えても再度設定が更新されます。

アプリIDの設定

「Assets > Google Mobile Ads > Settings」を選択して、設定用インスペクターを表示させます。

AppIDはAdMobのアプリを用意した場合はそちらを利用してください。それまではテスト用のIDを利用します。
Androidテスト用AppID : ca-app-pub-3940256099942544~3347511713
iOSテスト用AppID : ca-app-pub-3940256099942544~1458002511

イベントをメインスレッドと同期させる

Google Mobile AdsではSDKのイベントがUnityのメインスレッドとずれることがあります。そのためメインスレッドと同期させるために、以下のコードを追加してください。

using GoogleMobileAds.Api;

MobileAds.RaiseAdEventsOnUnityMainThread = true;

初期化処理

で、このあと広告を表示したりするために初期化処理などを行う必要があります。上記で説明した同期処理と合わせると以下のようになります。このスクリプトでDebug.Logの場所で初期化が完了してから広告の処理が動くようにしましょう。

using UnityEngine;
using GoogleMobileAds.Api;

public class GoogleMobileAdsInitializer : MonoBehaviour
{
    void Start()
    {
        MobileAds.RaiseAdEventsOnUnityMainThread = true;
        MobileAds.Initialize(initStatus =>
        {
            Debug.Log(initStatus);
        });
    }
}

バナー広告でも出してみますか

とりあえず設定は終わったので、基礎としてBanner広告を出してみようと思います。

バナー広告を表示するまでの手順

まずは流れをおさらいしましょう。ここのソースコードは流れを理解するだけのものなので、かなり疑似コードが含まれます。

STEP
BannerViewを作る

まずはバナーの表示部分になるBannerViewを作成します。また、作るにはAndroid/iOSそれぞれ対応したプラットフォームごとのUnitIDが必要になります。

#if UNITY_ANDROID
  private string bannerUnitId = "ca-app-pub-3940256099942544/6300978111";
#elif UNITY_IPHONE
  private string bannerUnitId = "ca-app-pub-3940256099942544/2934735716";
#else
  private string bannerUnitId = "unused";
#endif

 BannerView bannerView = new BannerView(bannerUnitId, AdSize.Banner, AdPosition.Bottom);

バナー作成では、IDの他にそのサイズや場所を指定します。横長画面は早く縦長バナーを用意してほしいところ。

STEP
バナー広告の読み込み

作成したバナービューはガワを作っただけでその広告の中身を持っていません。そのためAdRequestを使って読み込ませる必要があります。

var adRequest = new AdRequest.Builder()
    .AddKeyword("unity-admob-sample")
    .Build();

bannerView.LoadAd(adRequest);
STEP
イベントのリッスン

Google Mobile Adsは各処理を実行するとその結果をイベントとして受け取ることが出来ます。イベントのリスナーはバナービューが行います。

  • ロード完了・成功
  • ロード完了・失敗

など・・・。最初は上記2つが使えれば問題なし!

フェアリー

バナー以外の場合はリワードを最後まで見たかなどのイベントを受け取る必要があります!

STEP
バナービューの破棄

利用が終わったバナーは破棄する必要があります。といってもDestroyメソッドがあるのでそれを呼ぶだけです。シーン切り替わりなどで取り残さないように消しておきましょう。

bannerView.Destroy();
bannerView = null;

バナーを表示するスクリプト

で、ざっくりまとめると以下のようなスクリプトになります。初期化が終わった後に、ShowBannerメソッドを呼んでエラーがでければ成功!

最初に作ったInitializerに下スクリプトのコンポーネントを貼り付けて、初期化完了後にShowBannerメソッドを呼ぶと、ゲーム画面の下にバナーが表示されます。

using UnityEngine;
using GoogleMobileAds.Api;

public class GoogleMobileAdsBanner : MonoBehaviour
{
    private BannerView bannerView;
#if UNITY_ANDROID
    private string bannerUnitId = "ca-app-pub-3940256099942544/6300978111";
#elif UNITY_IPHONE
  private string bannerUnitId = "ca-app-pub-3940256099942544/2934735716";
#else
  private string bannerUnitId = "unused";
#endif

    private void CreateBanner()
    {
        if (bannerView != null)
        {
            DestroyBanner();
        }
        bannerView = new BannerView(bannerUnitId, AdSize.Banner, AdPosition.Bottom);
    }

    private void DestroyBanner()
    {
        if (bannerView != null)
        {
            bannerView.Destroy();
            bannerView = null;
        }
    }

    public void ShowBanner()
    {
        CreateBanner();

        var adRequest = new AdRequest.Builder()
            .AddKeyword("unity-admob-sample education")
            .Build();

        bannerView.OnBannerAdLoaded += () =>
        {
            Debug.Log("ロードされました - 表示します");
            bannerView.Show();
        };
        bannerView.OnBannerAdLoadFailed += (LoadAdError error) =>
        {
            Debug.Log("ロード失敗しました");
        };
        bannerView.LoadAd(adRequest);
    }
}
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次