cocos2d-xでNendとiADの広告を表示する
|アプリ開発をしていて避けては通れない広告対応です。
objectiv-cで開発している場合は問題無いですが、cocos2d-xの場合は少し設定が必要になります。
Nendの評判が良いようですが、海外でダウンロードされた場合の対応を考えると複数の広告サービスを併用する必要があります。
Admobのメディエーションサービスを利用すると国別に使い分けることが出来るので、
1.日本国内はiAdとNendを併用
2.海外はiAdとAdmobを併用
の用に設定して利用してみたいと思います。
環境準備
それぞれの広告サービスが利用できる状態で、Admobのメディエーションも設定済の前提で話を進めます。
まだの人はサービス申し込みと設定を先に行って下さい。
SDKのダウンロード
それぞれのサービスから利用するSDKのダウンロードを行って下さい。
- Google Mobile Ads SDKから最新版のSDKをダウンロードします
- メディエーション ネットワークからiAd用のアダプターをダウンロードします
- NendへログインしてSDKをダウンロードします
SDKの追加
先に不要なアドオンを削除します。
GoogleAnalyticsServicesiOSを削除して下さい。
GoogleAdMobAdsSdkiOS-x.x.x/Add-ons/GoogleAnalyticsServicesiOS_x.x
ダウンロードしたSDKをXcodeプロジェクトへ追加します。
フォルダをドラッグアンドドロップで直接追加して下さい。
- GoogleAdMobAdsSdkiOS-x.x.x
- LibAdapterIAd/libAdapterIAd.a
- NendSDK_iOS/AdMobMediationAdapter/libAdapterNend.a
- NendSDK_iOS/Nend/NendAd
追加後はこんな感じです。
フレームワークの追加
TargetのBuild SettingsにSDKが依存しているフレームワークを追加して下さい。
- AdSupport.framework(RequiredをOptionalに変更)
- AudioToolbox.framework
- AVFoundation.framework
- CoreGraphics.framework
- CoreTelephony.framework
- iAd.framework
- MessageUI.framework
- Security.framework
- StoreKit.framework
- SystemConfiguration.framework
追加後はこんな感じです。
Linker Flagsの追加
Other Linker Flagsに-ObjCを追加します。
ここまできたら一度ビルドしてチェックして下さい。
エラーになる場合はSDKの追加漏れ、Linker Flagsの追加漏れ、フレームワークの追加漏れを確認して下さい。
「This file requires ARC support」と表示される場合はGoogleAnalyticsServicesiOSが追加されているので削除して下さい。
*間違って追加した場合はLibrary Search PathsをチェックしてGoogleAnalyticsServicesiOSも削除して下さい。
広告を表示するコードを記述する
AppController.hの編集
//ヘッダインポート #import "GADBannerView.h"
AppController.mmの編集
・・ #import "CCEAGLView.h" //cocos2d-JSと連携するためにスコープの範囲をグルーバルにする static GADBannerView *_gadView = nil; @implementation AppController ・・ //didFinishLaunchingWithOptionsにロジックを追加する - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ・・ cocos2d::Director::getInstance()->setOpenGLView(glview); //ここから追加部分 CGPoint adPos; GADAdSize adSize; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ adSize = kGADAdSizeBanner; adPos = CGPointMake( 0.0, viewController.view.frame.size.height - GAD_SIZE_320x50.height); } else { adSize = kGADAdSizeLeaderboard; adPos = CGPointMake( 0.0, viewController.view.frame.size.height - GAD_SIZE_728x90.height); } _gadView = [[[GADBannerView alloc] initWithAdSize:adSize origin:adPos] autorelease]; _gadView.adUnitID = @"ca-app-pub-xxx"; _gadView.rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController]; GADRequest *request = [GADRequest request]; request.testing = YES; [_gadView loadRequest:request]; [viewController.view addSubview:_gadView]; [_gadView setRootViewController:viewController]; //ここまで cocos2d::Application::getInstance()->run(); return YES; }
iPhoneだとこんな感じです。
ipadだとこんな感じです。
おまけ cocos2d-JS 3.0とXcode側の連携
cocos2d-JSとXcode側の連携については電子書籍を参考にしました。
内容を書くとあれなので、詳しい方法は書籍を参考にして下さい。
http://www.amazon.co.jp/Cocos2d-html5ではじめるモバイルゲーム開発-フニゲ-ebook/dp/B00HGNIK38
3.0版ではパラメーターがchar*ではなく、std::string&になっているので気をつけましょう。
文字列比較は
if(key.compare("command")==0){ ・・ }
です。