В этом руководстве рассказывается, как загрузить фиксированный адаптивный баннер в приложение для 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.
Примеры использования
Ниже приведены примеры использования этих методов.
Добавление баннера в иерархию 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 | SwiftUI | Objective-C
- Демонстрация продвинутых функций: Swift | Objective-C
Дальнейшие действия
Сворачиваемые баннеры
Сворачиваемые баннеры – это баннеры, которые сначала показываются в виде большого оверлея, но их можно свернуть до стандартного размера. Попробуйте использовать его, чтобы повысить эффективность. Подробнее о сворачиваемых баннерах…
Встроенные адаптивные баннеры
Встроенные адаптивные баннеры больше и выше фиксированных. Их высота может быть разной, вплоть до высоты экрана устройства. Встроенные адаптивные баннеры рекомендуется использовать вместо фиксированных адаптивных баннеров в приложениях, где баннеры размещаются в прокручиваемом контенте. Подробнее о встроенных адаптивных баннерах…