Баннеры

In the Get Started guide, you learned how to deploy the SDK and display a test banner ad. Теперь мы расскажем, как настраивать баннеры.

Чтобы посмотреть, как баннеры будут выглядеть при показе, скачайте приложение API Demo для iOS на языке Objective-C или Swift.

Скачать API Demo

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

Размер (Ш x В) Описание Устройства Константа AdSize
320 x 50 Стандартный баннер Смартфоны и планшеты kGADAdSizeBanner
320 x 100 Большой баннер Смартфоны и планшеты kGADAdSizeLargeBanner
300 x 250 Средний прямоугольник (IAB) Смартфоны и планшеты kGADAdSizeMediumRectangle
468 x 60 Полный баннер (IAB) Планшеты kGADAdSizeFullBanner
728 x 90 Полноразмерный баннер (IAB) Планшеты kGADAdSizeLeaderboard
Ширина экрана x 32|50|90 Смарт-баннер Смартфоны и планшеты kGADAdSizeSmartBannerPortrait
kGADAdSizeSmartBannerLandscape

Смарт-баннеры

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

В смарт-баннерах используются три варианта высоты объявления в пикселях dp (не зависящих от плотности):

  • 32: высота экрана устройства <= 400;
  • 50: 400 < высота экрана устройства <= 720;
  • 90: высота экрана устройства > 720.

Высота экрана мобильных устройств зависит от их ориентации. Смарт-баннеры на смартфонах обычно имеют размер "ширина экрана  х 50" при вертикальной ориентации и "ширина экрана х 32" при горизонтальной. На планшетах в любом случае используется размер "ширина экрана х 90".

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

В смарт-баннерах нужно использовать константу kGADAdSizeSmartBannerPortrait или kGADAdSizeSmartBannerLandscape, например:

Objective-C

// Use kGADAdSizeSmartBannerLandscape if your app is running in landscape.
DFPBannerView *bannerView = [[DFPBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerPortrait];

Swift

// Use kGADAdSizeSmartBannerLandscape if your app is running in landscape.
let bannerView = DFPBannerView(adSize: kGADAdSizeSmartBannerPortrait)

Собственный размер объявлений

Помимо стандартных рекламных блоков AdMob система DFP позволяет показывать в приложениях блоки любого размера по вашему выбору. Размер (ширина и высота), определенный в запросе объявлений, должен совпадать с параметрами показа в приложении (то есть DFPBannerView).

Objective-C

// Define custom GADAdSize of 250x250 for DFPBannerView
GADAdSize customAdSize = GADAdSizeFromCGSize(CGSizeMake(250, 250));
self.bannerView = [[DFPBannerView alloc] initWithAdSize:customAdSize];

Swift

// Define custom GADAdSize of 250x250 for DFPBannerView.
let customAdSize = GADAdSizeFromCGSize(CGSize(width: 250, height: 250))
bannerView = DFPBannerView(adSize: customAdSize)

Посмотрите, как реализована функция DFP "Несколько размеров объявлений" в приложении API Demo для iOS:

Objective-C Swift

Несколько размеров объявлений

DFP позволяет указать несколько размеров объявлений, которые могут быть показаны в DFPBannerView. Для этого выполните следующие действия:

  1. В пользовательском интерфейсе DFP создайте позицию с таргетингом на тот рекламный блок, который связан с несколькими размерами креативов.

  2. В своем приложении задайте свойство validAdSizes в DFPBannerView:

    Objective-C

    // Define an optional array of GADAdSize to specify all valid sizes that are appropriate
    // for this slot. Never create your own GADAdSize directly. Use one of the
    // predefined standard ad sizes (such as kGADAdSizeBanner), or create one using
    // the GADAdSizeFromCGSize method.
    //
    // Note: Ensure that the allocated DFPBannerView is defined with an ad size. Also note
    // that all desired sizes should be included in the validAdSizes array.
    self.bannerView.validAdSizes = @[
        NSValueFromGADAdSize(kGADAdSizeBanner),
        NSValueFromGADAdSize(kGADAdSizeMediumRectangle),
        NSValueFromGADAdSize(GADAdSizeFromCGSize(CGSizeMake(120, 20)))
    ];
    

    Swift

    // Define an optional array of GADAdSize to specify all valid sizes that are appropriate
    // for this slot. Never create your own GADAdSize directly. Use one of the
    // predefined standard ad sizes (such as kGADAdSizeBanner), or create one using
    // the GADAdSizeFromCGSize method.
    //
    // Note: Ensure that the allocated DFPBannerView is defined with an ad size. Also note
    // that all desired sizes should be included in the validAdSizes array.
    bannerView.validAdSizes = [NSValueFromGADAdSize(kGADAdSizeBanner),
        NSValueFromGADAdSize(kGADAdSizeMediumRectangle),
        NSValueFromGADAdSize(GADAdSizeFromCGSize(CGSize(width: 120, height: 20)))]
    

  3. Реализуйте метод GADAdSizeDelegate, который будет обнаруживать изменения в размере объявлений.

    Objective-C

    - (void)adView:(DFPBannerView *)view willChangeAdSizeTo:(GADAdSize)size;
    

    Swift

    public func adView(bannerView: DFPBannerView!, willChangeAdSizeTo size: GADAdSize)
    

    Прежде чем запрашивать объявление, необходимо задать делегат.

    Objective-C

    self.bannerView.adSizeDelegate = self;

    Swift

    bannerView.adSizeDelegate = self

Посмотрите, как реализована функция DFP "Несколько размеров объявлений" в приложении API Demo для iOS:

Objective-C Swift

Подсчет показов вручную

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

Objective-C

self.bannerView.enableManualImpressions = YES;

Swift

bannerView.enableManualImpressions = true

Увидев, что объявление успешно возвращено и отображается на экране, вы можете вручную зарегистрировать показ:

Objective-C

[self.bannerView recordImpression];

Swift

bannerView.recordImpression()

События в приложении

С помощью событий вы можете создавать объявления, которые будут отправлять сообщения в код приложения. На основе этих сообщений затем выполняются определенные действия.

С помощью GADAppEventDelegate можно отслеживать события DFP. Эти события могут происходить в любое время жизненного цикла объявления, в том числе ещё до вызова adViewDidReceiveAd: для GADBannerViewDelegate.

Objective-C

// Implement your app event within these methods. The delegate will be
// notified when the SDK receives an app event message from the ad.

@optional
// Called when the banner receives an app event.
- (void)adView:(DFPBannerView *)banner
    didReceiveAppEvent:(NSString *)name
              withInfo:(NSString *)info;
// Called when the interstitial receives an app event.
- (void)interstitial:(DFPInterstitial *)interstitial
    didReceiveAppEvent:(NSString *)name
              withInfo:(NSString *)info;

Swift

// Implement your app event within these methods. The delegate will be
// notified when the SDK receives an app event message from the ad.

// Called when the banner receives an app event.
optional public func adView(banner: GADBannerView!,
    didReceiveAppEvent name: String!, withInfo info: String!)

// Called when the interstitial receives an app event.
optional public func interstitial(interstitial: GADInterstitial!,
    didReceiveAppEvent name: String!, withInfo info: String!)

Методы отслеживания событий в приложении можно реализовать в контроллере представления:

Objective-C

@import GoogleMobileAds;

@interface ViewController : UIViewController  {
}

@end

Swift

import GoogleMobileAds

class ViewController: UIViewController, GADAppEventDelegate {
}

Прежде чем запрашивать объявление, задайте делегат с помощью appEventDelegate.

Objective-C

self.bannerView.appEventDelegate = self;

Swift

bannerView.appEventDelegate = self

В следующем примере показано, как изменять цвет фона объявления в зависимости от события в приложении с названием цвета:

Objective-C

- (void)adView:(DFPBannerView *)banner
    didReceiveAppEvent:(NSString *)name
              withInfo:(NSString *)info {
  if ([name isEqual:@"color"]) {
    if ([info isEqual:@"green"]) {
      // Set background color to green.
      self.view.backgroundColor = [UIColor greenColor];
    } else if ([info isEqual:@"blue"]) {
      // Set background color to blue.
      self.view.backgroundColor = [UIColor blueColor];
    } else
      // Set background color to black.
      self.view.backgroundColor = [UIColor blackColor];
    }
  }
}

Swift

func adView(banner: GADBannerView!, didReceiveAppEvent name: String!,
    withInfo info: String!) {
  if name == "color" {
    switch info {
    case "green":
      // Set background color to green.
      view.backgroundColor = UIColor.greenColor()
    case "blue":
      // Set background color to blue.
      view.backgroundColor = UIColor.blueColor()
    default:
      // Set background color to black.
      view.backgroundColor = UIColor.blackColor()
    }
  }
}

Креатив, который отправляет сообщения о событиях в приложении, связанных с цветом, в appEventDelegate:

<html>
<head>
  <script src="//media.admob.com/api/v1/google_mobile_app_ads.js"></script>
  <script>
    // Send a color=green event when ad loads.
    admob.events.dispatchAppEvent("color", "green");

    handleClick = function() {
      // Send a color=blue event when ad is clicked.
      admob.events.dispatchAppEvent("color", "blue");
    };
  </script>
  <style>
    #ad {
      width: 320px;
      height: 50px;
      top: 0px;
      left: 0px;
      font-size: 24pt;
      font-weight: bold;
      position: absolute;
      background: black;
      color: white;
      text-align: center;
    }
  </style>
</head>
<body>
  <div id="ad" onClick="handleClick()">Carpe diem!</div>
</body>
</html>

Посмотрите, как реализованы события в объявлениях DFP в приложении API Demo для iOS.

Objective-C Swift

Обратные вызовы событий в жизненном цикле объявления

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

Objective-C

@protocol GADBannerViewDelegate 
@optional
- (void)adViewDidReceiveAd:(DFPBannerView *)bannerView;
- (void)adView:(DFPBannerView *)bannerView
    didFailToReceiveAdWithError:(GADRequestError *)error;
- (void)adViewWillPresentScreen:(DFPBannerView *)bannerView;
- (void)adViewDidDismissScreen:(DFPBannerView *)bannerView;
- (void)adViewWillDismissScreen:(DFPBannerView *)bannerView;
- (void)adViewWillLeaveApplication:(DFPBannerView *)bannerView;
@end

Swift

public protocol GADBannerViewDelegate: NSObjectProtocol {
  optional public func adViewDidReceiveAd(bannerView: GADBannerView!)
  optional public func adView(bannerView: GADBannerView!,
      didFailToReceiveAdWithError error: GADRequestError!)
  optional public func adViewWillPresentScreen(bannerView: GADBannerView!)
  optional public func adViewWillDismissScreen(bannerView: GADBannerView!)
  optional public func adViewDidDismissScreen(bannerView: GADBannerView!)
  optional public func adViewWillLeaveApplication(bannerView: GADBannerView!)
}

Эти методы можно реализовать в отдельном объекте, например в контроллере представления:

Objective-C

@import GoogleMobileAds;

@interface ViewController : UIViewController  {
}

@end

Swift

import GoogleMobileAds

class ViewController: UIViewController, GADBannerViewDelegate {
}

Или как часть подкласса DFPBannerView:

Objective-C

@import GoogleMobileAds;

@interface MyBannerView : DFPBannerView  {
}

@end

Swift

import GoogleMobileAds

class MyBannerView: DFPBannerView, GADBannerViewDelegate {
}

Прежде чем запрашивать объявление, необходимо задать делегат.

Objective-C

self.bannerView.delegate = self;

Swift

bannerView.delegate = self

adViewDidReceiveAd:

Передается при успешном выполнении loadRequest:. С его помощью можно добавить объект-отправитель в иерархию представления, если до этого он был скрыт, например:

Objective-C

- (void)adViewDidReceiveAd:(DFPBannerView *)bannerView {
  bannerView.hidden = NO;
}

Swift

func adViewDidReceiveAd(bannerView: DFPBannerView!) {
  bannerView.hidden = false
}

adView:didFailToReceiveAdWithError:

Передается при ошибке выполнения метода loadRequest:, которая обычно связана с сетевым сбоем, некорректной настройкой приложения или отсутствием подходящих ресурсов объявлений. Такие события можно фиксировать в журналах для последующей отладки:

Objective-C

- (void)adView:(DFPBannerView *)adView
    didFailToReceiveAdWithError:(GADRequestError *)error {
  NSLog(@"adView:didFailToReceiveAdWithError: %@", error.localizedDescription);
}

Swift

func adView(bannerView: DFPBannerView!,
    didFailToReceiveAdWithError error: GADRequestError!) {
  print("adView:didFailToReceiveAdWithError: \(error.localizedDescription)")
}

adViewWillPresentScreen:

Передается непосредственно перед показом полноэкранной рекламы в ответ на клик по объявлению. На этом этапе следует приостановить все анимации, таймеры и прочие задачи, предполагающие взаимодействие с пользователем, и сохранить состояние приложения, как в случае UIApplicationDidEnterBackgroundNotification. Обычно после просмотра полноэкранного объявления пользователь закрывает его, вследствие чего вызывается adViewDidDismissScreen: и управление возвращается приложению. Если же пользователь нажмет на ссылку для перехода в App Store, iTunes или на главную страницу, приложение переводится в фоновый режим, после чего его работа может быть завершена.

В таких случаях в iOS 4.0 и выше вызывается метод applicationWillResignActive: корневого контроллера представления, а потом – adViewWillLeaveApplication:.

adViewDidDismissScreen:

Передается при выходе из полноэкранного пользовательского интерфейса объекта-отправителя.

adViewWillDismissScreen:

Передается непосредственно перед закрытием полноэкранного пользовательского интерфейса объекта-отправителя. Восстанавливает приложение и корневой контроллер представления. На этом этапе следует перезапустить задачи переднего плана, приостановленные при выполнении метода adViewWillPresentScreen:.

adViewWillLeaveApplication:

Передается непосредственно перед переводом приложения в фоновый режим или завершением его работы в результате перехода в App Store или iTunes. Непосредственно перед этим поступают стандартные сообщения UIApplicationDelegate, такие как applicationDidEnterBackground:.

Не запрашивайте объявления в applicationWillEnterForeground:. Такие запросы игнорируются. Вместо этого поместите запрос в applicationDidBecomeActive:.

Делегаты в Objective-C не сохраняются и могут получать асинхронные сообщения до тех пор, пока делегирующий объект не будет отменен.

Посмотрите, как реализованы делегаты обратного вызова событий в жизненном цикле объявлений в приложении API Demo для iOS.

Objective-C Swift

Дальнейшие действия

Оставить отзыв о...

Текущей странице
SDK for DFP Users on iOS
Нужна помощь? Обратитесь в службу поддержки.