iAd設置してみました
今作っているゲームにiAdを設置しました。その手順の自分用メモを兼ねてまとめる事にしました。
作っているゲームは、Xcode 3.2.4 のOpen GLESのひな形から作っています。
もし、これを読まれている方が他のテンプレートを使っているとしたら、適宜読み替えてくださいね。
AppleのiAdのマニュアル(日本語化されてます)もご一読頂くと良いと思います。
それと、こちらとこちらも参考にさせて頂きました。ありがとうございます。
1.iAdの設置
ViewController.h
@interface ViewController : UIViewController
{
:
ADBannerView *adView; // 追加。
:
}
ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
adView = [[ADBannerView alloc] initWithFrame:CGRectZero];
adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;
[self.view addSubview:adView];
adView.delegate = self; // 私がデリゲート先ですよ!と通知。コレやらなくて痛い目に。
}
お馬鹿な話ですが、adView.delegate = self;をやってなくて、デリゲートされなくて、弱りました。
@whitedevさんにお教え頂いて大変助かりました。ありがとうございます!
これやらないと、ユーザーが広告にタッチしても、知る事ができません。
ゲームを止める事が出来ないのでした。アクションゲームなど勝手に進行するタイプではとても困りモノです。
この後、詳説Objective-C2.0のデリゲート読み返して、復習しました。
一度痛い目に遭うと、良く理解できるものです。あはは。
2.デリゲート先の処理を入れる。
ViewController.m
- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
{
BOOL shouldExecuteAction = [self allowActionToRun]; // アプリケーションでこのメソッドを実装する
if (!willLeave && shouldExecuteAction)
{
// ここにコードを挿入して、広告と競合する可能性のあるサービスを保留する
isIAd = YES; // ゲームを停止する為のフラグをセットしています。
}
return shouldExecuteAction;
}
- (BOOL) allowActionToRun
{
// 本当はここでアプリの方でiAd表示して良いかどうかの判断をするトコロだと思います。
// いつでもOKだったので、YESを返しています。
return YES; // 一応教科書通りにメソッドにしましたけど、YES返すだけならしなくても良さそう。
}
3.広告取得に失敗した時のために。
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
[ UIView beginAnimations:@"animateAdBannerOff" context:NULL ];
banner.frame = CGRectOffset( banner.frame, 0.0, -50.0 );
[ UIView commitAnimations ];
}
4.後始末
- (void)dealloc
{
adView.delegate = nil; // nil入れとけとリファレンスにありましたので
[adView removeFromSuperview]; // こうしておく方が良いらしいです
[adView release]; // でリリース
:
[super dealloc];
}
その他
このコードを組み込んだゲームはまだリリースされていません。
もしかしたら、このコードが原因でリジェクトされるかもしれません。
再利用される方は、この点、ご留意ください。
iOS4.0以降のみの対応でしたらこれでよいと思うのですが、それ以前でも対応させるためには、
iAdのフレームワークをWeak Link にするなどの対応が必要です。
こちらがとても参考になると思います。
デリゲートで参考にした書籍のご紹介。