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 にするなどの対応が必要です。
 こちらがとても参考になると思います。


 デリゲートで参考にした書籍のご紹介。