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

Баннеры – это прямоугольные объявления, которые размещаются на определенном месте в макете приложения. Фиксированные адаптивные баннеры всегда видны на экране и закреплены в его верхней или нижней части. Их максимальная высота составляет 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. При использовании этого метода добавляйте ограничения на позицию только для баннера. Например, если вы показываете адаптивный баннер в нижней части экрана, задайте нижнюю границу представления баннера равной верхней границе нижней направляющей макета, а ограничение 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

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

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

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

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

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

Другие темы