Адаптивный баннер

Адаптивный баннер — это баннер, органично вписывающийся в размеры блока, определенные пользователем. В зависимости от способа интеграции адаптивного баннера, для него подбирается оптимальная высота с заданной шириной, либо используются указанные размеры рекламного места.

Примечание.

Про создание рекламного блока для адаптивного баннера можно прочитать в справке Рекламной сети.

  1. Типы адаптивного баннера
  2. Подключение баннерной рекламы
  3. Пример работы с адаптивным баннером

Типы адаптивного баннера

Баннер с заданной шириной

Особенности:

  1. Альтернатива баннерам с размерами 320x50 (при определении высоты баннера сохраняется соотношение сторон 320x50).
  2. Фиксация баннера в верхней или нижней части экрана (настраивается в приложении).
  3. Использование заданной ширины баннера, а не ширины экрана устройства. Это позволяет учитывать особенности дисплея.
  4. Ширина адаптивного баннера задается с помощью метода +stickySizeWithContainerWidth:.

Примеры отображения адаптивного баннера:

Баннер с заданной шириной и высотой

Особенности:

  1. Адаптивный баннер заполняет весь блок, используя заданную ширину и высоту.
  2. Ширина и высота адаптивного баннера задается с помощью метода +flexibleSizeWithCGSize:.

Примеры отображения адаптивного баннера:

Подключение баннерной рекламы

  1. Добавьте импорт:

    import YandexMobileAds
  2. Создайте @property, где будет храниться ссылка на баннер:

    var adView: YMAAdView!
  3. Укажите размер баннера и инициализируйте баннер в приложении.
    Баннер с заданной шириной

    Чтобы задать ширину адаптивного баннера, вызовите метод +stickySizeWithContainerWidth:.

    YMAAdSize adSize = [YMAAdSize stickySizeWithContainerWidth:width];
    YMAAdView *adView = [[YMAAdView alloc] initWithAdUnitID:<AdUnitID> adSize:adSize];
    adView.delegate = self;
    Баннер с заданной шириной и высотой

    Чтобы задать ширину и высоту адаптивного баннера, вызовите метод +flexibleSizeWithCGSize:.

    YMAAdSize adSize = [YMAAdSize flexibleSizeWithCGSize:size];
    YMAAdView *adView = [[YMAAdView alloc] initWithAdUnitID:<AdUnitID> adSize:adSize];
    adView.delegate = self;

    AdUnitId — уникальный идентификатор рекламного места, который выдается в Партнерском интерфейсе и имеет вид: R-M-XXXXXX-Y.

    При этом self должен удовлетворять протоколу YMAAdViewDelegate. В случае если делегат реализует метод -viewControllerForPresentingModalView, ссылки будут открываться во встроенном браузере внутри приложения. Иначе ссылки будут открываться в браузере, установленном на устройстве.

  4. Разместите баннер. Вы можете это сделать, например, с помощью autolayout constraints.

    Пример реализации
    Добавьте баннер в UIView. Затем добавьте autolayout constraints, чтобы баннер отображался в нужном месте.
    [self.view addSubview:self.adView];
     self.adView.translatesAutoresizingMaskIntoConstraints = false;
         UIView *adView = self.adView;
         NSDictionary<NSString *, UIView *> *views =
             NSDictionaryOfVariableBindings(adView);
         NSArray<NSLayoutConstraint *> *horizontal =
            [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[adView]|"
                                                    options:0
                                                    metrics:nil
                                                      views:views];
         NSArray<NSLayoutConstraint *> *vertical =
            [NSLayoutConstraint constraintsWithVisualFormat:@"V:[adView]-|"
                                                    options:0
                                                    metrics:nil
                                                      views:views];
         [self.view addConstraints:horizontal];
         [self.view addConstraints:vertical];
  5. Загрузите баннер. Опционально, с помощью класса YMAAdRequest, можно передать данные для таргетирования.

    func loadAd(with request: YMAAdRequest?)

    Когда баннер загрузится, делегат получит об этом уведомление.

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

Следующий код демонстрирует создание и настройку объекта AdView, регистрацию слушателя, а также загрузку адаптивного баннера:

- (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;
    adView.translatesAutoresizingMaskIntoConstraints = NO;
    NSDictionary<NSString *, UIView *> *views = NSDictionaryOfVariableBindings(adView);
    [self.view addSubview:adView];
    
    NSArray<NSLayoutConstraint *> *horizontal =
       [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[adView]|"
                                               options:0
                                               metrics:nil
                                                 views:views];
    NSArray<NSLayoutConstraint *> *vertical =
       [NSLayoutConstraint constraintsWithVisualFormat:@"V:[adView]-|"
                                               options:0
                                               metrics:nil
                                                 views:views];
    [self.view addConstraints:horizontal];
    [self.view addConstraints:vertical];
}

- (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;
}