Работа с представлениями баннера

Представления баннера используют делегата для передачи с приложением. Ваше приложение реализует делегата представления баннера для обработки общих событий в жизненный цикл представления баннера. Ваше приложение должно:

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

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

Ответ на события баннера

Большинство делегатов представления баннера реализует все следующие способы поведения:

Ответ на касание в представлении баннера

Прежде чем представление баннера инициировало рекламное действие, оно вызывает делегата 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 свойство с размерами, фактически использующимися Вашим приложением.

Методы наиболее успешной практики представления баннера

При разработке приложения помните следующие принципы: