Как настроить баннеры

Баннеры – это прямоугольные объявления, которые размещаются на определенном месте в макете приложения. Фиксированные адаптивные баннеры всегда видны на экране, закреплены в его верхней или нижней части и имеют максимальную высоту 20 % от размера экрана (не более 150 пикселей). Чтобы оптимизировать размер объявлений для каждого устройства, используйте адаптивные баннеры.

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

Требования

Прежде чем продолжить, настройте Google Mobile Ads SDK.

Всегда используйте тестовые объявления

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

Проще всего загрузить тестовые объявления, используя идентификатор тестового рекламного блока для баннеров iOS:

ca-app-pub-3940256099942544/2435281174

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

Подробнее о том, как работают тестовые объявления Google Mobile Ads SDK, читайте в статье Тестовые объявления.

Создайте объект GADBannerView

Баннеры показываются в объектах GADBannerView, поэтому сначала нужно добавить GADBannerView в иерархию View. Обычно это делается программно или с помощью Interface Builder.

Программные средства

Экземпляр GADBannerView также можно создать напрямую. В следующем примере создается объект GADBannerView:

Swift

// Initialize the banner view.
bannerView = BannerView()
bannerView.delegate = self

bannerView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(bannerView)

// This example doesn't give width or height constraints, as the ad size gives the banner an
// intrinsic content size to size the view.
NSLayoutConstraint.activate([
  // Align the banner's bottom edge with the safe area's bottom edge
  bannerView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
  // Center the banner horizontally in the view
  bannerView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
])

SwiftUI

Чтобы использовать BannerView, создайте UIViewRepresentable:

private struct BannerViewContainer: UIViewRepresentable {
  typealias UIViewType = BannerView
  let adSize: AdSize

  init(_ adSize: AdSize) {
    self.adSize = adSize
  }

  func makeUIView(context: Context) -> BannerView {
    let banner = BannerView(adSize: adSize)
    banner.adUnitID = "ca-app-pub-3940256099942544/2435281174"
    banner.load(Request())
    banner.delegate = context.coordinator
    return banner
  }

  func updateUIView(_ uiView: BannerView, context: Context) {}

  func makeCoordinator() -> BannerCoordinator {
    return BannerCoordinator(self)
  }

Добавьте UIViewRepresentable в иерархию View, указав значения height и width:

var body: some View {
  Spacer()
  // Request an anchored adaptive banner with a width of 375.
  let adSize = largeAnchoredAdaptiveBanner(width: 375)
  BannerViewContainer(adSize)
    .frame(width: adSize.size.width, height: adSize.size.height)
}

Objective-C

// Initialize the banner view.
GADBannerView *bannerView = [[GADBannerView alloc] init];
bannerView.delegate = self;
UIView *view = self.view;

bannerView.translatesAutoresizingMaskIntoConstraints = NO;
[view addSubview:bannerView];

// This example doesn't give width or height constraints, as the ad size gives the banner an
// intrinsic content size to size the view.
[NSLayoutConstraint activateConstraints:@[
  // Align the banner's bottom edge with the safe area's bottom edge
  [bannerView.bottomAnchor
      constraintEqualToAnchor:view.safeAreaLayoutGuide.bottomAnchor],
  // Center the banner horizontally in the view
  [bannerView.centerXAnchor constraintEqualToAnchor:view.centerXAnchor],
]];

self.bannerView = bannerView;

Interface Builder

Вы можете добавить GADBannerView в раскадровку или файл XIB. При использовании этого метода обязательно добавьте ограничения по позиции только для баннера. Например, если адаптивный баннер показывается в нижней части экрана, нижний край баннера должен совпадать с верхним краем Bottom Layout Guide, а ограничение centerX должно быть равно centerX суперпредставления.

Как задать размер объявления

Большие адаптивные баннеры – это формат, предназначенный для макетов без прокрутки. По сравнению со стандартными фиксированными адаптивными баннерами у этих баннеров больше максимальная высота (до 20 % от высоты экрана, от 50 до 150 точек). Это увеличенное пространство оптимизировано для видеоконтента.

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

Swift

// Request a large anchored adaptive banner with a width of 375.
bannerView.adSize = largeAnchoredAdaptiveBanner(width: 375)

Objective-C

// Request a large anchored adaptive banner with a width of 375.
self.bannerView.adSize = GADLargeAnchoredAdaptiveBannerAdSizeWithWidth(375);

Задайте размер объявления, который не превышает размер экрана устройства. Чтобы определить максимальный размер экрана на устройствах iOS 26 и более поздних версий, используйте свойство UIWindowScene.effectiveGeometry.coordinateSpace. На устройствах с iOS 18 и более ранними версиями используйте свойство UIWindowScene.coordinateSpace. Подробнее о требованиях к размерам запросов объявлений…

Загрузка объявления

После того как вы добавите объект GADBannerView и настроите его свойства, например adUnitID, можно загружать объявление. Для этого вызовите метод loadRequest: для объекта GADRequest:

Swift

func loadBannerAd(bannerView: BannerView) {
  // Request a large anchored adaptive banner with a width of 375.
  bannerView.adSize = largeAnchoredAdaptiveBanner(width: 375)
  bannerView.load(Request())
}

SwiftUI

banner.adUnitID = "ca-app-pub-3940256099942544/2435281174"
banner.load(Request())

Objective-C

// Request a large anchored adaptive banner with a width of 375.
self.bannerView.adSize = GADLargeAnchoredAdaptiveBannerAdSizeWithWidth(375);

[self.bannerView loadRequest:[GADRequest request]];

Объекты GADRequest представляют собой отдельные запросы объявлений и содержат свойства, например информацию о таргетинге.

Как обновить объявление

Если вы настроили обновление рекламного блока, то вам не нужно запрашивать другое объявление, когда не удается загрузить текущее. Google Mobile Ads SDK учитывает частоту обновления, заданную в интерфейсе AdMob. Если вы не включили обновление, отправьте новый запрос. Подробнее об автоматическом обновлении рекламных блоков, в том числе о настройке частоты обновления, читайте в Справочном центре.

Обработка изменений ориентации

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

Swift

override func viewWillTransition(
  to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator
) {
  coordinator.animate(alongsideTransition: { _ in
    // Load a new ad for the new orientation.
  })
}

Objective-C

- (void)viewWillTransitionToSize:(CGSize)size
       withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
  [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
    // Load a new ad for the new orientation.
  } completion:nil];
}

Рекламные события

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

Регистрация событий баннера

Чтобы зарегистрироваться для получения событий баннера, задайте для свойства delegate в GADBannerView объект, который реализует протокол GADBannerViewDelegate. Как правило, класс, реализующий баннеры, также выступает в качестве класса делегата. В этом случае свойству delegate можно присвоить значение self.

Swift

bannerView.delegate = self

SwiftUI

banner.delegate = context.coordinator

Objective-C

bannerView.delegate = self;

Как реализовать события баннеров

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

Swift

func bannerViewDidReceiveAd(_ bannerView: BannerView) {
  print("Banner ad loaded.")
}

func bannerView(_ bannerView: BannerView, didFailToReceiveAdWithError error: Error) {
  print("Banner ad failed to load: \(error.localizedDescription)")
}

func bannerViewDidRecordImpression(_ bannerView: BannerView) {
  print("Banner ad recorded an impression.")
}

func bannerViewDidRecordClick(_ bannerView: BannerView) {
  print("Banner ad recorded a click.")
}

func bannerViewWillPresentScreen(_ bannerView: BannerView) {
  print("Banner ad will present screen.")
}

func bannerViewWillDismissScreen(_ bannerView: BannerView) {
  print("Banner ad will dismiss screen.")
}

func bannerViewDidDismissScreen(_ bannerView: BannerView) {
  print("Banner ad did dismiss screen.")
}

Objective-C

- (void)bannerViewDidReceiveAd:(GADBannerView *)bannerView {
  NSLog(@"bannerViewDidReceiveAd");
}

- (void)bannerView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(NSError *)error {
  NSLog(@"bannerView:didFailToReceiveAdWithError: %@", error.localizedDescription);
}

- (void)bannerViewDidRecordImpression:(GADBannerView *)bannerView {
  NSLog(@"bannerViewDidRecordImpression");
}

- (void)bannerViewWillPresentScreen:(GADBannerView *)bannerView {
  NSLog(@"bannerViewWillPresentScreen");
}

- (void)bannerViewWillDismissScreen:(GADBannerView *)bannerView {
  NSLog(@"bannerViewWillDismissScreen");
}

- (void)bannerViewDidDismissScreen:(GADBannerView *)bannerView {
  NSLog(@"bannerViewDidDismissScreen");
}

Пример реализации методов делегата баннера в демонстрационном приложении iOS API можно найти в разделе Ad Delegate.

Swift Objective-C

Примеры использования

Ниже приведены примеры использования этих методов.

Добавление баннера в иерархию View после получения объявления

Вы можете отложить добавление GADBannerView в иерархию View до получения объявления. Для этого нужно прослушивать событие bannerViewDidReceiveAd::

Swift

func bannerViewDidReceiveAd(_ bannerView: BannerView) {
  // Add banner to view and add constraints.
  addBannerViewToView(bannerView)
}

Objective-C

- (void)bannerViewDidReceiveAd:(GADBannerView *)bannerView {
  // Add bannerView to view and add constraints as above.
  [self addBannerViewToView:self.bannerView];
}

Как анимировать баннер

Вы также можете использовать событие bannerViewDidReceiveAd:, чтобы анимировать баннер после его возврата, как показано в примере ниже.

Swift

func bannerViewDidReceiveAd(_ bannerView: BannerView) {
  bannerView.alpha = 0
  UIView.animate(withDuration: 1, animations: {
    bannerView.alpha = 1
  })
}

Objective-C

- (void)bannerViewDidReceiveAd:(GADBannerView *)bannerView {
  bannerView.alpha = 0;
  [UIView animateWithDuration:1.0 animations:^{
    bannerView.alpha = 1;
  }];
}

Как приостановить и возобновить работу приложения

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

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

Метод GADBannerViewDelegate Способ для iOS
bannerViewWillPresentScreen: viewWillDisappear: UIViewController
bannerViewWillDismissScreen: viewWillAppear: UIViewController
bannerViewDidDismissScreen: viewDidAppear: UIViewController

Дополнительные ресурсы

Примеры на GitHub

  • Демонстрация продвинутых функций: Swift | Objective-C

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

Сворачиваемые баннеры

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

Встроенные адаптивные баннеры

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

Другие темы