【Unity収益化】アダプティブ バナー広告の実装

アダプティブ バナー広告の実装手順メモ
公式サイト・udemyを参考に実装していく

https://developers.google.com/admob/unity/banner/adaptive

https://www.udemy.com/course/unity_app_increase_profit/

## アダプティブバナーとは
スマートバナーの改良版
デバイスごとに広告サイズが最適化されるレスポンシブ広告

## 実装の前提条件
* Unityプラグインがインポートされている
* Mobile Ads SDKが追加されている

完了していない方は、以下の記事を参考に設定してください

https://qiita.com/rapirapi/items/c0c097078ecdeeb07ef3

# アダプティブバナー実装手順
## オブジェクト追加
1. Hierarchyビューで空のオブジェクトを追加して、任意の名前で保存（今回は、AdMobManagerと命名）
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/38647002-16c5-586d-9e15-1a9a95f4ec57.png)

## スクリプト作成
1. Projectビューで`[Assets]>[Scripts]`にC#スクリプト追加（今回はAdMobBannerと命名）
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/e3dbe55a-9550-2d14-ec30-122a93900ea9.png)
1. C#スクリプトを開く

## スクリプト実装
1. 以下の内容にスクリプトを編集する
```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using GoogleMobileAds.Api;

public class AdMobBanner : MonoBehaviour
{

    private BannerView bannerView;//BannerView型の変数bannerViewを宣言　この中にバナー広告の情報が入る


    //シーン読み込み時からバナーを表示する
    //最初からバナーを表示したくない場合はこの関数を消してください。
    private void Start()
    {
        RequestBanner();//アダプティブバナーを表示する関数 呼び出し
    }


    //ボタン等に割り付けて使用
    //バナーを表示する関数
    public void BannerStart()
    {
        RequestBanner();//アダプティブバナーを表示する関数 呼び出し       
    }

    //ボタン等に割り付けて使用
    //バナーを削除する関数
    public void BannerDestroy()
    {
        bannerView.Destroy();//バナー削除
    }

    //アダプティブバナーを表示する関数
    private void RequestBanner()
    {
        //AndroidとiOSで広告IDが違うのでプラットフォームで処理を分けます。
        // 参考
        //【Unity】AndroidとiOSで処理を分ける方法
        // https://marumaro7.hatenablog.com/entry/platformsyoriwakeru

#if UNITY_ANDROID
        string adUnitId = "Your_AdMob_APP_ID";//ここにAndroidのバナーIDを入力

#elif UNITY_IPHONE
        string adUnitId = "Your_AdMob_APP_ID";//ここにiOSのバナーIDを入力

#else
        string adUnitId = "unexpected_platform";
#endif

        // 新しい広告を表示する前にバナーを削除
        if (bannerView != null)//もし変数bannerViewの中にバナーの情報が入っていたら
        {
            bannerView.Destroy();//バナー削除
        }

        //現在の画面の向き横幅を取得しバナーサイズを決定
        AdSize adaptiveSize =
                AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(AdSize.FullWidth);


        //バナーを生成 new BannerView(バナーID,バナーサイズ,バナー表示位置)
        bannerView = new BannerView(adUnitId, adaptiveSize, AdPosition.Bottom);//バナー表示位置は
                                                                               //画面上に表示する場合：AdPosition.Top
                                                                               //画面下に表示する場合：AdPosition.Bottom


        //BannerView型の変数 bannerViewの各種状態 に関数を登録
        bannerView.OnAdLoaded += HandleAdLoaded;//bannerViewの状態が バナー表示完了 となった時に起動する関数(関数名HandleAdLoaded)を登録
        bannerView.OnAdFailedToLoad += HandleAdFailedToLoad;//bannerViewの状態が バナー読み込み失敗 となった時に起動する関数(関数名HandleAdFailedToLoad)を登録


        //リクエストを生成
        AdRequest adRequest = new AdRequest.Builder().Build();

        //広告表示
        bannerView.LoadAd(adRequest);
    }


    #region Banner callback handlers

    //バナー表示完了 となった時に起動する関数
    public void HandleAdLoaded(object sender, EventArgs args)
    {
        Debug.Log("バナー表示完了");
    }

    //バナー読み込み失敗 となった時に起動する関数
    public void HandleAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        Debug.Log("バナー読み込み失敗" + args.LoadAdError);//args.LoadAdError:エラー内容 
    }

    #endregion
}
```
## オブジェクトへ適用
1. 最初に作成したオブジェクトにスクリプトを貼り付ける
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/9d4510cd-4022-b874-433e-d64f2f228bed.png)
1. 保存して実行すると、画面の下部に`This is a Test Adaptive Banner`と表示される
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/77bdb058-0bca-4aad-9b9c-d2c2bb23bb2e.png)