2015年04月12日

cocos2d-xでAdMobメディエーションの実装

今週は広告表示の実装をしました。広告会社は傾撃の時と同じでAppBankNetwork、iAd、AdMobをAdMobメディエーションで切り替える感じです。アイコン型とかウォール型の広告にも興味があるのですがリジェクトされるという噂もあるので、とりあえずバナー型とインタースティシャル型だけで。

各Webサイト側での設定は以前に済ませていたようで全く覚えていないのでプログラム側だけメモ書きです。

  1. 次のファイルをダウンロードしてプロジェクトに追加。
    • GoogleMobileAds.freamwork
    • libAdapterIAd.a
    • NendSDKのNendAdフォルダ
    • NendSDKのlibAdapterNend.a
  2. 次のフレームワークを追加。
    • AdSupport
    • AudioToolbox
    • AVFoundation
    • CoreGraphics
    • CoreTelephony
    • EventKit
    • EventKitUI
    • MessageUI
    • StoreKit
    • SystemConfiguration
    • UIKit
    • CoreMedia
    • Security
    • iAd
  3. RootViewControllerに広告ビューのインスタンスと作成、表示処理を追加。
    • RootViewController.h
    • #import "GoogleMobileAds/GADBannerView.h"
      #import "GoogleMobileAds/GADInterstitial.h"
      
      @interface RootViewController : UIViewController {
          GADBannerView *bannerView_;
          GADInterstitial *interstitialView_;
      }
      
      @property (nonatomic, retain)GADBannerView *bannerView;
      @property (nonatomic, retain)GADInterstitial *interstitialView;
      
      - (void)createAdBanner;
      - (void)deleteAdBanner;
      - (void)createAdInterstitial;
      - (void)viewAdInterstitial;
      
      @end
      
    • RootViewController.mm
    • - (void)createAdBanner
      {
          // すでに作成済みの場合は処理しない
          if (self.bannerView != nil) {
              return;
          }
          
          // 画面下部に標準サイズのビューを作成する
          self.bannerView = [[[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner] autorelease];
          
          // 広告のユニットIDを指定する
          self.bannerView.adUnitID = UNIT_ID;
          
          // ユーザーに広告を表示した場所に後で復元する UIViewController をランタイムに知らせて
          // ビュー階層に追加する。
          self.bannerView.rootViewController = self;
          [self.view addSubview:self.bannerView];
          
          // 広告リクエストを作成する
          GADRequest *request = [GADRequest request];
          
          // テスト広告のリクエストを行う。
          request.testDevices = [NSArray arrayWithObjects:TEST_DEVICE_ID, nil];
          
          // リクエストを行って広告を読み込む
          [self.bannerView loadRequest:request];
      }
      
      - (void)deleteAdBanner
      {
          // バナーを取り除く
          [self.bannerView removeFromSuperview];
          
          // バナーを削除する
          self.bannerView = nil;
      }
      
      - (void)createAdInterstitial
      {
          // インタースティシャル広告を作成する
          self.interstitialView = [[[GADInterstitial alloc] init] autorelease];
          
          // 広告のユニットIDを指定する。
          self.interstitialView.adUnitID = UNIT_ID;
          
          // デリゲートを設定する
          self.interstitialView.delegate = self;
          
          // 広告リクエストを作成する
          GADRequest *request = [GADRequest request];
          
          // テスト広告のリクエストを行う。
          request.testDevices = [NSArray arrayWithObjects:TEST_DEVICE_ID, nil];
          
          // リクエストを行って広告を読み込む
          [self.interstitialView loadRequest:request];
      }
      
      - (void)viewAdInterstitial
      {
          // インタースティシャル広告を表示する準備ができている場合、
          // 広告を表示する。
          if ([self.interstitialView isReady]) {
              [self.interstitialView presentFromRootViewController:self];
          }
      }
      
      - (void)interstitialDidDismissScreen:(GADInterstitial *)ad
      {
          // インタースティシャル広告の表示が終了した時に、
          // 再度作成を行う。
          [self createAdInterstitial];
      }
      
  4. C++からネイティブコードを呼び出すためのクラスを作成する。ここではクラス名はAdvertisementとした。
    • Advertisement.h
    • class Advertisement {
      public:
          static void viewBanner();
          static void hideBaaner();
          static void viewInterstatial();
      };
      
    • Advertisement.mm
    • void Advertisement::viewBanner()
      {
          UIWindow *window = [UIApplication sharedApplication].keyWindow;
          if (window == nil) {
              window = [[UIApplication sharedApplication].windows objectAtIndex:0];
          }
      
          if ([window.rootViewController isKindOfClass:[RootViewController class]]) {
              RootViewController *rootViewController = (RootViewController *)window.rootViewController;
              [rootViewController createAdBanner];
          }
      }
      
      void Advertisement::hideBaaner()
      {
          UIWindow *window = [UIApplication sharedApplication].keyWindow;
          if (window == nil) {
              window = [[UIApplication sharedApplication].windows objectAtIndex:0];
          }
          
          if ([window.rootViewController isKindOfClass:[RootViewController class]]) {
              RootViewController *rootViewController = (RootViewController *)window.rootViewController;
              [rootViewController deleteAdBanner];
          }
      }
      
      void Advertisement::viewInterstatial()
      {
          UIWindow *window = [UIApplication sharedApplication].keyWindow;
          if (window == nil) {
              window = [[UIApplication sharedApplication].windows objectAtIndex:0];
          }
          
          if ([window.rootViewController isKindOfClass:[RootViewController class]]) {
              RootViewController *rootViewController = (RootViewController *)window.rootViewController;
              [rootViewController viewAdInterstitial];
          }
      }
      
ラベル:とりとま AdMob
posted by かねだ at 21:54| Comment(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。