- 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 件のコメント:
コメントを投稿