[XCODE] iPhoneアプリで広告を表示するには
今日は、iPhoneアプリケーションで広告(iAD)を表示する方法を学んだので、ブログに書きたいと思います。
iPhoneで表示する広告とは
最近の無料アプリでよく見る広告。画面の上や下にちょっとした幅を取って、広告を表示する事が出来ます。iADというそうです。
例えば下の画面では、画面の下部分に広告を表示しています。今回はこの広告表示を行います。
広告は表示したりすることで、広告掲載した人が儲かる仕組みです。どれくらい儲かるかは、アプリ制作者次第(*´∇`*)
まずはiADを使うためのユーザー登録
iADを使うには、iTunesConnectにユーザー登録する必要があります。その際に、iPhone Developer登録したアカウントでユーザー登録する事で、iADを使う準備が出来ます。以下サイトから、登録出来ます。
http://developer.apple.com/iAD/
次にiAD Frameworkの読み込み
広告を出したいアプリケーションを作成するXCODEプロジェクトに、iAD Frameworkを追加します。これしないと、コンパイル時に「そんなクラスないよ~」ってエラーが発生します。あと、コンテンツアシストも使えないので、不便不便(; ̄ェ ̄)
続いてADBannerViewの作成とViewへの追加
ここから本題。広告を表示する為のADBannerViewを作成して、表示したいところに表示します。ADBannerViewはなんと、大きさは既に決まっているようです。iPhoneであれば、縦向き:横320pt, 縦50pt、横向き:横480pt, 縦32ptとのこと。この大きさで後はどこに表示するかを決めるだけですね。
ADBannerViewを作成するには、Interface Builderでもプログラムからでもどちらでも大丈夫そうです。今回は、プログラムから追加しました。
ADBannerView *adView = [[ADBannerView alloc] initWithFrame:CGRectZero];
adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
[self.view addSubview:adView];
currentContentSizeIdentifierとは、ADBannerViewのサイズを指定しています。上記なら、縦向きの場合のサイズを指定しています。
ADBannerViewのデリゲート設定
ADBannerViewが広告を読み込んだり、エラーが発生したり、広告を全画面に表示したりする際に、呼び出されるデリゲートを設定します。現在使っているUIViewControllerでも良いですし、デリゲード専用のクラスを作成してもイイと思います。今回は、現在使っているUIViewControllerにデリゲートを設定しました。
(IAD_ViewController.h)
#import <UIKit/UIKit.h> #import <iAd/iAd.h> @interface IAD_ViewController : UIViewController <ADBannerViewDelegate> { }
(IAD_ViewController.m)
#import "IAD_ViewController.h" @implementation IAD_ViewController ~~省略~~ #pragma mark - #pragma mark ADBannerViewDelegate implementation - (void)bannerViewDidLoadAd:(ADBannerView *)banner { NSLog(@"bannerViewDidLoadAd: is called."); } - (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave { NSLog(@"bannerViewActionShouldBegin:willLeaveApplication: is called."); return YES; } - (void)bannerViewActionDidFinish:(ADBannerView *)banner { NSLog(@"bannerViewActionDidFinish: is called."); } - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { NSLog(@"bannerView:didFailToReceiveAdWithError: is called. ERROR: %@ %@", [error localizedDescription], [error userInfo]); } @end
各デリゲートメソッドの説明
デリゲートメソッドは全部で4つあるようです。それぞれの使い方を記載します。
■- (void)bannerViewDidLoadAd:(ADBannerView *)banner
これは、広告のロードに成功した際に呼び出されるメソッドです。ここでは、ADBannerViewを非表示から表示に切り替えるなどの実装を行います。今回はログだしだけです。
■- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
これは、ユーザーがADBannerViewをクリックした際に呼び出されます。戻り値のBOOL値で、広告を開くかどうかを指定することが出来ます。引数のwikkLeaveApplicationは、YESの場合には別のアプリケーションが立ち上がり、NOの場合には現在のアプリケーション内で後続処理が行われます。
このメソッド内では、現在のView上の処理を一時停止するなど、広告を全画面表示する前の準備を行います。
■- (void)bannerViewActionDidFinish:(ADBannerView *)banner
これは、全画面表示された広告の処理が終了した際に、呼び出されるメソッドです。このメソッドが呼び出された後に、別アプリケーション(Safariなど)に処理が移り現在のアプリケーションはバックグラウンドに移るかもしれません。または、ユーザーが広告表示をキャンセルして、現在のアプリケーションがアクティブになるかもしれません。
このメソッド内では、中断していた処理を再開するなどの対応が必要です。
■- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
このメソッドは、広告のロードに失敗した場合に呼び出されます。引数のerrorに、エラー情報が含まれています。エラーが発生したら表示を止めたいなど、エラー時の処理を記載します。
なお、広告のロードに失敗しても、その後も広告を読み込もうとします。その結果、広告表示が遅れながらも成功する事も多々あるようです。
参考
参考にしたのは、以下情報です。ありがとうございます。
ADBannerViewDelegate Protocol Reference
最後に
アプリでアフィリエイトが出来るのは、イイ選択肢ですね。でも広告無くても狭いiPhoneの画面を、広告で一部使うというのも微妙ですね。画面設計は、きっちりやって、広告を表示しても狭いと感じない画面を作成したいですね♪(´ε` )