2011年5月4日水曜日

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

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

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

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

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

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

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


↓以下サンプルソース

viewController.h

...
#import <iAd/iAd.h>
#import "GADBannerView.h"
...
@interface viewController :UiViewController < ... , ADBannerViewDelegate, GADBannerViewDelegate>{
...
GADBannerView *adMobAd;
ADBannerView *bannerView;
...
}
...
- (void) startiAd;
- (void) startAdMobAd;
- (void) endAdMobAd;
...
@end


viewController.m
#import "viewController.h"
@implementation:viewController

#define MY_BANNER_UNIT_ID @"publisher id"                     // 自分のパブリッシャーIDを設定
#define ADMOBAD_TESTING YES                                             // リリース時はNOにする
BOOL isEnableAdMob = NO;

...
//========================================================
// 起動時設定
//========================================================
- (void)viewDidLoad {
        [super viewDidLoad];
 ...
  //iAd(OS4.0以上)
 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) {
  [self startiAd];
 } else {
  [self startAdMobAd];
 }
 ...
}
//========================================================
// メモリ解放
//========================================================
- (void)dealloc {
        [super dealloc];
 ...
  //Admob
 if (isEnableAdMob) {
  adMobAd.delegate = nil;
  [adMobAd release];
 }
 //iAd
 bannerView.delegate = nil;
 [bannerView release];
...
}
...
...
...
...
#pragma mark iAd,Admob
//**********************************************************************
// iAd関連
//**********************************************************************
//======================================================================
// iAD広告開始
//======================================================================
- (void) startiAd {
 NSLog(@"iAd:startiAd");
 // iAd初期化
 bannerView = [[ADBannerView alloc] init];
 bannerView.delegate = self;
 
 // 広告サイズのiOSバージョン別設定
 if (&ADBannerContentSizeIdentifierPortrait != nil) {
  bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
 }else {
  bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;
 }
 
 // 初期は隠す
 bannerView.frame = CGRectMake(0.0,
          self.view.frame.size.height,
          bannerView.frame.size.width,
          bannerView.frame.size.height);
 
 [self.view addSubview:bannerView];
}
//======================================================================
// iAD広告取得成功時
//======================================================================
- (void)bannerViewDidLoadAd:(ADBannerView *)banner{
 NSLog(@"iAd:bannerViewDidLoadAd");

 // AdMob非表示
 [self endAdMobAd];
 
 // iAdアニメーション表示
 bannerView.frame = CGRectMake(0.0,
          self.view.frame.size.height,
          banner.frame.size.width,
          banner.frame.size.height);
 [UIView beginAnimations:@"BannerViewMoveOnScreen" context:NULL];
 bannerView.frame = CGRectMake(0.0,
          self.view.frame.size.height - banner.frame.size.height,
          banner.frame.size.width,
          banner.frame.size.height);
 [UIView commitAnimations];
}
//======================================================================
// iAD広告取得失敗時
//======================================================================
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{
 NSLog(@"iAd:didFailToReceiveAdWithError:%@", [error localizedDescription]);
 
 // Admob開始
 [self startAdMobAd];
 
 // iADアニメーション非表示
 [UIView beginAnimations:@"BannerViewMoveOffScreen" context:NULL];
 bannerView.frame = CGRectMake(0.0,
          self.view.frame.size.height,
          banner.frame.size.width,
          banner.frame.size.height);
 [UIView commitAnimations];
}
//**********************************************************************
// Admob関連
//**********************************************************************
//======================================================================
// Admob広告開始
//======================================================================
- (void) startAdMobAd {
 if (!isEnableAdMob) {
  NSLog(@"AdMob:startAdMobAd:isEnableAdmob=%d", isEnableAdMob);
  
  // AdMob初期化
  adMobAd = [[GADBannerView alloc]
       initWithFrame:CGRectMake(0.0,
           self.view.frame.size.height,
           GAD_SIZE_320x50.width,
           GAD_SIZE_320x50.height)];
  adMobAd.adUnitID = MY_BANNER_UNIT_ID; // パブリッシャーID
  adMobAd.rootViewController = self;
  [self.view addSubview:adMobAd];
  adMobAd.delegate = self;
  GADRequest *request = [GADRequest request];
  request.testing = ADMOBAD_TESTING;  // テストモード
  [adMobAd loadRequest:request];
  isEnableAdMob = YES;
 }
}
//======================================================================
// Admob広告終了
//======================================================================
- (void) endAdMobAd {
 if (isEnableAdMob) {  
  NSLog(@"AdMob:endAdMobAd:isEnableAdmob=%d", isEnableAdMob);
  // AdMobアニメーション非表示
  [UIView beginAnimations:@"AdMobBannerMoveOffScreen" context:NULL];
  adMobAd.frame = CGRectMake(0.0,
           self.view.frame.size.height,
           GAD_SIZE_320x50.width,
           GAD_SIZE_320x50.height);
  [UIView commitAnimations];
  // Admobリリース
  [adMobAd removeFromSuperview];
  adMobAd.delegate = nil;
  [adMobAd release];
  isEnableAdMob = NO;
 }
}
//======================================================================
// Admob広告取得成功時
//======================================================================
- (void)adViewDidReceiveAd:(GADBannerView *)adMobView {
 NSLog(@"Admob:adViewDidReceiveAd");
 
 // AdMobアニメーション表示
 adMobAd.frame = CGRectMake(0.0,
          self.view.frame.size.height,
          adMobView.frame.size.width,
          adMobView.frame.size.height);
 [UIView beginAnimations:@"AdMobBannerMoveOnScreen" context:NULL];
 adMobAd.frame = CGRectMake(0.0,
          self.view.frame.size.height - adMobView.frame.size.height,
          adMobView.frame.size.width,
          adMobView.frame.size.height);
 [UIView commitAnimations];
}
//======================================================================
// Admob広告取得失敗時
//======================================================================
- (void)adView:(GADBannerView *)adMobView didFailToReceiveAdWithError:(GADRequestError *)error {
 NSLog(@"Admob:didFailToReceiveAdWithError:%@", [error localizedDescription]);
}

@end