Как задать нативные стили

Настройки нативных стилей позволяют Google Менеджеру рекламы выполнять отрисовку нативных объявлений на основе заданных вами стилей. Сначала укажите размер и настройки таргетинга. Затем добавьте HTML, CSS и JavaScript, чтобы создать адаптивные объявления, которые будут хорошо выглядеть на экранах любых размеров. Вам не нужно ничего отрисовывать. Менеджер рекламы автоматически применяет подходящий нативный стиль для целевой страницы. Нативные стили реализуются так же, как и баннеры, с помощью тега GAMBannerView. Их можно использовать с объявлениями фиксированного размера, определенного заранее, или адаптивного размера, определяемого во время выполнения.

Требования

  • Google Mobile Ads SDK версии 7.14.0 или более поздней;

В этом руководстве предполагается, что у вас есть базовые знания о Google Mobile Ads SDK. Если вы ещё не сделали этого, ознакомьтесь с нашим руководством по началу работы.

Фиксированный размер

Нативные стили с фиксированным размером позволяют задавать ширину и высоту нативного объявления. Чтобы задать фиксированный размер, выполните следующие действия:

  1. Создайте позицию в интерфейсе Менеджера рекламы и выберите один из стандартных размеров в раскрывающемся меню поля Size.

  2. В Interface Builder задайте ширину и высоту GAMBannerView, соответствующие размеру, выбранному на шаге 1. Список размеров и соответствующих им констант GADAdSize можно найти в разделе Размер баннера.

Чтобы реализовать нативные стили с фиксированным размером, достаточно выполнить инструкции из раздела Первый запрос баннера. При этом вы получите гибкость и контроль над HTML, CSS и JavaScript, чтобы придать баннеру нативный вид, который будет естественно смотреться в вашем приложении.

Гибкий размер

В некоторых случаях фиксированный размер может быть нецелесообразен. Например, вы можете захотеть, чтобы ширина объявления соответствовала ширине контента приложения, а высота динамически подстраивалась под контент объявления. В этом случае в интерфейсе Менеджера рекламы можно указать размер объявления Fluid, который будет определяться во время выполнения в приложении. В SDK для этого предусмотрена специальная константа GADAdSize – kGADAdSizeFluid. Высота адаптивного объявления определяется динамически на основе ширины, заданной издателем, что позволяет GAMBannerView регулировать высоту в соответствии с высотой креатива.

Запрос на жидкость

В отличие от других форматов объявлений, размер kGADAdSizeFluid не имеет заданной ширины, поэтому обязательно укажите ширину фрейма баннера в коде или в Interface Builder. Если ширина не указана, SDK по умолчанию задает высоту баннера на основе полной ширины устройства.

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

Реализация для запроса с одним размером и запроса с несколькими размерами очень похожи. Единственное отличие заключается в том, что для запроса с несколькими размерами нужно задать свойство validAdSizes, чтобы указать размеры объявлений, которые действительны для запроса объявления:

Swift

bannerView.validAdSizes = [nsValue(for: AdSizeFluid), nsValue(for: AdSizeBanner)]

Objective-C

_bannerView.validAdSizes = @[ NSValueFromGADAdSize(kGADAdSizeFluid),
                              NSValueFromGADAdSize(kGADAdSizeBanner) ];

Вот как выглядит код для полной реализации:

Swift

var bannerView: AdManagerBannerView!

override func viewDidLoad() {
super.viewDidLoad()
  // Create the GAMBannerView and set its width to a width that makes sense for your
  // app. In this example, the width is set to the width of the UIViewController's
  // root view.
  bannerView = AdManagerBannerView(adSize: AdSizeFluid)
  var frameRect = bannerView.frame
  frameRect.size.width = view.bounds.width
  bannerView.frame = frameRect

  // Uncomment this code for a multisize fluid request.
  // bannerView.validAdSizes = [nsValue(for: AdSizeFluid), nsValue(for: AdSizeBanner)]

  bannerView.adUnitID = "YOUR_AD_UNIT_ID"
  bannerView.rootViewController = self

  // Make the ad request.
  bannerView.load(AdManagerRequest())
}

Objective-C

GAMBannerView *_bannerView;

- (void)viewDidLoad {
  [super viewDidLoad];
  // Create the GAMBannerView and set its width to a width that makes sense for your
  // app. In this example, the width is set to the width of the UIViewController's
  // root view.
  _bannerView = [[GAMBannerView alloc] initWithAdSize:kGADAdSizeFluid];
  CGRect frameRect = _bannerView.frame;
  frameRect.size.width = CGRectGetWidth(self.view.bounds);
  _bannerView.frame = frameRect;

  // Uncomment this code for a multisize fluid request.
  // _bannerView.validAdSizes = @[ NSValueFromGADAdSize(kGADAdSizeFluid),
  //                               NSValueFromGADAdSize(kGADAdSizeBanner) ];

  _bannerView.adUnitID = @"YOUR_AD_UNIT_ID";
  _bannerView.rootViewController = self;

  // Make the ad request.
  [_bannerView loadRequest:[GAMRequest request]];
}

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

Скачать демоверсию API

Протокол GADAdSizeDelegate

Вам может понадобиться узнать высоту баннера до того, как изменится размер объявления. Функция обратного вызова adView:willChangeAdSizeTo: уведомляет делегата до того, как представление баннера изменится на новое значение GADAdSize. Чтобы получать уведомления до того, как размер баннера изменится на новый, ваш класс должен соответствовать протоколу GADAdSizeDelegate.

Ниже приведен пример реализации функции обратного вызова adView:willChangeAdSizeTo:, в котором показано, как получить новые значения ширины и высоты баннера:

Swift

// To be notified before the banner's ad size changes, your view controller class must
// conform to the GADAdSizeDelegate protocol.
bannerView.adSizeDelegate = self

// MARK: - GADAdSizeDelegate

func adView(_ bannerView: BannerView, willChangeAdSizeTo adSize: AdSize) {
  let height = adSize.size.height
  let width = adSize.size.width
}

Objective-C

// To be notified before the banner's ad size changes, your view controller class must
// conform to the GADAdSizeDelegate protocol.
_bannerView.adSizeDelegate = self;

#pragma mark - GADAdSizeDelegate

- (void)adView:(GADBannerView *)bannerView willChangeAdSizeTo:(GADAdSize)adSize {
  CGFloat height = adSize.size.height;
  CGFloat width = adSize.size.width;
}