Рекламные баннеры — это прямоугольные объявления, которые занимают часть макета приложения. Они остаются на экране, пока пользователи взаимодействуют с приложением, либо закреплены вверху или внизу экрана, либо встроены в контент, когда пользователь прокручивает страницу. Рекламные баннеры могут автоматически обновляться через определенный промежуток времени. Для получения дополнительной информации см. Обзор рекламных баннеров .
В этом руководстве показано, как начать работу с привязанными адаптивными баннерными объявлениями , которые повышают эффективность за счет оптимизации размера рекламы для каждого устройства с использованием указанной вами ширины объявления.
Закрепленный адаптивный баннер
Закрепленные адаптивные баннерные объявления — это объявления с фиксированным соотношением сторон, а не обычные объявления с фиксированным размером. Соотношение сторон аналогично отраслевому стандарту 320x50. После указания полной доступной ширины возвращается объявление с оптимальной высотой для этой ширины. Оптимальная высота не меняется между запросами с одного и того же устройства, и окружающие представления не должны перемещаться при обновлении объявления.
Предпосылки
- Заполните руководство по началу работы .
Всегда проводите тестирование с помощью тестовых объявлений
При создании и тестировании приложений убедитесь, что вы используете тестовые объявления, а не живые, производственные объявления. Невыполнение этого требования может привести к блокировке вашего аккаунта.
Самый простой способ загрузить тестовые объявления — использовать наш специальный идентификатор тестового рекламного блока для баннеров iOS:
/21775744923/example/adaptive-banner
Он был специально настроен для возврата тестовых объявлений для каждого запроса, и вы можете свободно использовать его в своих приложениях при кодировании, тестировании и отладке. Просто убедитесь, что вы заменили его на свой собственный идентификатор рекламного блока перед публикацией приложения.
Дополнительную информацию о том, как работают тестовые объявления Mobile Ads SDK, см. в разделе Тестовые объявления .
Создать GAMBannerView
Баннерная реклама отображается в объектах GAMBannerView
, поэтому первым шагом к интеграции баннерной рекламы является включение GAMBannerView
в иерархию представлений. Обычно это делается либо программно, либо через Interface Builder.
Программно
GAMBannerView
также может быть создан напрямую. Следующий пример создает GAMBannerView
:
Быстрый
// Initialize the BannerView.
bannerView = BannerView()
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
Чтобы использовать AdManagerBannerView
, создайте 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
в иерархию представлений, указав значения height
и width
:
var body: some View {
Spacer()
// Request an anchored adaptive banner with a width of 375.
let adSize = currentOrientationAnchoredAdaptiveBanner(width: 375)
BannerViewContainer(adSize)
.frame(width: adSize.size.width, height: adSize.size.height)
}
Objective-C
// Initialize the GADBannerView.
self.bannerView = [[GADBannerView alloc] init];
self.bannerView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:self.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
[self.bannerView.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor],
// Center the banner horizontally in the view
[self.bannerView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor],
]];
Конструктор интерфейсов
Вы можете добавить GAMBannerView
в файл раскадровки или xib. При использовании этого метода обязательно добавляйте ограничения положения только на баннер. Например, при отображении адаптивного баннера в нижней части экрана установите нижнюю часть представления баннера равной верхней части Bottom Layout Guide и установите ограничение centerX
равным centerX
суперпредставления.
Размер рекламного баннера по-прежнему задается программно:
Быстрый
// Request an anchored adaptive banner with a width of 375.
bannerView.adSize = currentOrientationAnchoredAdaptiveBanner(width: 375)
Objective-C
// Request an anchored adaptive banner with a width of 375.
self.bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(375);
Загрузить объявление
После того, как GAMBannerView
установлен и его свойства, такие как adUnitID
, настроены, пора загрузить рекламу. Это делается путем вызова loadRequest:
на объекте GAMRequest
:
Быстрый
bannerView.load(AdManagerRequest())
SwiftUI
banner.adUnitID = "ca-app-pub-3940256099942544/2435281174"
banner.load(Request())
Objective-C
[self.bannerView loadRequest:[GAMRequest request]];
Объекты GAMRequest
представляют собой один рекламный запрос и содержат свойства для таких вещей, как информация о таргетинге.
Обновить объявление
Если вы настроили обновление рекламного блока, вам не нужно запрашивать другое объявление, если объявление не загружается. Google Mobile Ads SDK учитывает любую частоту обновления, указанную вами в пользовательском интерфейсе Менеджера объявлений. Если вы не включили обновление, отправьте новый запрос. Для получения дополнительных сведений об обновлении рекламного блока, например, о настройке частоты обновления, см. раздел Частота обновления для объявлений в мобильных приложениях .
Рекламные мероприятия
Используя GADBannerViewDelegate
, вы можете прослушивать события жизненного цикла, например, когда реклама закрывается или пользователь покидает приложение.
Зарегистрируйтесь на баннерные мероприятия
Чтобы зарегистрироваться для событий баннерной рекламы, установите свойство delegate
в GAMBannerView
на объект, который реализует протокол GADBannerViewDelegate
. Обычно класс, который реализует баннерную рекламу, также действует как класс делегата, и в этом случае свойство delegate
может быть установлено на self
.
Быстрый
bannerView.delegate = self
SwiftUI
banner.delegate = context.coordinator
Objective-C
self.bannerView.delegate = self;
Реализуйте баннерные мероприятия
Каждый из методов в GADBannerViewDelegate
помечен как необязательный, поэтому вам нужно реализовать только те методы, которые вы хотите. Этот пример реализует каждый метод и выводит сообщение на консоль:
Быстрый
func bannerViewDidReceiveAd(_ bannerView: BannerView) {
print(#function)
}
func bannerView(_ bannerView: BannerView, didFailToReceiveAdWithError error: Error) {
print(#function + ": " + error.localizedDescription)
}
func bannerViewDidRecordClick(_ bannerView: BannerView) {
print(#function)
}
func bannerViewDidRecordImpression(_ bannerView: BannerView) {
print(#function)
}
func bannerViewWillPresentScreen(_ bannerView: BannerView) {
print(#function)
}
func bannerViewWillDismissScreen(_ bannerView: BannerView) {
print(#function)
}
func bannerViewDidDismissScreen(_ bannerView: BannerView) {
print(#function)
}
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");
}
Реализацию методов делегата баннера в демонстрационном приложении API iOS см. в примере Ad Delegate.
Варианты использования
Вот несколько примеров использования этих методов рекламных событий.
Добавьте баннер в иерархию представлений после получения объявления.
Вы можете захотеть отложить добавление GAMBannerView
в иерархию представлений до тех пор, пока не будет получено объявление. Вы можете сделать это, прослушивая событие bannerViewDidReceiveAd:
Быстрый
func bannerViewDidReceiveAd(_ bannerView: BannerView) {
// Add banner to view and add constraints.
addBannerViewToView(bannerView)
}
Objective-C
- (void)bannerViewDidReceiveAd:(GAMBannerView *)bannerView {
// Add bannerView to view and add constraints as above.
[self addBannerViewToView:self.bannerView];
}
Анимировать рекламный баннер
Вы также можете использовать событие bannerViewDidReceiveAd:
для анимации баннерной рекламы после ее возврата, как показано в следующем примере:
Быстрый
func bannerViewDidReceiveAd(_ bannerView: BannerView) {
bannerView.alpha = 0
UIView.animate(withDuration: 1, animations: {
bannerView.alpha = 1
})
}
Objective-C
- (void)bannerViewDidReceiveAd:(GAMBannerView *)bannerView {
bannerView.alpha = 0;
[UIView animateWithDuration:1.0 animations:^{
bannerView.alpha = 1;
}];
}
Приостановите и возобновите работу приложения
Протокол GADBannerViewDelegate
имеет методы для уведомления вас о событиях, например, когда щелчок вызывает показ или закрытие наложения. Если вы хотите отслеживать, были ли эти события вызваны рекламой, зарегистрируйтесь для этих методов GADBannerViewDelegate
.
Чтобы перехватывать все типы наложений или вызовов внешнего браузера, а не только те, которые происходят из-за кликов по рекламе, вашему приложению лучше прослушивать эквивалентные методы в UIViewController
или UIApplication
. Ниже приведена таблица, показывающая эквивалентные методы iOS, которые вызываются одновременно с методами GADBannerViewDelegate
:
Метод GADBannerViewDelegate | iOS-метод |
---|---|
bannerViewWillPresentScreen: | viewWillDisappear: |
bannerViewWillDismissScreen: | viewWillAppear: |
bannerViewDidDismissScreen: | viewDidAppear: |
Ручной подсчет показов
Вы можете вручную отправлять пинги показов в Ad Manager, если у вас есть особые условия, когда должен регистрироваться показ. Это можно сделать, сначала включив GAMBannerView
для ручных показов перед загрузкой рекламы:
Быстрый
bannerView.enableManualImpressions = true
Objective-C
self.bannerView.enableManualImpressions = YES;
Когда вы определите, что объявление было успешно возвращено и находится на экране, вы можете вручную запустить показ:
Быстрый
bannerView.recordImpression()
Objective-C
[self.bannerView recordImpression];
События приложения
События приложения позволяют создавать объявления, которые могут отправлять сообщения в код приложения. Затем приложение может выполнять действия на основе этих сообщений.
Вы можете прослушивать события приложения, специфичные для Ad Manager, используя GADAppEventDelegate
. Эти события могут произойти в любое время жизненного цикла объявления, даже до вызова bannerViewDidReceiveAd:
объекта GADBannerViewDelegate
.
Быстрый
// Implement your app event within this method. The delegate will be
// notified when the SDK receives an app event message from the ad.
// Called when the banner receives an app event.
optional public func bannerView(_ banner: AdManagerBannerView,
didReceiveAppEvent name: String, withInfo info: String?)
Objective-C
// Implement your app event within this method. The delegate will be
// notified when the SDK receives an app event message from the ad.
@optional
// Called when the banner receives an app event.
- (void)bannerView:(GAMBannerView *)banner
didReceiveAppEvent:(NSString *)name
withInfo:(NSString *)info;
Методы событий вашего приложения могут быть реализованы в контроллере представления:
Быстрый
import GoogleMobileAds
class ViewController: UIViewController, AppEventDelegate {}
Objective-C
@import GoogleMobileAds;
@interface ViewController : UIViewController <GADAppEventDelegate> {}
@end
Не забудьте задать делегата с помощью свойства appEventDelegate
перед выполнением запроса на рекламу.
Быстрый
bannerView.appEventDelegate = self
Objective-C
self.bannerView.appEventDelegate = self;
Вот пример, показывающий, как изменить цвет фона вашего приложения, указав цвет через событие приложения:
Быстрый
func bannerView(_ banner: AdManagerBannerView, didReceiveAppEvent name: String,
withInfo info: String?) {
if name == "color" {
guard let info = info else { return }
switch info {
case "green":
// Set background color to green.
view.backgroundColor = UIColor.green
case "blue":
// Set background color to blue.
view.backgroundColor = UIColor.blue
default:
// Set background color to black.
view.backgroundColor = UIColor.black
}
}
}
Objective-C
- (void)bannerView:(GAMBannerView *)banner
didReceiveAppEvent:(NSString *)name
withInfo:(NSString *)info {
if ([name isEqual:@"color"]) {
if ([info isEqual:@"green"]) {
// Set background color to green.
self.view.backgroundColor = [UIColor greenColor];
} else if ([info isEqual:@"blue"]) {
// Set background color to blue.
self.view.backgroundColor = [UIColor blueColor];
} else {
// Set background color to black.
self.view.backgroundColor = [UIColor blackColor];
}
}
}
А вот соответствующий креатив, который отправляет сообщения о событиях цветового приложения в appEventDelegate
:
<html>
<head>
<script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
// Send a color=green event when ad loads.
admob.events.dispatchAppEvent("color", "green");
document.getElementById("ad").addEventListener("click", function() {
// Send a color=blue event when ad is clicked.
admob.events.dispatchAppEvent("color", "blue");
});
});
</script>
<style>
#ad {
width: 320px;
height: 50px;
top: 0px;
left: 0px;
font-size: 24pt;
font-weight: bold;
position: absolute;
background: black;
color: white;
text-align: center;
}
</style>
</head>
<body>
<div id="ad">Carpe diem!</div>
</body>
</html>
Реализацию событий приложения в демонстрационном приложении API iOS см. в примере «События приложения Ad Manager».
Дополнительные ресурсы
Примеры на GitHub
- Пример прикрепленных адаптивных баннерных объявлений: Swift | SwiftUI | Objective-C
- Демонстрация расширенных функций: Swift | Objective-C
Следующие шаги
Складные баннеры
Сворачиваемые баннерные объявления — это баннерные объявления, которые изначально представлены в виде большего наложения с кнопкой для сворачивания объявления до меньшего размера. Рассмотрите возможность его использования для дальнейшей оптимизации производительности. Подробнее см. в разделе сворачиваемые баннерные объявления .
Встроенные адаптивные баннеры
Встроенные адаптивные баннеры больше и выше по сравнению с закрепленными адаптивными баннерами. Они имеют переменную высоту и могут быть такими же высокими, как экран устройства. Встроенные адаптивные баннеры рекомендуются вместо закрепленных адаптивных баннеров для приложений, которые размещают баннерную рекламу в прокручиваемом контенте. Подробнее см. в разделе встроенные адаптивные баннеры .