【cocos2d】iAd, AdMobの広告をつけてみた
いきなり有料のアプリをリリースするのは気が引けるので最初のアプリは無料の広告付きでリリースしたいと思います。
まずiAdでの広告表示を試みて、広告がなければAdMobの広告を表示するというのが流行りらしいので、こちらのサイト、続きを参考にさせていただき、早速自分のアプリにiAdとAdMob両方の広告を組み込んでみました。
上記のサイトの例から少しアレンジして、広告バナーがアニメーションで上から出てくるようにしてみました。
[2013/4/28 追記:数十秒おきに新しい広告が読み込まれるたびにバナーの位置が下へ下へとずれていくのでこちらのAppleのガイドを参考にバナーが既に表示されていればアニメーションをしないように修正しました。]
AdMobの登録でApp名を指定するところがあり、まだ名前を決めていないので悩みましたが、とりあえず自分がわかる名前にしました。後から正式名称が決まったら編集画面で変更できるようです。また、上記のサイトにもありましたが、AdMobの支払い方法は手数料が2500円くらいかかる銀行振込よりPaypalの方がお得なようです。
ヘッダファイル
#import <Foundation/Foundation.h> #import <iAd/iAd.h> #import "cocos2d.h" #import "GADBannerView.h" @interface AdLayer : CCLayer <ADBannerViewDelegate, GADBannerViewDelegate> { } + (id)layer; @end
実装ファイル
#import "AdLayer.h" @implementation AdLayer { ADBannerView* _adView; GADBannerView* _gadView; BOOL _bannerIsVisible; } + (id)layer { return [[self alloc] initLayer]; } - (id)initLayer { if ((self = [super init])) { _bannerIsVisible = NO; // iAd設定 _adView = [[ADBannerView alloc] initWithFrame:CGRectZero]; _adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait; [[[CCDirector sharedDirector] view] addSubview:_adView]; _adView.frame = CGRectOffset(_adView.frame, 0, -_adView.frame.size.height); _adView.delegate = self; // AdMob設定 _gadView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; _gadView.adUnitID = @"a15179168f4c6bf"; _gadView.rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController]; [[[CCDirector sharedDirector] view] addSubview:_gadView]; _gadView.frame = CGRectOffset(_gadView.frame, 0, -_gadView.frame.size.height); _gadView.delegate = self; } return self; } - (void)dealloc { [_adView removeFromSuperview]; [_gadView removeFromSuperview]; } //iAd広告取得成功時の処理 - (void)bannerViewDidLoadAd:(ADBannerView *)banner { if (!_bannerIsVisible) { [UIView animateWithDuration:0.3 animations:^{ _adView.frame = CGRectOffset(banner.frame, 0, banner.frame.size.height); }]; _bannerIsVisible = YES; } } //iAd広告取得失敗時の処理 - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { [_adView removeFromSuperview]; _adView = nil; [self loadAdmobViewRequest]; } //AdMob取得処理 - (void)loadAdmobViewRequest { GADRequest *request = [GADRequest request]; //以下の端末ではテスト広告をリクエスト request.testDevices = [NSArray arrayWithObjects: GAD_SIMULATOR_ID,// シミュレータ nil]; [_gadView loadRequest:request]; } //AdMob取得成功 - (void)adViewDidReceiveAd:(GADBannerView *)view { if (!_bannerIsVisible) { [UIView animateWithDuration:0.3 animations:^{ _gadView.frame = CGRectOffset(view.frame, 0, view.frame.size.height); }]; _bannerIsVisible = YES; } } //AdMob取得失敗 - (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error { [_gadView removeFromSuperview]; _gadView = nil; } @end
今日の実行動画です。前半がiAdでの表示、後半はAdMobでの表示担っています。iAdはテスト用の広告が表示されていますが、AdMobの方は本物の広告となっています。AdMobの部分はひどく音ずれしていますが、ご了承下さい。
https://itunes.apple.com/jp/app/beecluster-wu-liaono-zongsukurorushutingugemu/id663801586?mt=8&uo=4&at=10laCt