В этом руководстве рассказывается, как загрузить адаптивный фиксированный баннер в приложение для iOS.
Требования
Прежде чем продолжить, настройте Google Mobile Ads SDK.
Всегда тестируйте с помощью тестовых объявлений
При создании и тестировании приложений используйте тестовые объявления, а не реальные. В противном случае ваш аккаунт может быть заблокирован.
Самый простой способ загрузить тестовые объявления – использовать специальный идентификатор тестового рекламного блока для баннеров iOS:
ca-app-pub-3940256099942544/2435281174
Он специально настроен так, чтобы возвращать тестовые объявления для каждого запроса, и вы можете использовать его в своих приложениях при написании кода, тестировании и отладке. Не забудьте заменить его на идентификатор своего рекламного блока перед публикацией приложения.
Подробнее о том, как работают тестовые объявления Google Mobile Ads SDK, можно узнать в статье Test Ads.
Как создать 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);
Как загрузить объявление
После того как тег 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
Дальнейшие действия
Сворачиваемые баннеры
Сворачиваемые баннеры сначала показываются в виде большого оверлея, который пользователь может свернуть до стандартного размера. Используйте его, чтобы повысить эффективность рекламы. Подробнее о сворачиваемых баннерах…
Встроенные адаптивные баннеры
Встроенные адаптивные баннеры больше и выше, чем фиксированные. Они имеют переменную высоту и могут занимать весь экран устройства. Встроенные адаптивные баннеры рекомендуются вместо фиксированных адаптивных баннеров для приложений, в которых баннеры размещаются в контенте с прокруткой. Подробнее о встроенных адаптивных баннерах…