最近ちょっとづつ分かってきたので、いろんなとこ調べながら、やってみました。
http://yayacocoa.blogspot.com/2010/11/iadadmob.html
http://xcodenoobies.blogspot.com/2011/01/how-to-integrate-iad-for-os32-and-admob.html
ここら辺りを参考に始めたけど、お世話になってる寺子屋サルできにて、よくわかるソースを発見!
iAdはOS4だけで動作するのでビルド設定に注意
コレを参考に、微妙に修正して組み込んでみました!
とりあえず、Admobの登録して、SDKをダウンロードして、
- AdMob
- TouchJSON
を組み込み。AdMobフォルダは
- AdMobDelegateProtocol.h
- AdMobView.h
- libAdMob.a
だけでもいいみたいだけどよくわかんないんで全部ぶち込みました。そして、以下のフレームワークを追加。
- AudioToolbox
- CoreGraphics
- MediaPlayer
- MessageUI
- QuartzCore
- iAd
iAdはOS3.xをターゲットにするならiAdをweklinkにする必要あり。
で、Admobのサイトでパブリッシャーidをコピッてきて、
//======================================================== // publisher id //======================================================== - (NSString *)publisherIdForAd:(AdMobView *)adView { return @"publisher id"; }
ここの「publisher id」に置き換え。で行けるはず。
あと、
//======================================================== // Admobテスト用設定 リリース時にはコメントアウト? //======================================================== //*/ - (NSArray *)testDevices { return [NSArray arrayWithObjects: ADMOB_SIMULATOR_ID, // Simulator @"Device identifier", // Xオーガナイザで確認 nil]; } ///*
ここの「Device identifier」にXcodeオーガナイザで確認できるDevice identifierを入れると、実機でもテスト広告が出る。ただし、Admobのサイトのアプリ設定で、テストモードを無効化してると、意味はない。
後は、コンソールをみながら、
iAd: Did load ad
でiAdのテスト広告が表示されて、
iAd: Did fail to receive ad
でAdmobの広告がでればOK!・・・かと思われる。
うまくいけば暫く待てばfailしてくれるが、もしかしたらずっとloadしてるとAdmobの確認ができないかもしれない・・・
ちなみにオリジナルからいじった所は、viewDidLoadのAdmobの部分で、起動時には一旦、hiddenをYESにして、moveBannerViewOffScreenの部分でNOにしたところです。
iAdの読み込みには少し時間がかかるみたいで、起動時にiAdもAdmobも両方取得成功したときに、広告表示が、Admob->iAdとばたついて表示されるのを防ぐためです。
ただ、一時も広告の非表示時間を減らしたくない場合は得策でない場合がありますね。
また、Admobメインで考えるなら、逆にしたほうがいいでしょう。
「...」はアプリそれぞれのコードが入っていることを表しています。
↓以下サンプルソース
*.h
... #import <iAd/iAd.h> #import "AdMobDelegateProtocol.h" ... @interface viewController :UiViewController < ... , ADBannerViewDelegate, AdMobDelegate>{ ... AdMobView *adMobAd; ADBannerView *bannerView; ... } ... - (void) moveBannerViewOnScreen; - (void) moveBannerViewOffScreen; ... @end
*.m
#import "viewController.h" #import "AdMobView.h" @implementation:viewController ... //======================================================== // 起動時設定 //======================================================== - (void)viewDidLoad { ... //iAd(OS4.0以上) if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) { bannerView = [[ADBannerView alloc] init]; bannerView.delegate = self; [self.view addSubview:bannerView]; [self moveBannerViewOffScreen]; } //Admob adMobAd = [AdMobView requestAdWithDelegate:self]; [adMobAd retain]; adMobAd.hidden = YES; ... } //======================================================== // メモリ解放 //======================================================== - (void)dealloc { ... //Admob [adMobAd release]; //iAd bannerView.delegate = nil; [bannerView release]; ... } ... ... ... ... #pragma mark iAd,Admob //********************************************************** // iAd⇔Admob切り替え //********************************************************** //======================================================== // iAd広告表示 //======================================================== - (void) moveBannerViewOnScreen { //Admob広告を隠す if (adMobAd != nil) { if (adMobAd.frame.origin.y == self.view.frame.size.height -48) { CGRect frame = self.view.frame; adMobAd.frame = CGRectMake(0, frame.size.height, frame.size.width, 48); } } //iAd広告を表示 CGRect newBannerView = self.view.frame; newBannerView.origin.y = self.view.frame.size.height - bannerView.frame.size.height; [UIView beginAnimations:@"BannerViewIntro" context:NULL]; bannerView.frame = newBannerView; [UIView commitAnimations]; } //======================================================== // iAd広告非表示 //======================================================== - (void) moveBannerViewOffScreen { //iAd広告を隠す CGRect newBannerView = self.view.frame; newBannerView.origin.y = self.view.frame.size.height; bannerView.frame = newBannerView; //Admob広告を表示 adMobAd.hidden = NO; if (adMobAd != nil) { if (adMobAd.frame.origin.y == self.view.frame.size.height) { CGRect frame = self.view.frame; [UIView beginAnimations:@"AdMobBanner" context:NULL]; adMobAd.frame = CGRectMake(0, frame.size.height - 48, frame.size.width, 48); [UIView commitAnimations]; } } } //********************************************************** // iAd関連 //********************************************************** //======================================================== // iAD広告取得成功時 //======================================================== - (void)bannerViewDidLoadAd:(ADBannerView *)banner{ NSLog(@"iAd: Did load ad"); //Admob広告非表示->iAd広告表示 [self moveBannerViewOnScreen]; } //======================================================== // iAD広告取得失敗時 //======================================================== - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{ NSLog(@"iAd: Did fail to receive ad"); //iAd広告非表示->Admob広告表示 [self moveBannerViewOffScreen] ; } //********************************************************** // Admob関連 //********************************************************** //======================================================== // publisher id //======================================================== - (NSString *)publisherIdForAd:(AdMobView *)adView { return @"publisher id"; } //======================================================== // current view controller //======================================================== - (UIViewController *)currentViewControllerForAd:(AdMobView *)adView { return self; } //======================================================== // Admob広告取得成功時 //======================================================== - (void)didReceiveAd:(AdMobView *)adView { NSLog(@"Admob: Did receive ad"); CGRect frame = self.view.frame; adMobAd.frame = CGRectMake(0, frame.size.height, frame.size.width, 48); [self.view addSubview:adMobAd]; [UIView beginAnimations:@"AdMobBannerstart" context:NULL]; adMobAd.frame = CGRectMake(0, frame.size.height - 48, frame.size.width, 48); [UIView commitAnimations]; } //======================================================== // Admob広告取得失敗時 //======================================================== - (void)didFailToReceiveAd:(AdMobView *)adView { NSLog(@"Admob: Did fail receive ad"); [adMobAd removeFromSuperview]; [adMobAd release]; adMobAd = nil; } //======================================================== // Admobテスト用設定 リリース時にはコメントアウト? //======================================================== //*/ - (NSArray *)testDevices { return [NSArray arrayWithObjects: ADMOB_SIMULATOR_ID, // Simulator //@"Device identifier", // Xオーガナイザで確認 nil]; } ///* ... ... ... ... @end
0 件のコメント:
コメントを投稿