Работа с представлениями баннера
Представления баннера используют делегата для передачи с приложением. Ваше приложение реализует делегата представления баннера для обработки общих событий в жизненный цикл представления баннера. Ваше приложение должно:
Ответьте, когда пользователь коснется баннера.
Ответьте, когда представление баннера загрузит рекламу.
Ответьте, когда представление баннера встретится с ошибкой.
Типичный образец должен реализовать эти методы в Вашем пользовательском контроллере представления, но можно реализовать их на другом объекте, если Вы предпочитаете.
Если Ваша ориентация поддержек приложений изменяется, Ваш контроллер представления должен также изменить размер представления баннера, когда изменяется ориентация устройства.
Ответ на события баннера
Большинство делегатов представления баннера реализует все следующие способы поведения:
Ответ на касание в представлении баннера
Прежде чем представление баннера инициировало рекламное действие, оно вызывает делегата bannerViewActionShouldBegin:willLeaveApplication:
метод. Ваш метод делегата выполняет две задачи:
Это решает, позволить ли действию быть инициированным.
Если действие покроет пользовательский интерфейс Вашего приложения, этот метод паузы какие-либо действия, требующие взаимодействия с пользователем.
Ваш делегат должен возвратиться YES
от этого метода, если это хочет позволить действию быть инициированным. Это может препятствовать тому, чтобы действие было инициировано путем возврата NO
. Ваше приложение должно всегда позволять действиям быть инициированными, если оно не может безопасно сделать так.
Если
willLeave
параметрYES
, тогда Ваше приложение будет перемещенным в фон после того, как это возвратится из этого метода делегата. Этот процесс описан в Определении Основанной на документе Модели данных.Если
willLeave
параметрNO
, iAd покрывает пользовательский интерфейс приложения после того, как это возвратится из этого метода делегата. Ваше приложение должно отключить звуки, анимации или другие действия, требующие взаимодействия с пользователем перед возвратом. Например, игра в реальном времени должна приостановить геймплей, затем возвратитьсяYES
позволить действию быть инициированным.
Создание Представления Баннера показывает типичный образец для того, как Ваше приложение должно реализовать этот метод делегата:
Перечисление 2-1 , Позволяющее действие быть инициированным
- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave |
{ |
NSLog(@"Banner view is beginning an ad action"); |
BOOL shouldExecuteAction = [self allowActionToRun]; // your app implements this method |
if (!willLeave && shouldExecuteAction) |
{ |
// insert code here to suspend any services that might conflict with the advertisement |
} |
return shouldExecuteAction; |
} |
Если представление баннера покрыло пользовательский интерфейс Вашего приложения, оно вызывает делегата bannerViewActionDidFinish:
метод после интерфейса восстанавливается. Ваша реализация этого метода должна восстановить любые службы, приостановленные Вашим приложением.
В то время как пользователь взаимодействует с рекламой, на iOS 4.2 и ранее, Ваше приложение не должно удалять объект представления баннера. Только удалите представление баннера после делегата представления баннера bannerViewActionDidFinish:
метод вызывают.
Ответ, когда загружается реклама
iAd платформа упрощает принимать асинхронное модели и только отображать объявление, когда каждый доступен. Ваше приложение никогда не должно отображать пустое представление баннера. Вместо этого это должно показать баннер, когда реклама доступна, и скройте баннер, когда это не имеет ничего для показа.
Когда представление баннера имеет новую рекламу для отображения, оно вызывает делегата bannerViewDidLoadAd:
метод. Даже если представление баннера в настоящее время не является частью иерархии представления, этот метод вызывают. Ваше приложение может использовать этот метод, чтобы добавить представление к иерархии представления или переместить представление баннера об экране. Размеры Представления баннера используют представление баннера bannerLoaded
свойство, чтобы определить, имеет ли баннер рекламу. Если баннер не видим, но содержит рекламу, он переходит представление баннера на экран, изменяя размеры содержания при необходимости.
Анимация перечисления 2-2 в представлении баннера после новой рекламы загружается
- (void)bannerViewDidLoadAd:(ADBannerView *)banner |
{ |
[self layoutAnimated:YES]; |
} |
- (void)layoutAnimated:(BOOL)animated |
{ |
CGRect contentFrame = self.view.bounds; |
CGRect bannerFrame = _bannerView.frame; |
if (_bannerView.bannerLoaded) |
{ |
contentFrame.size.height -= _bannerView.frame.size.height; |
bannerFrame.origin.y = contentFrame.size.height; |
} else { |
bannerFrame.origin.y = contentFrame.size.height; |
} |
[UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{ |
_contentView.frame = contentFrame; |
[_contentView layoutIfNeeded]; |
_bannerView.frame = bannerFrame; |
}]; } |
Обработка ошибок
Если ошибка происходит, представление баннера вызывает делегата bannerView:didFailToReceiveAdWithError:
метод. Когда это происходит, Ваше приложение должно скрыть представление баннера. Перечисление 2-3 показывает один способ, которым Вы могли бы реализовать это. Это использует тот же метод в качестве Перечисления 2-2 для перемещения баннера вне экрана.
Когда рекламные объявления не доступны, перечисление 2-3, Удаляющее баннер, просматривает
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error |
{ |
[self layoutAnimated:YES]; |
} |
Даже после того, как ошибка отправляется Вашему делегату, представление баннера продолжает пытаться загрузить новые рекламные объявления. Таким образом реализация обоих из этих методов делегата позволяет Вашему приложению отображать баннер только, когда загружаются рекламные объявления.
Отмена рекламного действия
Когда представление баннера покрывает пользовательский интерфейс Вашего приложения для выполнения его действия, приложение продолжает получать события. Ваше приложение может читать bannerViewActionInProgress
свойство баннера просматривает, чтобы определить, выполняется ли действие баннера. Ваше приложение должно вычислить свои действия и избежать действий, требующих взаимодействия с пользователем.
Если событие имеет место, который требует внимания пользователя, можно вызвать представление баннера cancelBannerViewAction
метод для отмены рекламного действия. Концы действия и представление баннера вызывают делегата bannerViewActionDidFinish:
метод.
Изменение размера баннера динамично
Приложения, намеревающиеся изменить размеры представления баннера после создания, должны сконфигурировать requiredContentSizeIdentifiers
свойство с набором всех возможных размеров представление может взять в Вашем приложении. Наиболее распространенная причина поддерживать многократные размеры в Вашем приложении состоит в том, чтобы поддерживать изменения ориентации. Если Ваши изменения приложений его интерфейс в ответ на изменение ориентации, это должно изменить размеры представления баннера для адаптации новой ориентации.
Перечисление 2-4 показывает, как контроллер представления мог сконфигурировать представление баннера для загрузки рекламных объявлений, имеющих и портрет и альбомные изображения:
Перечисление 2-4 , Конфигурирующее баннер, просматривает для обработки альбомных и портретных ориентаций
self.bannerView.requiredContentSizeIdentifiers = [NSSet setWithObjects: ADBannerContentSizeIdentifierPortrait, ADBannerContentSizeIdentifierLandscape, nil]; |
Когда изменение ориентации происходит, Ваш контроллер представления willRotateToInterfaceOrientation:duration:
метод изменяет размер баннера.
Перечисление 2-5 , Реагирующее на изменение ориентации
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration |
{ |
if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) |
self.bannerView.currentContentSizeIdentifier = |
ADBannerContentSizeIdentifierLandscape; |
else |
self.bannerView.currentContentSizeIdentifier = |
ADBannerContentSizeIdentifierPortrait; |
} |
Когда Ваше приложение конфигурирует requiredContentSizeIdentifiers
свойство больше чем с одним размером баннера, iAd служба только загружает рекламные объявления, обеспечивающие изображения для всех указанных размеров. Это позволяет представлению баннера беспрепятственно изменять выведенную на экран рекламу когда Ваши изменения приложений размер представления. Поскольку это ограничивает объявления, доступные представлению баннера, необходимо только сконфигурировать requiredContentSizeIdentifiers
свойство с размерами, фактически использующимися Вашим приложением.
Методы наиболее успешной практики представления баннера
При разработке приложения помните следующие принципы:
Только создайте представление баннера, когда Вы будете намереваться вывести на экран его пользователю. Иначе, это может циклически повториться через объявления и истощить список доступного помещения объявления о Вашем приложении.
Каждый раз, когда возможно, представления баннера должны быть помещены наверху или нижняя часть экрана, чтобы гарантировать, чтобы они визуально стояли из пользовательского опыта Вашего приложения и предотвратить случайные касания баннера, которые могут расстроить Ваших пользователей.
Если пользователь перешел с экрана содержания с представлением баннера на экран, не имеющий представления баннера, и Вы ожидаете, что они будут на том экране в течение длительного периода времени, удалят представление баннера из иерархии представления, установят ее делегата в
nil
и выпустите его прежде, чем перейти на новый экран содержания. Более широко избегите иметь в наличии представление баннера, когда это будет невидимо для пользователя.Когда Ваше приложение создает представление баннера, существует задержка, прежде чем представление сможет фактически вывести на экран рекламу. Если Вы намереваетесь использовать то представление баннера об экране содержания, которое только видимо пользователю в течение короткого периода времени, баннер может не иметь достаточного количества времени для загрузки рекламы, прежде чем пользователь закончит взаимодействовать с тем экраном содержания. Вместо этого Ваше приложение должно создать единственное представление баннера и использовать его всюду по Вашему пользовательскому интерфейсу. Поскольку пользователь перешел вокруг Вашего приложения, Ваше приложение переходит представление баннера на любой экран, который, как ожидают, выведет на экран баннер. iAdSuite выборка демонстрирует, как реализовать этот метод.
Когда объявление переходы к богатому опыту носителей, iAd использует дополнительную память так, чтобы это могло вывести на экран интерактивное объявление пользователю. Эта память прибывает из доступной памяти Вашего приложения. Ваше приложение должно вычислить свои действия, чтобы позволить объявлению работать без сбоев и реагировать быстро на условия низкой памяти путем выпуска больших объектов, которые могут быть легко воссозданы после того, как пользователь заканчивает взаимодействовать с объявлением.