ゲーム デベロッパー向け: 広告に関するおすすめの方法

このガイドでは、Google Mobile Ads SDK を使用してバナー広告とインタースティシャル広告をゲームに組み込むおすすめの方法について説明します。ゲーム デベロッパー向けのクロスプラットフォームおよびプラットフォーム固有の統合オプションがあります。

クロスプラットフォームのオプションには、次のものがあります。

このガイドでは、OpenGL ベースの iOS ゲームおよび Cocos2d-x での統合について説明します。

基本的な参考情報

OpenGL を使用して Google Mobile Ads を iOS 用のコードに組み込む場合は、 スタートガイドおよびインタースティシャル ガイドをご覧になり、この SDK の使用方法をご確認ください。

OpenGL ベースのゲームエンジンを使用する一方で、広告をネイティブの iOS SDK と統合する場合は、バナー広告を表示するのは、ゲームの一時停止中やクリア時など、ユーザーが画面でゲームプレイに集中していない状況に限定することをおすすめします。これには次の利点があります。

  • ユーザー エクスペリエンスの向上。ユーザーは、ゲームプレイ中に広告に中断されることを好みません
  • パフォーマンスの向上。広告はゲームのフレームレート(FPS)に影響する場合があります
  • 意図しないクリックの防止

次の例は、最小限のコードでバナー広告を追加する方法を示しています。広告を読み込む適切なタイミングは、デベロッパー側で考慮する必要があります。

この例では、SpriteKit をベースにしていますが、どのフレームワークにも適用できます。SpriteKit ゲームの新しい Xcode プロジェクトを作成すると、GameViewController's viewDidLoad メソッド内のボイラープレート コードは、以下のようになります。

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];

  // Configure the view.
  SKView *skView = (SKView *)self.view;
  skView.showsFPS = YES;
  skView.showsNodeCount = YES;

  // Sprite Kit applies additional optimizations to improve rendering performance.
  skView.ignoresSiblingOrder = YES;

  // Create and configure the scene.
  GameScene *scene = [GameScene unarchiveFromFile:@"GameScene"];
  scene.scaleMode = SKSceneScaleModeAspectFill;

  // Present the scene.
  [skView presentScene:scene];
}

Swift

override func viewDidLoad() {
  super.viewDidLoad()

  if let scene = GameScene(fileNamed:"GameScene") {
    // Configure the view.
    let skView = view as! SKView
    skView.showsFPS = true
    skView.showsNodeCount = true

    // Sprite Kit applies additional optimizations to improve rendering performance.
    skView.ignoresSiblingOrder = true

    // Set the scale mode to scale to fit the window.
    scene.scaleMode = .aspectFill

    // Present the scene.
    skView.presentScene(scene)
  }
}

SDK をブロジェクトに追加したら、viewDidLoad メソッドを書き換えてバナー広告を含めます。以下のケースでは、スマートバナー フォーマットを使用し、画面の左上で初期化しています。

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];

  // Create a banner ad and add it to the view hierarchy.
  self.bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerPortrait];
  self.bannerView.hidden = YES;
  self.bannerView.adUnitID = @"ca-app-pub-3940256099942544/2934735716";
  self.bannerView.rootViewController = self;
  [self.view addSubview:self.bannerView];</b>

  // Configure the view.
  SKView *skView = (SKView *)self.view;
  skView.showsFPS = YES;
  skView.showsNodeCount = YES;

  // Sprite Kit applies additional optimizations to improve rendering performance.
  skView.ignoresSiblingOrder = YES;

  // Create and configure the scene.
  GameScene *scene = [GameScene unarchiveFromFile:@"GameScene"];
  scene.scaleMode = SKSceneScaleModeAspectFill;

  // Present the scene.
  [skView presentScene:scene];
}

Swift

override func viewDidLoad() {
  super.viewDidLoad()

  // Create a banner ad and add it to the view hierarchy.
  bannerView = GADBannerView(adSize: kGADAdSizeSmartBannerPortrait)
  bannerView.hidden = true
  bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
  bannerView.rootViewController = self
  view.addSubview(bannerView)

  if let scene = GameScene(fileNamed:"GameScene") {
    // Configure the view.
    let skView = view as! SKView
    skView.showsFPS = true
    skView.showsNodeCount = true

    // Sprite Kit applies additional optimizations to improve rendering performance.
    skView.ignoresSiblingOrder = true

    // Set the scale mode to scale to fit the window.
    scene.scaleMode = .aspectFill

    // Present the scene.
    skView.presentScene(scene)
  }
}

コンパイル エラーを解決するため、ファイルの先頭で GADBannerView をインポートして bannerView プロパティを追加します。

Objective-C

#import "GADBannerView.h"

@interface GameViewController()

@property(nonatomic, strong) GADBannerView *bannerView;

@end

Swift

import GoogleMobileAds

class GameViewController: UIViewController {
  var bannerView: GADBannerView!
  ...
}

これで、アプリでバナーを表示する準備ができました。残りの手順は、広告の表示と広告リクエストの実行だけです。この処理は、showBanner というヘルパー メソッドで行います。

Objective-C

- (void)showBanner {
  self.bannerView.hidden = NO;
  GADRequest *request = [GADRequest request];
  request.testDevices = @[@"2077ef9a63d2b398840261c8221a0c9b"];
  [self.bannerView loadRequest:request];
}

Swift

func showBanner() {
  bannerView.hidden = false
  let request = GADRequest()
  request.testDevices = ["2077ef9a63d2b398840261c8221a0c9b"]
  bannerView.load(request)
}

showBanner を呼び出すと、ゲームにバナー広告が表示されます。

ゲームプレイ中は、この広告を非表示にするのが適切でしょう。この処理を行うには、次の hideBanner メソッドを呼び出します。

Objective-C

- (void)hideBanner {
  self.bannerView.hidden = YES;
}

Swift

func hideBanner() {
  bannerView.hidden = true
}

ゲームが終了したら、showBanner メソッドを再度呼び出し、広告を更新して表示します。

Cocos2d-x

いずれかの Cocos2d-x ゲームエンジンを使用する場合は、AnySDK フレームワークを統合し、広告システムを使用するようにアプリを構築することで、iOS アプリを収益化できます。

このガイドでは、Cocos2d-x アプリの AnySDK 統合を示しています。これらの概念は、Cocos2d-x エンジンのスイート全体にも適用されます。

要件

  • 最新バージョンの Cocos2d-x
  • AnySDK フレームワーク v1.2.3 以降
  • AnySDK パッケージ ツール

ゲームへの AnySDK のインポート

AnySDK フレームワークの取得ガイドを完了します。このガイドでは、C++ と Android の両方のレベルで AnySDK をインポートする手順について説明しています。

AnySDK 広告システム API

AnySDK のインポートが正常に完了したら、広告システムガイドを参照しながら、AnySDK 広告システムを使用してコードを記述できます。

AdMob は、バナーとフルスクリーン フォーマットの広告を指定するための広告タイプ AD_TYPE_BANNER および AD_TYPE_FULLSCREEN をサポートしています。 以下のセクションでは、AdMob の統合でよく使用する一部のメソッドについて説明します。

バナー広告をリクエストして表示するには、showAds() メソッドを AD_TYPE_BANNER 広告タイプを指定して使用します。

AdsPlugin* ads = AgentManager::getInstance()->getAdsPlugin();
ads->showAds(AD_TYPE_BANNER);

バナーを非表示にするには、hideAds() メソッドを使用します。

ads->hideAds(AD_TYPE_BANNER);

インタースティシャル広告

インタースティシャルを明確に表示する前に、AD_TYPE_FULLSCREEN 広告タイプを指定し、preloadAds() メソッドを使用してインタースティシャルをプリロードします。

AdsPlugin* ads = AgentManager::getInstance()->getAdsPlugin();
ads->preloadAds(AD_TYPE_FULLSCREEN);

その後、インタースティシャルを表示すべき時点で showAds() を呼び出します。

ads->showAds(AD_TYPE_FULLSCREEN);

複数のバナーやインタースティシャルの使用

複数のバナーサイズやさまざまな広告ユニット ID を使用する必要がある場合は、showAds() メソッド、hideAds() メソッド、preloadAds() メソッドにインデックスを渡すことができます。次に例を示します。

ads->showAds(AD_TYPE_BANNER, 2); // show banner #2
ads->hideAds(AD_TYPE_BANNER, 2); // hide banner #2
ads->showAds(AD_TYPE_FULLSCREEN, 2); // preload interstitial #2
ads->preloadAds(AD_TYPE_FULLSCREEN, 2); // show interstitial #2

インデックスが指定されていない場合、デフォルトは 1 になります。

あとで AnySDK パッケージ ツールで AdMob を設定する際に、各バナーには広告ユニット ID、広告サイズ、位置を設定し、各インタースティシャルには広告ユニット ID を設定できます。

広告イベントがないかのリッスン

広告が正常に取得された場合など、広告イベントの通知を受け取るには、クラスに AdsListener を実装します。このリスナーには、すべてのイベントを通知する単一のメソッド onAdsResult() が含まれています。

AdMob は、以下の広告イベントをサポートしています。

  • kAdsReceived
  • kAdsShown
  • kAdsDismissed
  • kNetworkError
  • kUnknownError

onAdsResult() メソッドのスケルトン実装は通常、次のようになります。

void onAdsResult(AdsResultCode code, const char* msg) {
  switch(code) {
    case kAdsReceived:
      // Ad has been received.
      break;
    case kAdsShown:
      // Ad is presenting a full screen view.
      break;
    case kAdsDismissed:
      // A full screen ad view is being dismissed.
      break;
    case kNetworkError:
      // Ad failed due to network error.
      break;
    case kUnknownError:
      // Ad failed.
      break;
    default:
      break;
  }
}

これを基にして、各イベントに対するアクションを決めることができます。

最後に、プラグインの広告リスナーを設定して、広告イベント通知を受け取るクラスを AnySDK に指定します。

AgentManager::getInstance()->getAdsPlugin()->setAdsListener(this);

広告スペースを埋めるための AdMob 有効化

アプリで AnySDK 広告システムを使用するように設定したら、AnySDK パッケージ ツールを使用して、AdMob が広告スペースを利用できるようにします。AnySDK は、Android と iOS で個別に設定する必要があります。iOS の手順を次に説明します。

  1. [設定] タブで、設定ダイアログの [SDK] セクションに移動し、広告プロバイダとして [iOS-AdMob] を指定し、[SDK リスト] パネルで該当するチェック ボックスをオンにして、アプリがサポートするフォーマットを選択します。

  2. [設定] タブで、[パラメータ] セクションに移動し、バナーやインタースティシャルの iOS 広告ユニット ID を入力します。バナーを使用する場合はサイズと位置も指定します。

    アプリで複数のバナーを使用する場合(複数のバナーやインタースティシャルの使用セクションを参照)、[+] タブをクリックして、各バナーの広告ユニットを設定します。インタースティシャルについても同様に設定します。

  3. [書き出し] タブで、画面の下部にある [参照] ボタンをクリックして、Cocos2d-x プロジェクトの最上位ディレクトリを選択します。

    どの .xcodeproj を使用するか尋ねられたら、proj.ios_mac/ ディレクトリ内のプロジェクトを選択して [OK] をクリックします。次に、[開始] をクリックします。

    設定は以上です。この手順によって、AdMob が含まれるバージョンのプロジェクトが生成されます。

AdMob メディエーションのサポート

AnySDK フレームワークでメディエーションを行うには、メディエーションのメディエーション ガイドで説明しているとおり、各サードパーティ ネットワークの SDK とアダプタ ライブラリの両方をダウンロードして含める必要があります。ただし、OS によって次の違いがあります。

  • iOS の場合、必須ライブラリは、AnySDK パッケージ ツールを使用する前に、Xcode プロジェクトに追加します。

DoubleClick for Publishers のサポート

DFP 広告ユニットは AnySDK で使用できますが、広告サイズの定数値は、AnySDK で指定できるものに限られます。カスタム広告サイズや指定範囲によるターゲット設定はサポートされていません。

よくある質問

ここで説明されていないゲームエンジンを使用しています。Google モバイル広告を組み込むにはどうすればよいですか?
OpenGL iOS ゲームのバナー広告をご覧ください。どのゲームに広告を実装する場合にも当てはまるおすすめの方法が提供されています。
Unity に関するサポートはどこで受けることができますか?
Google モバイル広告 Unity プラグインに関するご質問は、Google Mobile Ads SDK デベロッパー向けフォーラムをご覧ください。バグを報告するには、GitHub の問題追跡ツールに問題を追加してください。 Unity に関する一般的なご質問は、Unity コミュニティにお問い合わせください。
Cocos2d-x に関するサポートはどこで受けることができますか?
AnySDK フレームワークの統合、AnySDK パッケージ ツールの使用、バグの報告に関するサポートは、AnySDK の連絡フォームをご利用ください。

フィードバックを送信...