こんにちは。ちでソフトです。
本記事では、Google Mobile Ads Unity プラグイン の更新作業について紹介しています。
前回( vol.1 )の内容が一部古くなったこともあり、新たに記事を公開させていただきました。
なお、本記事は前編・後編に分かれています。
・Google Mobile Ads Unity Plugin v7.0.1をv8.6.0へ更新します。
・バナー広告の実装の仕方をコード付きで紹介します。
後編
・リワード広告の実装の仕方をコード付きで紹介します。
・ビルド時のエラー対応を紹介します。 共通
・Unityエディタは2021.3.24fを使用しています。

前回の記事をふり返って
ま、いいかな?
繰り返しますが、今回のGoogle Mobile Ads Unityプラグイン(以下 Google Mobile Ads ) 更新作業は、前回の記事の続きとしてバージョン7.0.1 から 8.6.0 (記事執筆時の最新バージョン) へのものとなります。
バージョン7.0.1よりも古いバージョンをご利用されている方は、アンインストールに際しましては前回の更新作業(バージョン5.4.0を扱っています)が参考になる可能性もあります。
前回の記事で扱ったバージョン7系には、かなり苦しめられた経験があります。当時の最新版の導入は断念せざるを得なく、将来に期待をかけた記事内容になっていましたが、今のバージョン8系に至ってようやく改善の兆しが見えた感があります。
また、古いコードが載っていたままだった公式ガイドも、ここひと月で幾度も更新され、実装の参考になりやすくなっているようです。
もはや当方が記事にして紹介する必要もないかと一度はためらいましたが、注意点やつまづきポイントに遭遇しましたので、補足のつもりで記事にしてみました。
なお、当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。
事前準備
・「アプリID」の確認
・「各広告ユニットID」の確認
・「テストデバイス」の設定(スマホ実機での確認に必要)
・・・ってところかしら?
本記事は更新作業を目的としているため、すでに Google Mobile Adsを導入されたことがある方を主に対象としているのですが、はじめて Google Mobile Ads を導入するという方もいらっしゃるでしょうから、その方々は公式ガイド等の情報を確認して、以上の準備をしておいてくださいね。
また、アプリがまだGoogle AdMobにおいて承認されていない段階でも、テストIDを使用してテスト広告を表示してみることは可能となっています。
▼ご参考まで(Google AdMob ヘルプより)
古いGoogle Mobile Ads Unity プラグインのアンインストール(Version 7.0.1のケース)
さっそく、落とし穴が・・・

そのまま【Apply】しちゃうと、正しいコードを記述しても、実行時にエラーになってしまうわよ!!
まず、一番最初のつまづきポイントがここになるかと思います。
最新のGoogle Mobile Ads Unity プラグインを既存のを上書きする形でインポートした後に、このダイアログが表示されたのですが、「古いファイルを削除しますか?( Would you like to delete the following obsolete files in your project ? )」との文言を、まずは何も疑わずに試しに実行してみた結果、それまでテスト広告を表示できていた最新のプラグイン付属のサンプルデータが実行できなくなってしまったわけです(このダイアログの表示には若干タイムラグが発生するケースがあります)。
そもそも、上書きインポート自体も早急にやるのではなく、既存ファイルの調査が必要かもしれません。
手順
1) 「Unityエディタ」を起動する。
2) 「Assets」フォルダに格納されている3つのフォルダ
①「Plugins」
②「ExternalDependencyManager」&「GoogleMobileAds」(複数選択)を
この順番(①→②)で削除する。
・先に「Plugins」フォルダのみを一つ選択して削除しないと、残りのフォルダを含めて完全に削除ができない場合があります。
・以前のプラグインを導入した際にデフォルトで新規に用意されたものとは異なるファイル、または編集したファイルにつきましては、削除を行うかどうかを含めて各自の判断で取り扱ってください。
例) Assets\Plugins\Android\proguard-user.txt など
そしてまた必要になりそうなら復元してみましょうか。
新しいGoogle Mobile Adsのインストール
1 ) 以下のURL(GitHub)より GoogleMobileAds-v8.6.0.unitypackage をダウンロードします。
※この記事を執筆している時点での最新バージョンのURLです。
https://github.com/googleads/googleads-mobile-unity/releases/tag/v8.6.0
2) Unityエディターの上部メニューより【 Assets 】→【 Import Package 】→【 Custom Package 】の順にクリックして、ダウンロードしたプラグインを指定する。
3) 【 Import 】をクリックしてすべてのファイルをインポートする。
「ExternalDependencyManager」等が再度導入されます。

4) Androidのプロジェクトの場合は、Unityエディターの上部メニューより【Edit】→【Project Settings】→【Player】→【Publishing Settings】→「Build」より以下を選択します。
・「Custom Main Gradle Template」
・「Custom Gradle Properties Template」

5) Unityエディターの上部メニューより【 Assets 】→【 External Dependency Manager 】→【 Android Resolver 】→【 Resolve 】の順にクリック。
6 ) 【OK】をクリック

7 ) 【 Assets 】→【 Google Mobile Ads 】→【 Settings 】の順にクリック。
8 ) 各フィールドに Android と iOS の AdMob アプリ ID を再入力します。

以上
スクリプトの編集
・最低限こんな具合に記述していけば、各広告が表示されるようになるはずですよ、といったレベルの内容です。また、すでにGoogle Mobile Ads Unity Pluginを導入されたことがある方には不必要な説明も含まれているかと存じます。
・一部のメソッドの実行方法(ボタンと組み合わせて手動実行にするか、または void Start() で自動実行にするかなど)につきましては、具体的な実装は各自にお任せさせていただいております(つまり丸ごとコピペしただけでは広告は表示されないです)。
・実際には広告を最適に表示させる手段が存在していたり、各状況に応じた細かいカスタマイズが必要になる可能性がありますが、それらの説明は割愛させていただきます。
・プラグインのバージョンごとに記述が異なってくる可能性も孕んでいるはずなのでご注意ください(実際、流用できたりできなかったりします)。
・つきましてはご参考にするしないは各自のご判断にお任せさせていただきます。実装に関連するご質問は受け付けておりませんのでご了承ください。
自分がアプリに組み込んだコードを丸ごと全部公開すればいいのに~~!ケチねぇ~~!!
一部濁した表現をしている箇所があるはずですが、できる限りの情報は共有させていただくつもりなので、ご勘弁くださいませ。
SDKを初期化する
...
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
public void Start()
{
// Initialize the Google Mobile Ads SDK.
MobileAds.Initialize(initStatus => {
// 初期化が済んでから行われる処理をここに記述します。
});
}
}
バナー広告
...
using GoogleMobileAds.Api;
...
public class Banner : MonoBehaviour
{
#if UNITY_ANDROID
private const string _adUnitId = "ca-app-pub-3940256099942544/6300978111";//テスト用のユニットID
#elif UNITY_IPHONE
private const string _adUnitId = "ca-app-pub-3940256099942544/2934735716";//テスト用のユニットID
#else
private const string _adUnitId = "unused";
#endif
private BannerView _bannerView;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
/// <summary>
/// Creates a 320x50 banner at top of the screen.
/// </summary>
public void CreateBannerView()
{
Debug.Log("Creating banner view.");
// If we already have a banner, destroy the old one.
if (_bannerView != null)
{
DestroyAd();
}
// Create a 320x50 banner at top of the screen. -------※①
_bannerView = new BannerView(_adUnitId, AdSize.Banner, AdPosition.Top);
// Listen to events the banner may raise.
// バナービューイベントをリッスンします。-------※②
ListenToAdEvents();
Debug.Log("Banner view created.");
}
/// <summary>
/// Creates the banner view and loads a banner ad.
/// </summary>
public void LoadAd()
{
// Create an instance of a banner view first.
if (_bannerView == null)
{
CreateBannerView();
}
// Create our request used to load the ad.
var adRequest = new AdRequest();
// Send the request to load the ad.
Debug.Log("Loading banner ad.");
_bannerView.LoadAd(adRequest);
}
/// <summary>
/// Destroys the ad.
/// When you are finished with a BannerView, make sure to call
/// the Destroy() method before dropping your reference to it.
/// </summary>
public void DestroyAd()
{
if (_bannerView != null)
{
Debug.Log("Destroying banner view.");
_bannerView.Destroy();
_bannerView = null;
}
}
/// <summary>
/// Listen to events the banner may raise.
/// </summary>
private void ListenToAdEvents()
{
// Raised when an ad is loaded into the banner view.
// 広告がバナービューに読み込まれるときに発生します。
_bannerView.OnBannerAdLoaded += () =>
{
Debug.Log("Banner view loaded an ad with response : "
+ _bannerView.GetResponseInfo());
// Inform the UI that the ad is ready.
// AdLoadedStatus?.SetActive(true);
};
// Raised when an ad fails to load into the banner view.
// 広告がバナービューに読み込まれない場合に発生します。
_bannerView.OnBannerAdLoadFailed += (LoadAdError error) =>
{
Debug.LogError("Banner view failed to load an ad with error : " + error);
};
// Raised when the ad is estimated to have earned money.
// 広告が収益を上げたと推定される場合に発生します。
_bannerView.OnAdPaid += (AdValue adValue) =>
{
Debug.Log(String.Format("Banner view paid {0} {1}.",
adValue.Value,
adValue.CurrencyCode));
};
// Raised when an impression is recorded for an ad.
// 広告のインプレッションが記録されるときに発生します。
_bannerView.OnAdImpressionRecorded += () =>
{
Debug.Log("Banner view recorded an impression.");
};
// Raised when a click is recorded for an ad.
// 広告のクリックが記録されたときに発生します。
_bannerView.OnAdClicked += () =>
{
Debug.Log("Banner view was clicked.");
};
// Raised when an ad opened full screen content.
// 広告が全画面コンテンツを開いたときに発生します。
_bannerView.OnAdFullScreenContentOpened += () =>
{
Debug.Log("Banner view full screen content opened.");
};
// Raised when the ad closed full screen content.
// 広告が全画面コンテンツを閉じたときに発生します。
_bannerView.OnAdFullScreenContentClosed += () =>
{
Debug.Log("Banner view full screen content closed.");
};
}
}
バナーのサイズや位置はここでカスタマイズできます。