【サポート終了】広告プレースメントでAdMob広告を実装する【Unity】【AdMob】

AdMob

2023/9/15 追記
広告プレースメントはベータ版で正式リリースが待たれていたがいつの間にかサポート終了していた。
残念だが通常通りの実装が必要。

以下は古い情報

ベータ版で新しく用意された広告プレースメントを使用してAdMobを実装してみます。
今までのUnityにAdMobを組み込む労力はなんだったのかと思うくらい簡単でわかりやすいです。
オススメ。

すでにAdMobのアカウントを持っている前提です。
Unity 2020.3.13f1

広告ユニットを作成する (AdMob作業)

広告プレースメントを使用しない場合と変わりません。
すでにID取得済みの場合は飛ばしてOKです。

アプリIDの取得

AdMobのアプリを選択し、「アプリを追加」を選択します。

アプリに合わせてプラットフォームを選択します。
これから開発する未公開のアプリの場合はいいえを選択し、「次へ」をクリックします。

アプリ名を入力し、「アプリを追加」をクリックします。

アプリ名はアプリストアとリンクすると自動で正式なアプリ名に置き換わるので、自分が識別可能な名前ならなんでもOKです。

広告ユニットIDの取得

ここで取得する広告ユニットIDはリリース後に使用する本番用のIDです。
この後の実装確認ではテスト用のIDを使用します。

とりあえず開発で動作確認だけしたい場合は、この項を飛ばしてリリース前に後から取得しても大丈夫です。

作成が完了したら続けて広告ユニットを作成します。
広告ユニットの作成」をクリックします。

作成する広告フォーマットを選択します。
ここでは例としてバナーを選択します。

広告ユニット名を入力し、「広告ユニットの作成」をクリックします。

広告ユニットの名前はユーザから見えることはないため、自分が識別可能な名前ならなんでもOKです。

また、詳細設定では広告の配信内容などを設定できますが、後から変更することが可能なのでデフォルトのままで大丈夫です。

作成が完了しました。
1のアプリIDと、2の広告ユニットIDをメモしておきます。

Android/iOSのどちらにも対応する場合は、アプリIDの作成から再度実施し、2つのアプリIDを取得します。

同じプラットフォーム内で複数の広告を使用する場合は、広告ユニットIDを必要な分だけ作成します。
この場合、1つのアプリIDに対して複数の広告ユニットIDが存在することになります。

Unityにプラグインを追加する

公式のスタートガイドの記載通りに進めます。

Google Mobile Ads Unity プラグインのインポート

プレースメントのプラグインをダウンロードします。
https://dl.google.com/googleadmobadssdk/GoogleMobileAds-Ad-Placements.unitypackage
※ダウンロード先は公式ドキュメントに記載されているので、最新を確認して使用してください。

Unityでプロジェクトを開きます。
[Assets] > [Import Package] > [Custom Package]を選択します。
ダウンロードした GoogleMobileAds-Ad-Placements.unitypackage ファイルを選択します。


すべてのチェックが入っていることを確認し「Import」をクリックします。

インポート中に確認ウインドウが表示されたら適当にOKしていきます。

すでにプロジェクトに古い(広告プレースメント非対応版の)プラグインをインポート済みの場合エラーが発生することがあります。
その場合はAssets/GoogleMobileAdsフォルダを削除してから再度Importするとうまくいきました。

Importがうまくいくと[Assets] > [Google Mobile Ads] メニューが追加されます。

AdMob アプリ ID を設定する

[Assets] > [Google Mobile Ads] > [Settings] を選択します。

Google AdMob の Enabled にチェックを入れます。
先ほどメモしておいたアプリIDを入力します。

Mobile Ads SDK を初期化する

広告を読み込む前に MobileAds.Initialize() を呼び出して、アプリで Mobile Ads SDK を初期化します。
この処理は 1 回のみ必要なので、アプリの起動時など広告ロード前に行います。

MobileAds.Initialize() 実行時に広告のプリロードが行われることがあります。
アプリの配信地域に欧州経済領域(EEA)を含める場合は、実行前にユーザからの同意を取得する処理を追加するなどの対応が必要です。

よくわからない場合はアプリをリリースする際の配信地域から欧州経済領域(EEA)を除くのが無難です。

GoogleMobileAdsDemoScript」という名前で、以下スクリプトを作成します。

using UnityEngine;
using GoogleMobileAds.Api;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    public void Start()
    {
        // Initialize the Mobile Ads SDK.
        MobileAds.Initialize((initStatus) =>
        {
            // SDK initialization is complete
        });
    }
}

Hierarchy > Create Empty で空のGameObjectをSceneに追加して、先ほど作成した「GoogleMobileAdsDemoScript」スクリプトを追加します。

これで起動時に初期化処理が実行されます。

広告プレースメントを作成する

 [Assets] > [Google Mobile Ads] > [Ad Placements] をクリックします。

インスペクタに広告プレースメントが作成されます。

デフォルトで広告種別ごとに1つずつデモ用の広告プレースメントが作成されます。

Android Ad Unit ID / iOS Ad Unit ID にはデフォルトでデモ用のテスト広告IDが入力されています。
今回は開発段階での動作確認のためこのまま使用します。
実際にリリースする前にはAdMobで作成した広告ユニットIDに書き換える必要があるので忘れないようにしましょう。

使用しないプレースメントは右下のゴミ箱マークで削除できます。
プレースメントを追加したい場合は、[Add New Placement] で追加できます。
例えば1つのアプリに複数のリワード広告を用意する場合は、識別可能な名前をつけて追加します。

これで広告を使用するための準備は整いました。
ここからはそれぞれの広告の実装方法の例をいくつか記載します。

バナー広告の実装

めちゃくちゃ簡単です。

Hierarchy ウィンドウで [Google Mobile Ads] > [Banner Ad] を作成します。

バナー広告オブジェクトが生成されます。
InspectorからBanner Ad Game ObjectBanner configuration を設定し、任意のバナーの形式を指定します。
詳細は公式ドキュメントを参照してください。

これだけでバナーが表示されるようになります。

リワード広告の実装

最低限の機能を実装してみます。
 ・起動時に自動で広告をロードする
 ・リワードボタンを押すと広告が流れ、報酬獲得するとログが表示される

広告オブジェクトの追加

起動時に広告をロードします。
[Assets] > [Google Mobile Ads] > [Ad Placements] をクリックして一覧を表示し、リワード広告の 「Auto Load Enabled」をONにします。

Hierarchy ウィンドウで [Google Mobile Ads] > [Rewarded Ad] を作成します。

報酬獲得処理を追加

SDKの初期化のために作成した「GoogleMobileAdsDemoScript」スクリプトを以下のように書き換えて報酬獲得用の関数を追加します。

using UnityEngine;
using GoogleMobileAds.Api;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    public void Start()
    {
        // Initialize the Mobile Ads SDK.
        MobileAds.Initialize((initStatus) =>
        {
            // SDK initialization is complete
        });
    }

    // リワード広告の報酬獲得処理
    public void OnUserEarnedReward(Reward reward)
    {
        Debug.Log("OnUserEarnedReward: reward=" +
            reward.Type + ", amount=" + reward.Amount);
    }
}

先ほど作成した[Rewarded Ad] オブジェクトのコールバックを設定します。
[Rewarded Ad] オブジェクトのInspectorから [Rewarded Ad Game Object] > [Callbacks] > [On User Earned Reward] の右下の [+] をクリックします。

先ほどのスクリプトをアタッチしたGameObjectを左下の枠にドラッグアンドドロップします。
Functionから先ほど作成したOnUserEarnedReward関数を選択します。
これでリワード広告の再生が完了して報酬獲得するタイミングでこの関数が呼ばれるようになります。

広告再生用のボタンを作成

Hierarchy ウィンドウの [UI] > [Button] でボタンをSceneに追加します。

InspectorからボタンのOn Clickイベントを追加します。
先ほど作成したRewarded Adオブジェクトをドラッグアンドドロップで設定し、「ShowIfLoaded()」関数を選択します。

これで完了です。
ボタンをクリックするとリワード広告が再生され、再生が完了するとログが出力されるようになります。

実際にはロードが失敗した時や広告再生に失敗した時の処理などを追加する必要がありますが、これらも報酬獲得処理と同様にRewarded Adオブジェクトのコールバックから簡単に設定することができます。

トラブルシューティング

私の環境で発生したトラブルと修正方法を簡単にメモしておきます。
参考までにどうぞ。

プラグインのインポートでエラーが発生する

古いプラグイン(広告プレースメント非対応版)がすでにインポート済みのプロジェクトだと競合が発生してエラーがおこることがありました。

【解決方法】
Assets/GoogleMobileAdsフォルダを削除してから再度Importするとうまくいきました。

 Android実機で広告が表示されない

Androidの実機で動作確認すると広告が表示されない場合は、Mobile Ads SDK の依存関係の設定がうまくいっていない可能性があります。

【解決方法】
[Assets] > [External Dependency Manager] > [Android Resolver] > [Force Resolve]の実行で表示されるようになりました。

本番広告が表示されない

本番広告はストアにリリースした後AdMobとリンクするまで表示されません。
開発中はテスト広告を使用するようにしましょう。

コメント

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