- iAdが表示できなかったらAdMobの広告を表示したい
- iOS3はiAdが使えないので、 無条件でAdMobを表示したい
登録
で、まずはiAdを利用するために、様々申請が必要です。全てiTunes Connectで行います。
以下のページに詳しく解説されていました。ほとんどこの通りにやりました。
Contracts, Tax, and Banking 銀行と税金の契約 | iPhone使いへの道
あ、1点だけ違う点が。「Account Holder Name(口座名義)」をカタカナで入力しました。入力時に脇のヘルプにそのように書いてあったので。
コーディング
申請が無事完了したら、次は一番大事なコーディングです。
これもまた、以下のページを参考にさせていただきました。
管理人の部屋: [続] iAdをメインにしてAdmobをバックアップとして設置
大枠はそのままなのですが、若干手を加えたので、ソースを掲載します。
あとで使い回しをしやすいように、カテゴリでソースを分けてあります。
ViewController+Ad.h
#import "ViewController.h" #import <iAd/iAd.h> #import "GADBannerView.h" @interface ViewController() { BOOL _iAdIsVisible; ADBannerView *_iAdView; BOOL _isEnableAdMob; GADBannerView *_adMobView; } @end @interface ViewController(Ad) <ADBannerViewDelegate, GADBannerViewDelegate> // 広告を開始する - (void)startAd; // 広告を解放する - (void)releaseAd; // private methods - (void)startiAd; - (void)startAdMob; - (void)stopAdMob; @end
ViewController+Ad.m
#import "ViewController+Ad.h" #define ADMOB_PUBLISHER_ID @"???????????????" @implementation ViewController(Ad) - (void)startAd { // iAd (iOS4.0以上) if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) { [self startiAd]; } else { [self startAdMob]; } return; } - (void)releaseAd { // AdMob if (_isEnableAdMob) { _adMobView.delegate = nil; [_adMobView release]; } //iAd _iAdView.delegate = nil; [_iAdView release]; return; } #pragma mark - iAd - (void)startiAd { LOG(@"iAd:startiAd"); // iAd初期化 _iAdView = [[ADBannerView alloc] initWithFrame:CGRectZero]; // サイズ設定 NSString *identifier; if (&ADBannerContentSizeIdentifierPortrait != nil) { identifier = ADBannerContentSizeIdentifierPortrait; } else { identifier = ADBannerContentSizeIdentifier320x50; } _iAdView.requiredContentSizeIdentifiers = [NSSet setWithObject:identifier]; _iAdView.currentContentSizeIdentifier = identifier; // 下に配置 CGSize bannerSize = [ADBannerView sizeFromBannerContentSizeIdentifier:identifier]; _iAdView.frame = CGRectOffset(_iAdView.frame, 0, self.view.frame.size.height - bannerSize.height); // 隠しておく _iAdView.hidden = YES; _iAdView.alpha = 0.0f; // delegate _iAdView.delegate = self; [self.view addSubview:_iAdView]; } // iAdによって広告がloadされた時に実行される - (void)bannerViewDidLoadAd:(ADBannerView *)banner { LOG(@"iAd:bannerViewDidLoadAd"); // AdMob非表示 [self stopAdMob]; if (_iAdIsVisible == NO) { // iAdを表示 [UIView beginAnimations:@"iAdViewShow" context:NULL]; _iAdView.alpha = 1.0f; [UIView commitAnimations]; _iAdView.hidden = NO; _iAdIsVisible = YES; } } // iAdが広告の読み込みに失敗したときに実行される - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { LOG(@"iAd:didFailToReceiveAdWithError %@", [error localizedDescription]); if (_iAdIsVisible) { // iADを隠す _iAdView.hidden = YES; _iAdView.alpha = 0.0f; _iAdIsVisible = NO; } // Admob開始 [self startAdMob]; } // ユーザが広告をタップしたときに実行される - (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave { LOG(@"Banner view is beginning an ad action"); BOOL shouldExecuteAction = YES; if (!willLeave && shouldExecuteAction) { // ここにコードを挿入して、広告と競合する可能性のあるサービスを一時停止する } return shouldExecuteAction; } #pragma mark - AdMob - (void)startAdMob { LOG(@"AdMob:startAdMob isEnableAdMob: %d", _isEnableAdMob); if (_isEnableAdMob) return; // 確保 _adMobView = [[GADBannerView alloc] initWithFrame:CGRectMake(0.0, self.view.frame.size.height - GAD_SIZE_320x50.height, GAD_SIZE_320x50.width, GAD_SIZE_320x50.height)]; // 隠しておく _adMobView.hidden = YES; _adMobView.alpha = 0.0f; // 配置 _adMobView.adUnitID = ADMOB_PUBLISHER_ID; _adMobView.delegate = self; _adMobView.rootViewController = self; [self.view addSubview:_adMobView]; // リクエスト GADRequest *request = [GADRequest request]; [_adMobView loadRequest:request]; _isEnableAdMob = YES; return; } - (void)stopAdMob { LOG(@"AdMob:stopAdMob isEnableAdMob: %d", _isEnableAdMob); if (_isEnableAdMob == NO) return; // 解放 [_adMobView removeFromSuperview]; _adMobView.delegate = nil; [_adMobView release]; _isEnableAdMob = NO; return; } - (void)adViewDidReceiveAd:(GADBannerView *)adView { LOG(@"AdMob:adViewDidReceiveAd"); // AdMobを表示 [UIView beginAnimations:@"AdMobViewShow" context:NULL]; adView.alpha = 1.0f; [UIView commitAnimations]; adView.hidden = NO; return; } - (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error { LOG(@"AdMob:didFailToReceiveAdWithError %@", [error localizedFailureReason]); [self stopAdMob]; } @end
アプリ申請
残る注意点としては、アプリ申請後にiTunes Connectの[Manage Your Applications]でiAdを有効にするのをお忘れなく、といったところでしょうか。
iAdを組み込んだアプリを申請しました。どうなるか楽しみです。
0 件のコメント:
コメントを投稿