2011年5月4日水曜日

[続] iAdをメインにしてAdmobをバックアップとして設置

iAdをメインにしてAdmobをバックアップとして設置の続編。

なんか、AdMobのコードが更新されたとかなんとか言って来るので、試験的に組み込み。

Admobの登録して、SDKをダウンロードして、

  • GoogleAdMobAdsSDK
を面倒くさいのでフォルダごと組み込みました。そして、以下のフレームワークを追加。必要なフレームワークがちょっと減ってますね。
  • AudioToolbox
  • MessageUI
  • SystemConfiguration
  • iAd

iAdはOS3.xをターゲットにするならiAdをweklinkにする必要あり。

その他、ちょっといろいろ工夫してみました。ただいまテスト中・・・なんとか動いてるみたいだけど・・・


↓以下サンプルソース

viewController.h

  1. ...  
  2. #import <iAd/iAd.h>  
  3. #import "GADBannerView.h"  
  4. ...  
  5. @interface viewController :UiViewController < ... , ADBannerViewDelegate, GADBannerViewDelegate>{  
  6. ...  
  7. GADBannerView *adMobAd;  
  8. ADBannerView *bannerView;  
  9. ...  
  10. }  
  11. ...  
  12. - (void) startiAd;  
  13. - (void) startAdMobAd;  
  14. - (void) endAdMobAd;  
  15. ...  
  16. @end  


viewController.m
  1. #import "viewController.h"  
  2. @implementation:viewController  
  3.   
  4. #define MY_BANNER_UNIT_ID @"publisher id"                     // 自分のパブリッシャーIDを設定  
  5. #define ADMOBAD_TESTING YES                                             // リリース時はNOにする  
  6. BOOL isEnableAdMob = NO;  
  7.   
  8. ...  
  9. //========================================================  
  10. // 起動時設定  
  11. //========================================================  
  12. - (void)viewDidLoad {  
  13.         [super viewDidLoad];  
  14.  ...  
  15.   //iAd(OS4.0以上)  
  16.  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) {  
  17.   [self startiAd];  
  18.  } else {  
  19.   [self startAdMobAd];  
  20.  }  
  21.  ...  
  22. }  
  23. //========================================================  
  24. // メモリ解放  
  25. //========================================================  
  26. - (void)dealloc {  
  27.         [super dealloc];  
  28.  ...  
  29.   //Admob  
  30.  if (isEnableAdMob) {  
  31.   adMobAd.delegate = nil;  
  32.   [adMobAd release];  
  33.  }  
  34.  //iAd  
  35.  bannerView.delegate = nil;  
  36.  [bannerView release];  
  37. ...  
  38. }  
  39. ...  
  40. ...  
  41. ...  
  42. ...  
  43. #pragma mark iAd,Admob  
  44. //**********************************************************************  
  45. // iAd関連  
  46. //**********************************************************************  
  47. //======================================================================  
  48. // iAD広告開始  
  49. //======================================================================  
  50. - (void) startiAd {  
  51.  NSLog(@"iAd:startiAd");  
  52.  // iAd初期化  
  53.  bannerView = [[ADBannerView alloc] init];  
  54.  bannerView.delegate = self;  
  55.    
  56.  // 広告サイズのiOSバージョン別設定  
  57.  if (&ADBannerContentSizeIdentifierPortrait != nil) {  
  58.   bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;  
  59.  }else {  
  60.   bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;  
  61.  }  
  62.    
  63.  // 初期は隠す  
  64.  bannerView.frame = CGRectMake(0.0,  
  65.           self.view.frame.size.height,  
  66.           bannerView.frame.size.width,  
  67.           bannerView.frame.size.height);  
  68.    
  69.  [self.view addSubview:bannerView];  
  70. }  
  71. //======================================================================  
  72. // iAD広告取得成功時  
  73. //======================================================================  
  74. - (void)bannerViewDidLoadAd:(ADBannerView *)banner{  
  75.  NSLog(@"iAd:bannerViewDidLoadAd");  
  76.   
  77.  // AdMob非表示  
  78.  [self endAdMobAd];  
  79.    
  80.  // iAdアニメーション表示  
  81.  bannerView.frame = CGRectMake(0.0,  
  82.           self.view.frame.size.height,  
  83.           banner.frame.size.width,  
  84.           banner.frame.size.height);  
  85.  [UIView beginAnimations:@"BannerViewMoveOnScreen" context:NULL];  
  86.  bannerView.frame = CGRectMake(0.0,  
  87.           self.view.frame.size.height - banner.frame.size.height,  
  88.           banner.frame.size.width,  
  89.           banner.frame.size.height);  
  90.  [UIView commitAnimations];  
  91. }  
  92. //======================================================================  
  93. // iAD広告取得失敗時  
  94. //======================================================================  
  95. - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{  
  96.  NSLog(@"iAd:didFailToReceiveAdWithError:%@", [error localizedDescription]);  
  97.    
  98.  // Admob開始  
  99.  [self startAdMobAd];  
  100.    
  101.  // iADアニメーション非表示  
  102.  [UIView beginAnimations:@"BannerViewMoveOffScreen" context:NULL];  
  103.  bannerView.frame = CGRectMake(0.0,  
  104.           self.view.frame.size.height,  
  105.           banner.frame.size.width,  
  106.           banner.frame.size.height);  
  107.  [UIView commitAnimations];  
  108. }  
  109. //**********************************************************************  
  110. // Admob関連  
  111. //**********************************************************************  
  112. //======================================================================  
  113. // Admob広告開始  
  114. //======================================================================  
  115. - (void) startAdMobAd {  
  116.  if (!isEnableAdMob) {  
  117.   NSLog(@"AdMob:startAdMobAd:isEnableAdmob=%d", isEnableAdMob);  
  118.     
  119.   // AdMob初期化  
  120.   adMobAd = [[GADBannerView alloc]  
  121.        initWithFrame:CGRectMake(0.0,  
  122.            self.view.frame.size.height,  
  123.            GAD_SIZE_320x50.width,  
  124.            GAD_SIZE_320x50.height)];  
  125.   adMobAd.adUnitID = MY_BANNER_UNIT_ID; // パブリッシャーID  
  126.   adMobAd.rootViewController = self;  
  127.   [self.view addSubview:adMobAd];  
  128.   adMobAd.delegate = self;  
  129.   GADRequest *request = [GADRequest request];  
  130.   request.testing = ADMOBAD_TESTING;  // テストモード  
  131.   [adMobAd loadRequest:request];  
  132.   isEnableAdMob = YES;  
  133.  }  
  134. }  
  135. //======================================================================  
  136. // Admob広告終了  
  137. //======================================================================  
  138. - (void) endAdMobAd {  
  139.  if (isEnableAdMob) {    
  140.   NSLog(@"AdMob:endAdMobAd:isEnableAdmob=%d", isEnableAdMob);  
  141.   // AdMobアニメーション非表示  
  142.   [UIView beginAnimations:@"AdMobBannerMoveOffScreen" context:NULL];  
  143.   adMobAd.frame = CGRectMake(0.0,  
  144.            self.view.frame.size.height,  
  145.            GAD_SIZE_320x50.width,  
  146.            GAD_SIZE_320x50.height);  
  147.   [UIView commitAnimations];  
  148.   // Admobリリース  
  149.   [adMobAd removeFromSuperview];  
  150.   adMobAd.delegate = nil;  
  151.   [adMobAd release];  
  152.   isEnableAdMob = NO;  
  153.  }  
  154. }  
  155. //======================================================================  
  156. // Admob広告取得成功時  
  157. //======================================================================  
  158. - (void)adViewDidReceiveAd:(GADBannerView *)adMobView {  
  159.  NSLog(@"Admob:adViewDidReceiveAd");  
  160.    
  161.  // AdMobアニメーション表示  
  162.  adMobAd.frame = CGRectMake(0.0,  
  163.           self.view.frame.size.height,  
  164.           adMobView.frame.size.width,  
  165.           adMobView.frame.size.height);  
  166.  [UIView beginAnimations:@"AdMobBannerMoveOnScreen" context:NULL];  
  167.  adMobAd.frame = CGRectMake(0.0,  
  168.           self.view.frame.size.height - adMobView.frame.size.height,  
  169.           adMobView.frame.size.width,  
  170.           adMobView.frame.size.height);  
  171.  [UIView commitAnimations];  
  172. }  
  173. //======================================================================  
  174. // Admob広告取得失敗時  
  175. //======================================================================  
  176. - (void)adView:(GADBannerView *)adMobView didFailToReceiveAdWithError:(GADRequestError *)error {  
  177.  NSLog(@"Admob:didFailToReceiveAdWithError:%@", [error localizedDescription]);  
  178. }  
  179.   
  180. @end