cocos2dで作ったアプリにAdStirを組み込んでみた
スマートフォンアプリ・サイト両対応 スマートフォンSSP「adstir」を試してみました。
使用するアドネットワークごとにSDKの導入方法が違うので、次やるときに簡単に導入できるようにメモをしておきます。
登録したアドネットワーク
- iAd
- AdMob
- AdSTA
- nend
- Adlantis
- AmoAd
- Appbank
SDK組み込み
AdStir本体
こちらを参考に組み込みます。
http://wiki.ad-stir.com/IPhone_SDK%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9
追加フレームワーク
- AdStir.framework
- MediaPlayer.framework
- QuartzCore.framework
- CoreLocation.framework
- SystemConfiguration.framework
- AdSupport.framework
JSONKitのファイルもインポートするとこんな感じになります。
また、Build Settings > Other Linker Flagsに下記を追加します。
-ObjC -all_load
iAd
追加フレームワーク
- AdStir-iAd.framework
- iAd.framework
AdMob
公式ドキュメント:https://developers.google.com/mobile-ads-sdk/docs/ios/fundamentals?hl=ja#incorporating
追加フレームワーク
- AdStir-GoogleAdMob.framework
- libGoogleAdMobAds.a
- AudioToolbox
- MessageUI
- SystemConfiguration
- CoreGraphics
Adlantis
公式ドキュメント:http://tn.adlantis.jp/iPhoneAppOwner/adlantis-iphone-sdk
追加フレームワーク
ヘッダーファイルなどをインポートするとこんな感じになります。
nend/AppBank network
追加フレームワーク
- AdStir-nend.framework
- Security.framework
- libNendAd.a
ヘッダーファイルなどをインポートするとこんな感じになります。
AmoAd
追加フレームワーク
- AdStir-AMoAd.framework
- libAMoAd.a
ヘッダーファイルなどをインポートするとこんな感じになります。
広告の表示/非表示
cocos2dでAdStirを使う場合はRootViewControllerに実装することになると思います。
アプリの起動直後からずっと広告出しっぱなしであれば、公式ドキュメントの通りの記述でいいと思いますが、
特定のSceneやLayerを開いている時のみ表示したい場合は、少し変更が必要になります。
ベストなやり方かどうかはわかりませんが、私はこのようにしてみました。
RootViewController.m
// ここでは実装しない -(void)viewWillAppear:(BOOL)animated{ } -(void)viewWillDisappear:(BOOL)animated{ } // Ad表示 -(void)startAd { self.adview = [ASTAdView requestWithAppId:@"MEDIA-XXXXXX" andSpotNo:@"X" andDelegate:self]; [self.view addSubview:self.adview]; } // Adを隠す -(void)stopAd { [self.adview stop]; [self.adview removeFromSuperview]; self.adview = nil; } // 次のAdを表示 -(void)nextAd { [self.adview nextAd]; } - (void) didFailToInitView:(NSString *)appId{ [self.adview stop]; [self.adview removeFromSuperview]; self.adview = nil; } - (UIViewController *) currentViewController{ return self; } - (void) didFailToUpdateConfig{ NSLog(@"didFailToUpdateConfig"); } - (void) didLoadAdView{ NSLog(@"didLoadAdView"); } - (void) didFailToLoadAdView{ NSLog(@"didFailToLoadAdView"); [self.adview nextAd]; } - (CGPoint) originOfAdView{ return CGPointMake(0, 0); }
SceneやLayerからの広告表示/非表示
// Adを表示 -(void)showAd { AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate]; RootViewController *viewController = appDelegate.viewController; [viewController startAd]; } // Adを隠す -(void)hideAd { AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate]; RootViewController *viewController = appDelegate.viewController; [viewController stopAd]; } // 次のAdを表示 -(void)nextAd { AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate]; RootViewController *viewController = appDelegate.viewController; [viewController nextAd]; }
検討事項
- 定期的にAdを切り替える
定期的にnextAdを呼び出せばいいのですが、cocos2dの場合はタイマーではなくスケジュール実行するべきだと思います。
具体的なコードはまだ書いていないので、これから調べていこうと思います。