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
追加フレームワーク

  • AdStir-Adlantis.framework
  • libadlantis_ios_sdk.a
  • CoreTelephohy.framework
  • CFNetwork.framework

ヘッダーファイルなどをインポートするとこんな感じになります。

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の場合はタイマーではなくスケジュール実行するべきだと思います。
具体的なコードはまだ書いていないので、これから調べていこうと思います。