Подключение баннерной рекламы
Это архивная версия документации. Актуальная документация по всем платформам находится здесь.
Баннер — настраиваемое объявление, которое занимает часть экрана и реагирует на нажатие.
Типы баннера
Особенности:
- Используется заданная ширина баннера. Высота подбирается автоматически.
- Ширина баннера задается с помощью метода +stickySizeWithContainerWidth:.
- Высота баннера не должна превышать 15% высоты устройства и не должна быть меньше 50 dp.
Примеры отображения баннера:
Особенности:
- Баннер заполняет весь блок, используя заданные максимальные размеры.
- Ширина и высота баннера задается с помощью метода +flexibleSizeWithCGSize:.
- SDK накладывает
NSLayoutConstraint
на высоту баннера.
Примеры отображения баннера:
Подключение баннера
Чтобы подключить баннер:
Добавьте импорт:
import YandexMobileAds
#import <YandexMobileAds/YandexMobileAds.h>
Создайте @property, где будет храниться ссылка на баннер:
var adView: YMAAdView!
@property (nonatomic, strong) YMAAdView *adView;
- Создайте баннер:
Чтобы задать ширину баннера, вызовите метод +stickySizeWithContainerWidth:.
let adSize = YMAAdSize.stickySize(withContainerWidth: width) let adView = YMAAdView(adUnitID: "", adSize: adSize) adView.delegate = self
YMAAdSize adSize = [YMAAdSize stickySizeWithContainerWidth:width]; YMAAdView *adView = [[YMAAdView alloc] initWithAdUnitID:<AdUnitID> adSize:adSize]; adView.delegate = self;
Чтобы задать ширину и высоту баннера, вызовите метод +flexibleSizeWithCGSize:.
let adSize = YMAAdSize.flexibleSize(with: size) let adView = YMAAdView(adUnitID: "", adSize: adSize) adView.delegate = self
YMAAdSize adSize = [YMAAdSize flexibleSizeWithCGSize:size]; YMAAdView *adView = [[YMAAdView alloc] initWithAdUnitID:<AdUnitID> adSize:adSize]; adView.delegate = self;
Ограничение. Требования к размерам баннера при отображении видеорекламыМинимальный размер баннера, в котором поддерживается воспроизведение видео: 300x160 или 160x300.
AdUnitId
— уникальный идентификатор рекламного места, который выдается в Партнерском интерфейсе и имеет вид: R-M-XXXXXX-Y.При этом
self
должен удовлетворять протоколу YMAAdViewDelegate. В случае если делегат реализует метод -viewControllerForPresentingModalView, ссылки будут открываться во встроенном браузере внутри приложения. Иначе ссылки будут открываться в браузере, установленном на устройстве.Чтобы определить причины, по которым реклама работает некорректно, используйте метод -adViewDidFailLoading:error:.
Описание ошибок доступно в разделе YMAAdErrorCode.
Разместите баннер. Вы можете разместить баннер двумя способами:
С помощью
autolayout constraints
.Добавьте баннер вUIView
. Затем добавьтеautolayout constraints
, чтобы баннер отображался в нужном месте.view.addSubview(adView) adView.translatesAutoresizingMaskIntoConstraints = false var adViewConstraints = [ adView.leadingAnchor.constraint(equalTo: adView.superview!.leadingAnchor), adView.trailingAnchor.constraint(equalTo: adView.superview!.trailingAnchor) ] let bottomDistance: CGFloat = 8 if #available(iOS 11.0, *) { adViewConstraints.append( adView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: bottomDistance) ) } else { adViewConstraints.append( adView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: bottomDistance) ) } NSLayoutConstraint.activate(adViewConstraints)
UIView *adView = self.adView; [self.view addSubview:adView]; adView.translatesAutoresizingMaskIntoConstraints = NO; NSMutableArray *adViewConstraints = [NSMutableArray arrayWithArray:@[ [adView.leadingAnchor constraintEqualToAnchor:adView.superview.leadingAnchor], [adView.trailingAnchor constraintEqualToAnchor:adView.superview.trailingAnchor] ]]; int bottomDistance = 8; if (@available(iOS 11.0, *)) { UILayoutGuide *guide = self.view.safeAreaLayoutGuide; [adViewConstraints addObject:[adView.bottomAnchor constraintEqualToAnchor:guide.bottomAnchor constant:bottomDistance]]; } else { [adViewConstraints addObject:[adView.bottomAnchor constraintEqualToAnchor:adView.superview.bottomAnchor constant:bottomDistance]]; } [NSLayoutConstraint activateConstraints:adViewConstraints];
- С помощью следующих методов:
В обоих случаях баннеры центрируются по горизонтали.
Загрузите баннер. Опционально, с помощью класса YMAAdRequest, можно передать данные для таргетирования.
Когда баннер загрузится, делегат получит об этом уведомление.
Опционально можно включить логирование с помощью метода +enableLogging. Если показ рекламы не был засчитан, в консоли появится сообщение.
Опционально можно настроить получение уведомлений об окончании проигрывания видео в баннерной рекламе.
Пример реализации// Получение экземпляра YMAVideoController с помощью videoController. let videoController = adView.videoController // Установка делегата, который реализует протокол YMAVideoDelegate. videoController.delegate = self // Реализация метода протокола YMAVideoDelegate. // MARK: - YMAVideoDelegate func videoControllerDidFinishPlayingVideo(_ videoController: YMAVideoController) { print("Video complete"); }
// Получение экземпляра YMAVideoController с помощью videoController. YMAVideoController *videoController = self.adView.videoController; // Установка делегата, который реализует протокол YMAVideoDelegate. videoController.delegate = self; // Реализация метода протокола YMAVideoDelegate. #pragma mark - YMAVideoDelegate - (void)videoControllerDidFinishPlayingVideo:(YMAVideoController *)videoController { NSLog(@"%@", @"Video complete"); }
Если реклама подключена данным образом, после запуска приложения появится баннер.
- demo-banner-yandex
Пример работы с баннером
Следующий код демонстрирует создание и настройку объекта AdView, регистрацию слушателя, а также загрузку баннера.
override func viewDidLoad() {
super.viewDidLoad()
// Задание ширины рекламы
let adSize = YMAAdSize.stickySize(withContainerWidth: containerWidth())
// Создание экземпляра adView
adView = YMAAdView(adUnitID: "R-M-XXXXX-YY", adSize: adSize)
adView.delegate = self
addAdView()
// Загрузка рекламы
adView.loadAd()
}
private func addAdView() {
view.addSubview(adView)
adView.translatesAutoresizingMaskIntoConstraints = false
var adViewConstraints = [
adView.leadingAnchor.constraint(equalTo: adView.superview!.leadingAnchor),
adView.trailingAnchor.constraint(equalTo: adView.superview!.trailingAnchor)
]
let bottomDistance: CGFloat = 8
if #available(iOS 11.0, *) {
adViewConstraints.append(
adView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: bottomDistance)
)
} else {
adViewConstraints.append(
adView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: bottomDistance)
)
}
NSLayoutConstraint.activate(adViewConstraints)
}
private func containerWidth() -> CGFloat {
var containerWidth = view.frame.width
if #available(iOS 11, *) {
containerWidth = view.frame.inset(by: view.safeAreaInsets).width
}
return containerWidth
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Задание ширины рекламы
YMAAdSize *adSize =
[YMAAdSize stickySizeWithContainerWidth:[self containerWidth]];
// Создание экземпляра adView
self.adView = [[YMAAdView alloc] initWithAdUnitID:@"R-M-XXXXX-YY" adSize:adSize];
self.adView.delegate = self;
[self addAdView];
// Загрузка рекламы
[self.adView loadAd];
}
- (void)addAdView
{
UIView *adView = self.adView;
[self.view addSubview:adView];
adView.translatesAutoresizingMaskIntoConstraints = NO;
NSMutableArray *adViewConstraints = [NSMutableArray arrayWithArray:@[
[adView.leadingAnchor constraintEqualToAnchor:adView.superview.leadingAnchor],
[adView.trailingAnchor constraintEqualToAnchor:adView.superview.trailingAnchor]
]];
int bottomDistance = 8;
if (@available(iOS 11.0, *)) {
UILayoutGuide *guide = self.view.safeAreaLayoutGuide;
[adViewConstraints addObject:[adView.bottomAnchor constraintEqualToAnchor:guide.bottomAnchor
constant:bottomDistance]];
} else {
[adViewConstraints addObject:[adView.bottomAnchor constraintEqualToAnchor:adView.superview.bottomAnchor
constant:bottomDistance]];
}
[NSLayoutConstraint activateConstraints:adViewConstraints];
}
- (CGFloat)containerWidth
{
CGFloat containerWidth = self.view.frame.size.width;
if (@available(iOS 11.0, *)) {
containerWidth =
UIEdgeInsetsInsetRect(self.view.frame, self.view.safeAreaInsets).size.width;
}
return containerWidth;
}