{"id":169,"date":"2010-12-04T04:31:55","date_gmt":"2010-12-04T08:31:55","guid":{"rendered":"httpss:\/\/www.powenko.com\/blog\/?p=169"},"modified":"2010-12-04T04:32:59","modified_gmt":"2010-12-04T08:32:59","slug":"iphone-%e5%9c%a8%e4%bd%a0%e7%9a%84%e6%87%89%e7%94%a8%e7%a8%8b%e5%bc%8f%e4%b8%8a%e9%9d%a2%e5%8a%a0%e4%b8%8aiad","status":"publish","type":"post","link":"https:\/\/www.powenko.com\/wordpress\/?p=169","title":{"rendered":"iPhone, \u5728\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u4e0a\u9762\u52a0\u4e0aiAd"},"content":{"rendered":"<h2 class=\"entry-title\"><span class=\"entry-tags\">\u5728\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u4e0a\u9762\u52a0\u4e0aiAd<\/span><\/h2>\n<div class=\"entry-content\">\n<p>In April 2010 during iOS 4 presentation Steve Jobs\u00a0announced\u00a0<strong>new advertisement platform \u2013 <\/strong><strong>iAd<\/strong><strong>.<\/strong> This platform is intended to allow developers of\u00a0<strong>free apps<\/strong> to earn on their apps showing advertisement. The main idea of iAd is to connect\u00a0<strong>interactivity<\/strong>(using smartphone or tablet)\u00a0<strong>and emotionality<\/strong> of advertisement (JavaScript, HTML5, CSS3,\u00a0multi-touch). It allows to create absolutely\u00a0<strong>awesome advertisement<\/strong> which looks like apps with video and audio. In addition, iAd ads is opened inside the app and user do not exit his app and can get back anytime he wants.<\/p>\n<p>Below is the guide on\u00a0<strong>how to add iAd banner into iPhone app.<\/strong> Guide is based on iAd Programming Guide and WWDC 2010 video.<\/p>\n<h2>Add iAd Banner to iPhone App<\/h2>\n<p>The first thing you need to do is to add\u00a0<strong><em>iAd.framework<\/em><\/strong> in your\u00a0<em>Xcode<\/em> project which is contained in\u00a0<em>iOS 4 SDK<\/em>. Also do not forget to add\u00a0<strong><em>#import &lt;iAd\/iAD.h&gt;<\/em><\/strong>. Developers can choose between two banners:\u00a0<em><strong>320\u00d750<\/strong> px for portrait<\/em> and\u00a0<em><strong>480\u00d732<\/strong> px for landscape<\/em>. The base of banner is\u00a0<strong><em>ADBannerView<\/em><\/strong>, which is subclass of\u00a0<strong><em>UIView<\/em><\/strong>. So the only thing you have to do is to add this view in your control elements\u00a0hierarchy (you can do this programmatically or using Interface Builder).<\/p>\n<p><a href=\"httpss:\/\/bees4honey.com\/blog\/wp-content\/uploads\/2010\/06\/20100625112541.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-423\" title=\"iOS 4 SDK Interface Builder\" src=\"httpss:\/\/bees4honey.com\/blog\/wp-content\/uploads\/2010\/06\/20100625112541.png\" alt=\"iOS 4 SDK Interface Builder\" width=\"600\" height=\"375\" \/><\/a><\/p>\n<p>Apple recommends to put banner at the bottom or at the top of the window and\u00a0<strong>do not place it on<\/strong> any moving elements like\u00a0<strong><em>ScrollView<\/em><\/strong> or\u00a0<strong><em>TableView<\/em><\/strong> as far as that will decrease shows of banner (and your revenue respectively) and will make it more difficult for user to tap on the ads.<\/p>\n<p>Let\u2019s create a new project in\u00a0<em>Xcode<\/em> using View-based Application template and add a banner into it. Name of the app \u2013\u00a0<strong>iAdEx<\/strong>. We are going to edit\u00a0<strong><em>iAdExViewController.h<\/em><\/strong><\/p>\n<div>\n<div id=\"highlighter_185495\" class=\"syntaxhighlighter  objc\">\n<div class=\"toolbar\"><span><a class=\"toolbar_item command_help help\" href=\"httpss:\/\/bees4honey.com\/blog\/tutorial\/how-to-add-iad-banner-in-iphoneipad-app\/#\">?<\/a><\/span><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"objc preprocessor\">#import &lt;UIKit\/UIKit.h&gt;;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"objc preprocessor\">#import &lt;iAd\/iAd.h&gt;;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"objc keyword\">@interface<\/code> <code class=\"objc plain\">iAdExViewController : UIViewController &lt;ADBannerViewDelegate&gt;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"objc plain\">{<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">ADBannerView *adView;<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc datatypes\">BOOL<\/code> <code class=\"objc plain\">bannerIsVisible;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"objc plain\">}<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"objc keyword\">@property<\/code> <code class=\"objc plain\">(<\/code><code class=\"objc keyword\">nonatomic<\/code><code class=\"objc plain\">,assign) <\/code><code class=\"objc datatypes\">BOOL<\/code> <code class=\"objc plain\">bannerIsVisible;<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"objc keyword\">@end<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>and modify\u00a0<strong><em>viewDidLoad<\/em><\/strong> method in\u00a0<strong><em>iAdExViewController.m<\/em><\/strong><\/p>\n<div>\n<div id=\"highlighter_369400\" class=\"syntaxhighlighter  objc\">\n<div class=\"toolbar\"><span><a class=\"toolbar_item command_help help\" href=\"httpss:\/\/bees4honey.com\/blog\/tutorial\/how-to-add-iad-banner-in-iphoneipad-app\/#\">?<\/a><\/span><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"objc plain\">- (<\/code><code class=\"objc datatypes\">void<\/code><code class=\"objc plain\">)viewDidLoad {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">adView = [[ADBannerView alloc] initWithFrame:CGRectZero];<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">adView.frame = CGRectOffset(adView.frame, 0, -50);<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">adView.requiredContentSizeIdentifiers = [<\/code><code class=\"objc keyword\">NSSet<\/code> <code class=\"objc plain\">setWithObject:ADBannerContentSizeIdentifier320x50];<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">[<\/code><code class=\"objc keyword\">self<\/code><code class=\"objc plain\">.view addSubview:adView];<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">adView.delegate=<\/code><code class=\"objc keyword\">self<\/code><code class=\"objc plain\">;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc keyword\">self<\/code><code class=\"objc plain\">.bannerIsVisible=<\/code><code class=\"objc keyword\">NO<\/code><code class=\"objc plain\">;<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">[<\/code><code class=\"objc keyword\">super<\/code> <code class=\"objc plain\">viewDidLoad];<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"objc plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Let\u2019s talk about\u00a0<em><strong>requiredContentSizeIdentifiers<\/strong><\/em> and\u00a0<em><strong>currentContentSizeIdentifier<\/strong><\/em><em><\/em>properties. In the first one you define all types of banners you are going to use. And the second property defines which type of banner you are going to use at the present moment.<\/p>\n<h2>Connection issues<\/h2>\n<p>Banners are downloaded from the network. What if we have no network connection right now? Or Apple has any issues with ads server? Our\u00a0<strong><em>ADBannerView<\/em><\/strong> <strong>will be empty<\/strong> is these cases. It doesn\u2019t look very nice and wastes space on the screen.\u00a0<strong>Apple recommends<\/strong> to do it in this way: when there is no banner for any reason remove it from the screen; when banner is received \u2013 show it again.<\/p>\n<p>We have the\u00a0<strong><em>ADBannerViewDelegate<\/em><\/strong> in our class and it can receive messages from banner \u2013\u00a0<strong><em>bannerViewDidLoadAd<\/em><\/strong> (when banner is loaded successfully) and<strong><em>didFailToReceiveAdWithError<\/em><\/strong> (when any problems occured). Let\u2019s implement these messages:<\/p>\n<div>\n<div id=\"highlighter_247278\" class=\"syntaxhighlighter  objc\">\n<div class=\"toolbar\"><span><a class=\"toolbar_item command_help help\" href=\"httpss:\/\/bees4honey.com\/blog\/tutorial\/how-to-add-iad-banner-in-iphoneipad-app\/#\">?<\/a><\/span><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"objc plain\">- (<\/code><code class=\"objc datatypes\">void<\/code><code class=\"objc plain\">)bannerViewDidLoadAd:(ADBannerView *)banner<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"objc plain\">{<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc keyword\">if<\/code> <code class=\"objc plain\">(!<\/code><code class=\"objc keyword\">self<\/code><code class=\"objc plain\">.bannerIsVisible)<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">{<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">[UIView beginAnimations:<\/code><code class=\"objc string\">@\"animateAdBannerOn\"<\/code> <code class=\"objc plain\">context:<\/code><code class=\"objc keyword\">NULL<\/code><code class=\"objc plain\">];<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"objc comment\">\/\/ banner is invisible now and moved out of the screen on 50 px<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">banner.frame = CGRectOffset(banner.frame, 0, 50);<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">[UIView commitAnimations];<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc keyword\">self<\/code><code class=\"objc plain\">.bannerIsVisible = <\/code><code class=\"objc keyword\">YES<\/code><code class=\"objc plain\">;<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">}<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"objc plain\">}<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"objc plain\">- (<\/code><code class=\"objc datatypes\">void<\/code><code class=\"objc plain\">)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(<\/code><code class=\"objc keyword\">NSError<\/code> <code class=\"objc plain\">*)error<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"objc plain\">{<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"objc keyword\">if<\/code> <code class=\"objc plain\">(<\/code><code class=\"objc keyword\">self<\/code><code class=\"objc plain\">.bannerIsVisible)<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">{<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">[UIView beginAnimations:<\/code><code class=\"objc string\">@\"animateAdBannerOff\"<\/code> <code class=\"objc plain\">context:<\/code><code class=\"objc keyword\">NULL<\/code><code class=\"objc plain\">];<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"objc comment\">\/\/ banner is visible and we move it out of the screen, due to connection issue<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">banner.frame = CGRectOffset(banner.frame, 0, -50);<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">[UIView commitAnimations];<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc keyword\">self<\/code><code class=\"objc plain\">.bannerIsVisible = <\/code><code class=\"objc keyword\">NO<\/code><code class=\"objc plain\">;<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">}<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"objc plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>It\u2019s time to launch the app and see what we have now:<\/p>\n<p><a href=\"httpss:\/\/bees4honey.com\/blog\/wp-content\/uploads\/2010\/06\/20100625135633.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-430\" title=\"iAd banner on iPhone\" src=\"httpss:\/\/bees4honey.com\/blog\/wp-content\/uploads\/2010\/06\/20100625135633.png\" alt=\"iAd banner on iPhone\" width=\"334\" height=\"453\" \/><\/a><\/p>\n<p>Tap the banner<\/p>\n<p><a href=\"httpss:\/\/bees4honey.com\/blog\/wp-content\/uploads\/2010\/06\/20100625135705.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-429\" title=\"iAd Detailed View\" src=\"httpss:\/\/bees4honey.com\/blog\/wp-content\/uploads\/2010\/06\/20100625135705.png\" alt=\"iAd Detailed View on iPhone Simulator\" width=\"332\" height=\"453\" \/><\/a><\/p>\n<p>And that\u2019s it \u2013\u00a0<strong>we\u2019ve done it<\/strong> in accordance with Apple\u2019s recommendations. When we launch the app we see the banner. If we tap it, then full view of advertisement is shown. But we still have one issue\u2026<\/p>\n<h2>Stop &amp; Resume your app<\/h2>\n<p>In real app we should stop any application\u2019s activity such as\u00a0<strong>video<\/strong>,\u00a0<strong>audio<\/strong> playback or pause\u00a0<strong>game.<\/strong> In order to solve this task we will create two methods<strong><em>bannerViewActionShouldBegin<\/em><\/strong> (when full screen ad is shown) and<strong><em>bannerViewActionDidFinish<\/em><\/strong> (when we close ads).<\/p>\n<div>\n<div id=\"highlighter_192049\" class=\"syntaxhighlighter  objc\">\n<div class=\"toolbar\"><span><a class=\"toolbar_item command_help help\" href=\"httpss:\/\/bees4honey.com\/blog\/tutorial\/how-to-add-iad-banner-in-iphoneipad-app\/#\">?<\/a><\/span><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"objc plain\">- (<\/code><code class=\"objc datatypes\">BOOL<\/code><code class=\"objc plain\">)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(<\/code><code class=\"objc datatypes\">BOOL<\/code><code class=\"objc plain\">)willLeave<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"objc plain\">{<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc keyword\">NSLog<\/code><code class=\"objc plain\">(<\/code><code class=\"objc string\">@\"Banner view is beginning an ad action\"<\/code><code class=\"objc plain\">);<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc datatypes\">BOOL<\/code> <code class=\"objc plain\">shouldExecuteAction = <\/code><code class=\"objc keyword\">YES<\/code><code class=\"objc plain\">;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc keyword\">if<\/code> <code class=\"objc plain\">(!willLeave &amp;&amp; shouldExecuteAction)<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">{<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc comment\">\/\/ stop all interactive processes in the app<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc comment\">\/\/ ;<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc comment\">\/\/ ;<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">}<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc keyword\">return<\/code> <code class=\"objc plain\">shouldExecuteAction;<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"objc plain\">}<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"objc plain\">- (<\/code><code class=\"objc datatypes\">void<\/code><code class=\"objc plain\">)bannerViewActionDidFinish:(ADBannerView *)banner<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"objc plain\">{<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc comment\">\/\/ resume everything you've stopped<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc comment\">\/\/ ;<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc comment\">\/\/ ;<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"objc plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>Change Orientation of iAd<\/h2>\n<p>What else should we do? We need to make banner change it\u2019s orientation\u00a0<strong>in accordance with iPhone position.<\/strong> First of all we need to change the line where we define types of banners which we will use:<\/p>\n<div>\n<div id=\"highlighter_608108\" class=\"syntaxhighlighter  objc\">\n<div class=\"toolbar\"><span><a class=\"toolbar_item command_help help\" href=\"httpss:\/\/bees4honey.com\/blog\/tutorial\/how-to-add-iad-banner-in-iphoneipad-app\/#\">?<\/a><\/span><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"objc plain\">- (<\/code><code class=\"objc datatypes\">void<\/code><code class=\"objc plain\">)viewDidLoad {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"objc plain\">...<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"objc plain\">adView.requiredContentSizeIdentifiers = [<\/code><code class=\"objc keyword\">NSSet<\/code> <code class=\"objc plain\">setWithObjects:ADBannerContentSizeIdentifier320x50,ADBannerContentSizeIdentifier480x32,<\/code><code class=\"objc keyword\">nil<\/code><code class=\"objc plain\">];<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"objc plain\">...<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"objc plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>and here are\u00a0<strong>methods for changing orientation:<\/strong><\/p>\n<div>\n<div id=\"highlighter_254039\" class=\"syntaxhighlighter  objc\">\n<div class=\"toolbar\"><span><a class=\"toolbar_item command_help help\" href=\"httpss:\/\/bees4honey.com\/blog\/tutorial\/how-to-add-iad-banner-in-iphoneipad-app\/#\">?<\/a><\/span><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"objc plain\">- (<\/code><code class=\"objc datatypes\">BOOL<\/code><code class=\"objc plain\">)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc comment\">\/\/ Return YES for supported orientations<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc keyword\">return<\/code> <code class=\"objc plain\">(interfaceOrientation == UIInterfaceOrientationPortrait|UIInterfaceOrientationPortrait);<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"objc plain\">}<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"objc plain\">- (<\/code><code class=\"objc datatypes\">void<\/code><code class=\"objc plain\">)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(<\/code><code class=\"objc keyword\">NSTimeInterval<\/code><code class=\"objc plain\">)duration<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"objc plain\">{<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc keyword\">if<\/code> <code class=\"objc plain\">(UIInterfaceOrientationIsLandscape(toInterfaceOrientation))<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier480x32;<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc keyword\">else<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"objc plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>And here is how it look in a landscape<\/p>\n<p><a href=\"httpss:\/\/bees4honey.com\/blog\/wp-content\/uploads\/2010\/06\/20100625135647.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-431\" title=\"iAd banner in landscape mode\" src=\"httpss:\/\/bees4honey.com\/blog\/wp-content\/uploads\/2010\/06\/20100625135647.png\" alt=\"iAd banner in landscape mode\" width=\"578\" height=\"406\" \/><\/a><\/p>\n<p>When device changes orientation we change\u00a0<strong><em>currentContentSizeIdentifier<\/em><\/strong> property of<strong><em>ADBannerView<\/em><\/strong>. Now we can see banners in landscape mode too. There is still 50 px offset, but it\u2019s easy to fix.<\/p>\n<p>Apple developers also recommend to write\u00a0<strong><em>object.delegate=nil;<\/em><\/strong> line before deallocating<strong><em>ADBannerView<\/em><\/strong> object. In our example it will look like:<\/p>\n<div>\n<div id=\"highlighter_53600\" class=\"syntaxhighlighter  objc\">\n<div class=\"toolbar\"><span><a class=\"toolbar_item command_help help\" href=\"httpss:\/\/bees4honey.com\/blog\/tutorial\/how-to-add-iad-banner-in-iphoneipad-app\/#\">?<\/a><\/span><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"objc plain\">- (<\/code><code class=\"objc datatypes\">void<\/code><code class=\"objc plain\">)dealloc {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">adView.delegate=<\/code><code class=\"objc keyword\">nil<\/code><code class=\"objc plain\">;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">[adView release];<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"objc spaces\"> <\/code><code class=\"objc plain\">[<\/code><code class=\"objc keyword\">super<\/code> <code class=\"objc plain\">dealloc];<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"objc plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Now we have finished with programming part.\u00a0<strong>Good luck with Apple iAd!<\/strong><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u4e0a\u9762\u52a0\u4e0aiAd In April 2010 during iOS 4 presentation  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-169","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/169"}],"collection":[{"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=169"}],"version-history":[{"count":1,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/169\/revisions"}],"predecessor-version":[{"id":2721,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/169\/revisions\/2721"}],"wp:attachment":[{"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}