🐸

[GMS2]AdMobの設定方法

2021/09/30に公開
3

GameMaker Studio2でモバイルゲーム向けなどにAdMobを設定する方法をメモしておきます。

既存の記事としては、国内でGMS2関連の記事を多く執筆していらっしゃる@2dgames_jpさんが書かれた詳細な解説記事があるのですが、2021年8月にYoYoから新しいExtensionがリリースされたので、本記事はそのExtensionを使用する最新の導入方法を解説するものです。
ちなみに@2dgames_jpさんの記事は本当に参考になるものばかりで、私もGMSを使い始めたばかりの頃(今でもですが)、何度も読ませていただきました。本当にありがとうございます。

導入の流れ

  • MarketplaceでGoogle AdMob extensionを購入(無料)
  • My Libraryから上記Extensionを読み込む
  • AdMobのアプリIDと各広告ユニットのIDを設定する
  • Room内にObj_AdMobを設置する

新しいGoogle AdMob Extension


こちらより購入する

GMS2内のMy Libraryから必要ファイルを読み込む


他のExtensionと読み込み方法は同じですが、上部メニューのMarketplace > My Libraryから、先程購入したGoogle AdMobを読み込みます。

上記画像の上にあるものが新しいExtensionです。下のものは、以前までAdMobの表示に必要だった古いExtensionです。


Extension内の全てのアセットを読み込みます。デモ用のroomやボタンなどのファイルも含んでいるので、全てを読み込む必要はないのですが、中身を見ると表示や非表示の制御の参考にもなるので、最初はとりあえずファイル全部をざっと一読するとよいのかなと思います。

詳細なマニュアルについてはInclude Files内のdatafilesフォルダに、pdfのものとdocxのものが入っています。コードなどがまるでハイライトされていないのでかなり読みにくいですが…

AdMobのアプリIDと各広告ユニットのIDを設定する

Extension内でアプリIDを設定する

まず最初にアプリIDを設定します。

Extensionsフォルダ内のAdMobというファイルをダブルクリックすると、上記のような設定画面が出てくるので、iOS、Androidそれぞれの設定画面の中の、赤くハイライトした部分の文字列を、自分のアプリIDに置き換えます。ca-app-pub-で始まる文字列です。

Obj_AdMob内で広告ユニットのIDを設定する

次に、Obj_Admobを開きます。
Createイベント内に、以下のような記述があるので、それぞれの変数のなかのIDを、自分のアプリの広告ユニットIDに置き換えます。

var BANNER_ID, INTERSTITIAL_ID, REWANTED_ID;
if(os_type == os_android)
{
	BANNER_ID = "ca-app-pub-XXXXXXXXXXXXXXXXXXXXXXXXXX";
	INTERSTITIAL_ID = "ca-app-pub-XXXXXXXXXXXXXXXXXXXXXXXXXX";
	REWANTED_ID = "ca-app-pub-XXXXXXXXXXXXXXXXXXXXXXXXXX";	
}
else if(os_type == os_ios)
{
	BANNER_ID = "ca-app-pub-XXXXXXXXXXXXXXXXXXXXXXXXXX";
	INTERSTITIAL_ID = "ca-app-pub-XXXXXXXXXXXXXXXXXXXXXXXXXX";
	REWANTED_ID = "ca-app-pub-XXXXXXXXXXXXXXXXXXXXXXXXXX";	
}

まだ広告ユニットIDを作成していない場合は、以下のデモ用広告ユニットIDを使用すると良いです。
iOS用
Android用

Room内にObj_AdMobを設置する

最初のroomに、Obj_AdMobを設置して、表示準備は完了です。

デフォルトのObj_AdMobでは、Asyncイベント内にバナー広告を画面下部に表示させるような処理が最初から入っています。AdMob_Banner_Create(banner_type,true)

インターステイシャル広告とリワード広告に関しては、読み込み処理だけ最初から書いてあるので、あとは、任意のタイミングで(たとえばゲームが次のステージに行く際などに)AdMob_Interstitial_Show()関数を使用すると、インターステイシャル広告を表示させることができます。

Asyncイベント

// We do an early exit if the 'async_load' map doesn't contain a "type" key.
if(!ds_map_exists(async_load, "type"))
	exit;

show_debug_message("AdMob: " + json_encode(async_load));

// We switch on the type of the event being fired
switch(async_load[?"type"])
{

	// AdMob_Initialize finished
	case "AdMob_OnInitialized":
		// At this point the AdMob API succeeded to initialize.
		// We use this event to load both the interstitial/rewarded video ads.
		// インターステイシャル広告と、リワード動画広告のイニシャライズをします。(読み込むだけで、表示はしない。任意のタイミングでAdMob_Interstitial_Show()関数を使って表示。)
		AdMob_Interstitial_Load();
		AdMob_RewardedVideo_Load();
		
		//Load banner ad
		// バナー広告の種類をコメントアウトして選択できるようになっています。デフォルトではアダプティブバナーになっています。
		// var banner_type = AdMob_Banner_NORMAL;
		// var banner_type = AdMob_Banner_SMART;
		// var banner_type = AdMob_Banner_FULL;
		// var banner_type = AdMob_Banner_LARGE;
		// var banner_type = AdMob_Banner_MEDIUM;
		// var banner_type = AdMob_Banner_LEADERBOARD;
		 var banner_type = AdMob_Banner_ADAPTIVE;
		var bottom = true;
		//AdMob_Banner_Create(banner_type,bottom)でバナー広告を表示。
		AdMob_Banner_Create(banner_type,bottom);		
		break;
	
	// AdMob_Banner_Create succeeded
	case "AdMob_Banner_OnLoaded": 
		// At this point the banner ad succeeded to be created.
		//バナー広告の読み込みが終了したときの処理を追記できます。
		break;
	
	// AdMob_Banner_Create failed
	case "AdMob_Banner_OnLoadFailed":
		// At this point the banner ad failed to be created.
		//バナー広告の読み込みが失敗したときの処理を追記できます。
		break;
	
	// AdMob_Interstitial_Load succeeded
	case "AdMob_Interstitial_OnLoaded":
		// At this point the interstitial ad succeeded to load.
		//インターステイシャル広告の読み込みが終了したときの処理を追記できます。
		break;
	
	// AdMob_Interstitial_Load failed
	case "AdMob_Interstitial_OnLoadFailed":
		// At this point the interstitial ad failed to load.
		//AdMob_Interstitial_load() // This can create an infinite loop if load always fails!!
		//インターステイシャル広告の読み込みが失敗したときの処理を追記できます。ここに、AdMob_Interstitial_load()を追記して、失敗したらすぐに再読み込みが入るようにしてしまうと、何らかの事情でずっと広告が読み込めない際に、無限ループに入ってしまうので危険です。
		break;
	
	// 割愛しますが、以下もインターステイシャル広告とリワード広告の処理の分岐を記述できるような、switchのcase分岐が並んでいます。
	
	
}

おわりに

AdMob広告を表示するだけならば上記のやりかたでOKです。

ちなみにこのExtension内には、EU向けにアプリをリリースする際に必要なGDPRの承認を得るためのObj_Admob_Consentも入っているので、EU向けにアプリをリリースする際にはそちらの対応も必要です。(また別の記事で導入方法を書きたいと思います)

更に、iOSデバイス用には、iOS14以降で必須になったAppTrackingTransparency(ATT)への対応も必要ですが、こちらもYoYo謹製のプラグインが用意されています。

Discussion

SeagullSeagull

はじめまして。こちらの記事、参考にさせていただいています!ありがとうございます!

1点わからなかったのですが、Adaptiveの広告の表示位置・サイズを変更する場合はどのように行えばよいのでしょうか…?AdMob_*のfunctionを見てもそれらしきものが見当たらなかったので……

お忙しいところ恐縮ですが、ご共有いただけると大変幸いです。

niumnium

コメントをありがとうございます。

Banner広告のサイズは、下記のようにいくつかタイプが用意されているので、用途に応じてコメントアウトして、引数に渡してあげれば大丈夫だと思います。

// var banner_type = AdMob_Banner_NORMAL;
// var banner_type = AdMob_Banner_SMART;
// var banner_type = AdMob_Banner_FULL;
// var banner_type = AdMob_Banner_LARGE;
// var banner_type = AdMob_Banner_MEDIUM;
// var banner_type = AdMob_Banner_LEADERBOARD;
var banner_type = AdMob_Banner_ADAPTIVE;
var bottom = true;
AdMob_Banner_Create(banner_type,bottom);

また、Banner広告の表示位置は上下のどちらか選べるようになっていて、下記の関数で変更できます。

// 1: places banner at bottom
// 0: places banner at top
var bottom = 1;
AdMob_Banner_Move(bottom);
SeagullSeagull

なるほど、AdMob_Banner_Moveで上下を選択するんですね。ありがとうございます!