Unity製iOSアプリにおけるAdMobバナー広告の配置を理解する

スポンサーリンク
Unity

Unityで作ったiOSアプリにAdMobのバナー広告を貼る際、広告の配置に結構苦労したので忘備録もかねてまとめておきます。

今回、自分は「固定フッターメニューの真上にAdMobのスマートバナー広告を表示させたい」という状況だったので、このケースを例に書き進めていきます。

とりあえず結論を知りたいという方が大半だと思うので先に結論を書いておきます。

指定方法

Unity側

・Canvasの設定

・フッター(GameObject)の設定

・フッターの配置(セーフエリア内におさめる)

// canvasの縦サイズ
float base_canvas_height = 2688;

// デバイスの縦サイズ
float device_height = Screen.height;

// セーフエリアの始点と縦サイズ
float safeArea_height = Screen.safeArea.height;
float safeArea_start_y = device_height - Screen.safeArea.y - safeArea_height;

// canvasがこの比率になって画面内に収められている
float scale = device_height / base_canvas_height;
float posY = -1*(safeArea_start_y + safeArea_height) / scale;

this.gameObject.GetComponent<RectTransform>().anchoredPosition = new Vector2(0, posY);

AdMob側

AdMob側の設定においては広告の高さデバイスのRetinaの倍率については別途関数で指定する必要があるので注意してください。(後述)

//pt単位の広告の高さ(後述)
float ad_height_pt = setAdHeight();

//デバイスのretinaの倍率(後述)
int retina = getDeviceRetina();

// canvasの縦サイズ
float base_canvas_height = 2688;
// デバイスの縦サイズ
float device_height = Screen.height;
// canvas内の要素はこの比率で拡大縮小されて画面内に収められている
float scale = device_height / base_canvas_height;

//Unity上で指定した固定フッターのサイズ
float footer_height_unit = 200;
//px単位に変換
float footer_height_px = footer_height_unit * scale;
//pt単位に変換
float footer_height_pt = footer_height_px / retina;

//pt(dp)単位のセーフエリアのサイズ
float safeArea_bottom_pt = Screen.safeArea.height / retina;

int ad_position = (int)(safeArea_bottom - ad_height_pt - footer_height_pt);

this.bannerView = new BannerView(adUnitId, adSize, 0, ad_position);

・広告の高さについて

AdMobのスマートバナーの広告の高さはデバイスの種類によって自動的に変更されます。(Mobile Ads SDK(Unity)スマートバナーより)

今のところ(2020年9月現在)iPhoneでは50dpとなりiPadでは90dpとなります。この切り替えをsetAdHeight()関数で分けます。

public float setAdHeight()
{
    float ad_height_pt = 50;
    bool device_is_ipad = UnityEngine.iOS.Device.generation.ToString().Contains("iPad");
    if (device_is_ipad)
    {
        ad_height_pt = 90;
    }
    return ad_height_pt;
}

Retinaの倍率について

iPhone/iPadの機種によってRetinaの倍率が違います。今のところ、1倍、2倍、3倍があります。これを識別する便利な方法がないか調べましたが見つからなかったので力技でねじ伏せました。(これに関しては、もし他にいい方法があれば教えてください)

機種ごとのRetina倍率一覧

Unityでの識別デバイス一覧(Unityのバージョンに注意)

public int getDeviceRetina()
{
    int retina = 2;
    if(UnityEngine.iOS.Device.generation == UnityEngine.iOS.DeviceGeneration.iPhoneX)
    {
        retina = 3;
    }
}
//このような感じで必要なすべてのデバイスについてRetinaの倍率を指定する

以上の作業で、AdMob広告を目的の場所に配置することが可能となりました。

長くなってしまったので詳細についてはまた別の記事で紹介することにします。

コメント

タイトルとURLをコピーしました