Пользователь
0,0
рейтинг
27 июня 2010 в 07:35

Добавляем рекламные баннеры iAd в ваши приложения для iPhone

В апреле этого года во время презентации новой операционной системы iOS 4 (бывшая iPhone OS) Стив Джобс также представил и новую платформу компании Apple для мобильной рекламы – iAd. По заверению Apple, их главная задача — дать возможность заработать разработчикам бесплатных и недорогих приложений за счет размещения в последних рекламных баннеров. Оплата будет идти как за показ рекламного баннера, так и за клики по нему. Во втором случае оплата будет существенно выше.

Основная идея iAd – соединение интерактивности, которую дает использование смартфона или планшета, с эмоциональностью рекламного объявления, в котором задействованы и аудио, и видео. Для этих целей при создании рекламы используются Java Script, HTML5, CSS3 и мультитач. Все это позволяет создавать интересные и привлекающие внимание рекламные ролики-приложения. Примеры таких реклам мы могли видеть на презентации новой операционной системы (на английском языке).

Основной проблемой мобильной рекламы сегодня, по мнению Apple, является то, что кликая по рекламному баннеру, пользователь покидает приложение – переходя, чаще всего, на сайт рекламодателя. С помощью iAd мы можем обойти эту неприятность. После клика по баннеру рекламное объявление появляется поверх вашего приложения. Пользователь может в любой момент закрыть его и вернуться в ваше приложение точно в тот момент, в котором он его покинул.

На основе iAd Programming Guide и видео с WWDC 2010 я набросал краткий обзор-перевод этой новой технологии. Речь пойдет не о создании самих красочных рекламок, а именно о размещении таковых в ваших приложениях.



Первое, что надо сделать, чтобы поместить рекламу в вашем приложении – это добавить к вашему проекту в Xcode - iAd.framework. Она содержится в iOS 4 SDK. Ну и не забыть добавить #import <iAd/iAD.h> куда надо. Разработчикам предлагаются для использования два баннера на выбор — 320 x 50 пикс. для портретнго расположения и 480 х 32 пикс. для альбомного. Основу этого баннер составляет класс ADBannerView, который является подклассом UIView. Поэтому все, что вам надо, это внедрить этот view в вашу иерархию элементов управления интерфейса. Вы можете сделать это и программно, и через Interface Builder — там появился новый UI элемент — Ad BannerView.



Apple настоятельно рекомендует располагать баннер сверху или снизу экрана и не располагать его на движущихся частях таких элементов как — ScrollView и TableView– это уменьшает показы (и как следствие ваши деньги), да и пользователю неудобно «ловить» такой баннер.

Давайте просто создадим новый проект в Xcode на основе шаблона View-based Application и добавим в него рекламный баннер. Наше приложение будет называться iAdEx. Изменяем код в iAdExViewController.h

#import <UIKit/UIKit.h>
#import <iAd/iAd.h>

@interface iAdExViewController : UIViewController "<"ADBannerViewDelegate">"  //кавычки пришлось поставить, иначе Хабр съедал ADBannerViewDelegate
{
      ADBannerView *adView;
      BOOL bannerIsVisible;
}

@property (nonatomic,assign) BOOL bannerIsVisible;

@end


а в iAdExViewController.m изменяем метод viewDidLoad

- (void)viewDidLoad {
      adView = [[ADBannerView alloc] initWithFrame:CGRectZero];
      adView.frame = CGRectOffset(adView.frame, 0, -50);
      adView.requiredContentSizeIdentifiers = [NSSet setWithObject:ADBannerContentSizeIdentifier320x50];
      adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;
      [self.view addSubview:adView];
      adView.delegate=self;
      self.bannerIsVisible=NO;
      [super viewDidLoad];
}


Остановимся чуть-чуть подробнее на свойствах requiredContentSizeIdentifiers и currentContentSizeIdentifier.
В первом свойстве вы указываете все виды баннеров, которые вы собираетесь использовать в своем приложении. А второе свойство — какой тип баннера вы будете использовать в данный конкретный момент. Так как я пока пишу самое простое приложение, то продолжим с одним размером баннера и портретной ориентацией, а ниже я сделаю так, чтобы баннер менялся в зависимости от ориентации телефона.

Давайте остановимся на секунду и порассуждаем. Устройство получает рекламные баннеры из сети. Что будет, если мы находимся в месте, где связи нет? Или какие-то перебои у Apple c сервером рекламы? Тогда наше ADBannerView будет пустовать. Мало того что это не красиво, так еще и занимает место нашего приложения зазря. Apple настоятельно советует применять, как они это называют, «идеальную реализацию» — когда в отсутствии рекламы по каким-то причинам баннер убирается с экрана приложения, а при восстановлении связи и получении рекламного объявления — снова оказывается на экране. Мы не зря приписали ADBannerViewDelegate в описании нашего класса, и теперь он может принимать сообщения от баннера. В случае успешного принятия рекламного объявления баннер пошлет нам сообщение bannerViewDidLoadAd, а в случае каких-то проблем с этим — сообщение didFailToReceiveAdWithError. Мы сейчас же реализуем, требуемые для этого методы в нашем приложении.

- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
 if (!self.bannerIsVisible)
 {
  [UIView beginAnimations:@"animateAdBannerOn" context:NULL];
// баннер сейчас не виден и сдвинут за экран на 50 пикселей
  banner.frame = CGRectOffset(banner.frame, 0, 50);
  [UIView commitAnimations];
  self.bannerIsVisible = YES;
 }
}

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
if (self.bannerIsVisible)
 {
  [UIView beginAnimations:@"animateAdBannerOff" context:NULL];
// баннер сейчас виден, и мы его убираем, так как что-то не заладилось со связью
  banner.frame = CGRectOffset(banner.frame, 0, -50);
  [UIView commitAnimations];
  self.bannerIsVisible = NO;
 }
}


Запускаем

image

Кликаем на баннер

image

Вот мы и реализовали все правильно, как и просят нас товарищи из Apple. Если мы сейчас запустим приложение то увидим что баннер есть, он показывает тестовое объявление, и если мы по нему кликнем — то откроется большая тестовая реклама. Но есть одна проблема. Хорошо мне, что у меня тестовое приложение, которое ничего вообще не делает, кроме как показывает баннер. А у вас, наверное, и игры и музыкальные проигрыватели, и другие интерактивные приложения. Если вы сделаете тоже что и я, то заметите, что ваше приложение продолжит играть музыку или видео во время показа рекламы и получается кавардак. А если у вас игра и надо срочно отреагировать на событие — то пользователи вообще будут шарахаться от рекламы в вашем приложении. Для того чтобы решить эти вопросы мы реализуем у себя в приложении методы bannerViewActionShouldBegin, когда большое рекламное объявление начинает разворачиваться и bannerViewActionDidFinish, когда сворачивается.

- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
{
 NSLog(@"Banner view is beginning an ad action");
 BOOL shouldExecuteAction = YES; // будете ли вы отвечать на это сообщение баннеру
 if (!willLeave && shouldExecuteAction)
    {
    // останавливаем в нашем приложении всю интерактивность 
    // [video pause];
    // [audio pause];
    }
 return shouldExecuteAction;
}

- (void)bannerViewActionDidFinish:(ADBannerView *)banner
{
   // возобновите здесь все, что вы остановили
   // [video resume];
   // [audio resume];
   // итд итп
}


Отдельно остановимся на BOOL shouldExecuteAction. Я указал — YES. Вы тоже должны стараться как можно чаще говорить ДА своему ADBannerView. Тем самым вы разрешаете ему после клика развернуться во весь экран. Если у вас идет какой-то важный процесс в приложении, и вы не хотите разрешать прерывать этот процесс, то вы можете ответить на это сообщение — NO и реклама не откроется. Однако Apple очень сильно просит нас или не делать этого вообще или делать только в экстренных случаях. Сами подумайте — баннер есть — пользователь по нему кликает — а рекламы нет. Непорядок! Как сказал менеджер направления iAd на WWDC: «Вы можете ответить NO, но я даже не представляю, что это должна быть за ситуация».

Все что нам осталось из «рюшечек» еще сделать — это изменения баннера в зависимости от ориентации телефона. Если вы помните, при инициализации мы указывали запрашиваемые баннеры только для портретной ориентации. Поэтому эту строчку сейчас нам надо поправить

- (void)viewDidLoad {
...
adView.requiredContentSizeIdentifiers = [NSSet setWithObjects:ADBannerContentSizeIdentifier320x50,ADBannerContentSizeIdentifier480x32,nil];
...
}


и вот так у нас будет выглядеть следующие методы

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 // Return YES for supported orientations
 return (interfaceOrientation == UIInterfaceOrientationPortrait|UIInterfaceOrientationPortrait);
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
 if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation))
  adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier480x32;
 else
  adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;
}


Результат после разворота симулятора:

image

То есть при изменении ориентации телефона мы меняем свойство currentContentSizeIdentifier нашего ADBannerView. Вот теперь мы можем смотреть рекламные баннеры в нашем приложении и в альбомной ориентации. На скриншоте «в альбоме» получилось не очень красиво из-за сдвижки на 50 пикселей баннера — но это уже вы поправите сами.

Еще о паре мелочей, о которых говорилось на WWDC. Инженеры Apple настоятельно просят вас перед освобождением объекта ADBannerView писать строчку объект.delegate=nil; Очень-очень просят. В нашем конкретном примере это будет выглядеть:

- (void)dealloc {
 adView.delegate=nil;
 [adView release];
 [super dealloc];
}


Мы закончили с программной частью. Мы сделали баннер, заставили его работать в двух ориентациях, научились обрабатывать события и ошибки этого баннера.

Теперь кратко насчет оплаты — для получения денег за отражение рекламы из сети iAd Network — вам потребует еще один контракт с Apple, который вы можете стандартно создать через портал разработчика. В процессе настройки вашего приложения на портале вы ответите на вопросы: «Является ли целевая аудитория вашего приложения младше 17 лет?» и настроите слова и URL-исключения — рекламу с какими словами вы бы не хотели показывать. Например, вы бы не желали видеть ваших конкурентов в своем приложении. Ну а дальше — ждете прихода вашего чека с деньгами.

Работа iAd, как ожидается, начнется 1 июля — так что закатывайте рукава и дописывайте приложения – время еще есть. Пока на форуме разработчиков есть информация, что тестовые объявления появляются нестабильно. Действительно, пока я сегодня писал статью, объявления то появлялись при запуске приложения, то не появлялись. Но во всем есть свои прелести — зато я и протестировал метод появления баннера, когда реклама наконец была получено из сети.
@sojik
карма
15,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (23)

  • +1
    полезно, сохранил.
    p.s.
    как вы с русским интерфейсом живете…
  • 0
    спасибо, кармаплюсую
  • +4
    Пока одни борятся с навязчивой рекламой, другие разрабатывают новые способы ее интеграции. Забавно. У аплоюзеров все не как у людей.
    • 0
      Непонятно при чем тут Apple. Борьба «банеры vs банеро-резки» ведется на любой платформе.
  • +5
    Началось…
    • 0
      Можно подумать до появления iAd рекламы в бесплатных приложениях не было. Я даже скажу больше, некоторые хитрожопые программисты встраивали рекламу даже в платные программы.
      • 0
        была, никто не отрицает
        AdMod, Quattro Wireless и др.
        только у всех у них был один минус, описанный в статье, приложение закрывалось если юзер кликал на рекламу, я так понимаю у провайдеров счетчики накручивались именно при переходе на страничку
        теперь же число кликов несомненно вырастет: посмотрел, закрыл и продолжил с того же места — удобно
        • 0
          Вы видимо не работали с Quattro Wireless
          Можно настроить два режима отображения содержимого после нажатия на рекламу
          — открывать в сафари.
          — открывать в специальном окошке (снизу кнопочка будет — Close) — посмотрел подробности рекламы, нажал кнопочку и продолжил с того же самого места.
          • 0
            как раз только с ней, не считая iAd, и работал, а про такую фичу не знал
            на quattro wiki не могу найти упоминания о таком режиме

            если не секрет, какой параметр за это отвечает?
            или это только для iPhone SDK доступно?
            • 0
              да, я говорю про Quattro для iPhone

              реклама по умолчанию открывается в спец.окне, для открытия в сафари надо установить свойство
              @property (assign) BOOL openInSafari;

              если говорить про Android то реклама там не закрывает главное приложение — потом через список запущенных приложений можно вернутся к игре.

              про другие платформы не скажу (так как не знаю примеров успешной работы на рекламе в других платформах — если есть информация — просвятите плиз).
          • 0
            Немного оффтоп, приятно видеть знакомые ники в моем посте. Если честно, ваш самый первый пост про iSteamTube был для меня просто холодным душем, когда он вышел. После прочтения я был в прострации недели две и не мог сесть за программирование. Но на то и нужны, наверное, такие посты, чтобы спускать людей на землю. Короче, спасибо и удачи вам!
  • 0
    йАду мне, йАду!
    • 0
      * аЙаду )
  • 0
    Дожили! Казалось бы выросли экраны мобилок во благо пользователей, а нет, нате вам рекламу. Может хоть со временем придем к тому, что телефоны будут раздавать за то, что платим бабки оператору, да рекламу смотрим

    ps: sojic, очепяточка в последней строке
    • 0
      Очень сильно хочу надеяться, что речь идет только о бесплатных приложениях.

      Впрочем, по мне — так лучше заплатить, но этих мельтяшащих баннеров не видеть.
  • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      может быть, пока продукцию Apple не навязывают насильно, бороться не надо?
    • 0
      Брат призываю тебя к терпению к заблудившимся детям
  • 0
    Я правильно понимаю, что приложение для показа и выбора нужной рекламы ломится в сеть за счет же пользователя?
    • +1
      естественно, не за счет же Стива! ;)
    • +2
      Ну как бы iPhone идёт «всегда» с контрактом, и как правило там безлимитный интернет, поэтому для пользователей это не заметно.
      Это для пользователей из Америки и Европы, как в России обстоят дела с ценами на сами устройства и контрактами на сотовую связь, я примерно в курсе.

      Но iAd это всё же глобальная штука, поэтому…
  • 0
    Запоздалое, но огромное спасибо за статью.
  • 0
    Нет смысла их пока вобще добавлять. работает iAd только в 5-6 странах. денег не заработаете на этом, если приложение не будет англоязычным и не заточено под тамошнюю публику.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.