Рекламные форматы iOS


Баннеры

Инициализация

Для показа баннеров адаптивного размера или форматов 320x50, 300x250, 728x90 в своем приложении необходимо создать экземпляр класса MTRGAdView.

MTRGAdView - визуальный компонент, наследник UIView, который должен быть добавлен на экран приложения.
Для создания экземпляра MTRGAdView необходимо указать ваш slotId. Устанавливать размер (frame.size) баннера вручную не нужно.
@interface YourViewController : UIViewController
@end
 
@implementation YourViewController
{
  MTRGAdView *_adView;
}
 
- (void)initAd
{
    // Включение режима отладки
    // [MTRGAdView setDebugMode:YES];
     
    // Создаем экземпляр MTRGAdView
    _adView = [MTRGAdView adViewWithSlotId:YOUR_SLOT_ID];
  
    //  Формат 300x250
    // _adView.adSize = MTRGAdSizeType300x250;
}
По умолчанию устанавливается формат MTRGAdSizeTypeAdaptive. При этом баннер автоматически растягивается по ширине экрана с сохранением пропорций, а высота будет не менее 50 пикселей, но не более 15% от высоты экрана.

Есть возможность переустановить свойство adSize. В этом случае SDK перестанет отслеживать изменения ориентации устройства и менять размеры адаптивного баннера. Тогда при использовании баннеров адаптивного размера необходимо самостоятельно отслеживать изменения:
- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    _adView.adSize = [MTRGAdSize adSizeForCurrentOrientation];
}
Если метод load() уже был вызван, то сменить формат на 300x250 уже нельзя (также как и установить другой формат если до этого был 300x250).

MTRGAdSize

MTRGAdSize - класс, который позволяет задать размер для MTRGAdView. Доступны следующие размеры: MTRGAdSizeType320x50, MTRGAdSizeType300x250, MTRGAdSizeType728x90, MTRGAdSizeTypeAdaptive.
+ (instancetype)adSize320x50;
+ (instancetype)adSize300x250;
+ (instancetype)adSize728x90;
+ (instancetype)adSizeForCurrentOrientation; // Адаптивный размер
+ (instancetype)adSizeForCurrentOrientationForWidth:(CGFloat)width; // Адаптивный размер с ограничением максимальной ширины

Загрузка и показ рекламных объявлений

Созданный и настроенный экземпляр MTRGAdView необходимо добавить на экран приложения. Для обработки кликов необходимо установить созданному экземпляру MTRGAdView текущий ViewController. Для получения уведомлений (таких как успешная загрузка данных или ошибка загрузки, клик по рекламному объявлению) необходимо установить созданному экземпляру MTRGAdView делегат, реализующий протокол MTRGAdViewDelegate, после чего можно запустить загрузку данных. После успешной загрузки данных можно запустить показ рекламных объявлений.
@interface YourViewController : UIViewController <MTRGAdViewDelegate>
@end
 
@implementation YourViewController
{
  MTRGAdView *_adView;
}
 
- (void)initAd
{
    // Создаем экземпляр MTRGAdView
    _adView = [MTRGAdView adViewWithSlotId:YOUR_SLOT_ID];
     
    // Устанавливаем делегат
    _adView.delegate = self;
  
    // Устанавливаем контроллер
    _adView.viewController = self;
 
    // Добавляем на экран
    [self.view addSubview:_adView];
     
    // Запускаем загрузку данных
    [_adView load];
}
  
- (void)onLoadWithAdView:(MTRGAdView *)adView
{
}
 
- (void)onNoAdWithReason:(NSString *)reason adView:(MTRGAdView *)adView
{
}
 
- (void)onAdShowWithAdView:(MTRGAdView *)adView
{
}
 
- (void)onAdClickWithAdView:(MTRGAdView *)adView
{
}
 
- (void)onShowModalWithAdView:(MTRGAdView *)adView
{
}
  
- (void)onDismissModalWithAdView:(MTRGAdView *)adView
{
}
  
- (void)onLeaveApplicationWithAdView:(MTRGAdView *)adView
{
}

Ротация

Рекламные объявления ротируются каждые 60 секунд. Вы можете отключить автоматическую ротацию объявлений при инициализации экземпляра MTRGAdView, указав дополнительный параметр shouldRefreshAd. Ротируются все баннеры кроме формата 300х250.
// Выключение автоматической ротации баннеров
_adView = [MTRGAdView adViewWithSlotId:YOUR_SLOT_ID shouldRefreshAd:NO];
Баннер 320x50

Полноэкранная реклама

myTarget SDK предоставляет возможность показывать полноэкранную рекламу в своем приложении.

Инициализация

Для показа полноэкранных рекламных объявлений в своем приложении необходимо создать экземпляр класса MTRGInterstitialAd. Для создания экземпляра необходимо указать ваш slotId.
@interface YourViewController : UIViewController
@end
 
@implementation YourViewController
{
  MTRGInterstitialAd *_ad;
}
 
- (void)initAd
{
    // Включение режима отладки
    // [MTRGInterstitialAd setDebugMode:YES];
     
    // Создаем экземпляр MTRGInterstitialAd
    _ad = [MTRGInterstitialAd interstitialAdWithSlotId:YOUR_SLOT_ID];
}

Загрузка рекламных объявлений

Для получения уведомлений (таких как успешная загрузка данных или ошибка загрузки, клик по рекламному объявлению) необходимо установить созданному экземпляру MTRGInterstitialAd делегат, реализующий протокол MTRGInterstitialAdDelegate, после чего можно запустить загрузку данных.
@interface YourViewController : UIViewController <MTRGInterstitialAdDelegate>
@end
 
@implementation YourViewController
{
  MTRGInterstitialAd *_ad;
}
 
- (void)initAd
{
    // Создаем экземпляр MTRGInterstitialAd
    _ad = [MTRGInterstitialAd interstitialAdWithSlotId:YOUR_SLOT_ID];
     
    // Устанавливаем делегат
    _ad.delegate = self;
     
    // Запускаем загрузку данных
    [_ad load];
}
  
- (void)onLoadWithInterstitialAd:(MTRGInterstitialAd *)interstitialAd
{
}
  
- (void)onNoAdWithReason:(NSString *)reason interstitialAd:(MTRGInterstitialAd *)interstitialAd
{
}
  
- (void)onDisplayWithInterstitialAd:(MTRGInterstitialAd *)interstitialAd
{
}
 
- (void)onClickWithInterstitialAd:(MTRGInterstitialAd *)interstitialAd
{
}
 
- (void)onCloseWithInterstitialAd:(MTRGInterstitialAd *)interstitialAd
{
}
 
- (void)onLeaveApplicationWithInterstitialAd:(MTRGInterstitialAd *)interstitialAd
{
}

Показ рекламных объявлений

После успешной загрузки данных вы можете запустить показ полноэкранной рекламы.
- (void)onLoadWithInterstitialAd:(MTRGInterstitialAd *)interstitialAd
{
    [_ad showWithController:self];
}
Пример полноэкранного баннера

Полноэкранная реклама с вознаграждением (Rewarded видео)

myTarget SDK предоставляет возможность показывать полноэкранную рекламу с вознаграждением в своем приложении.

Инициализация

Для показа полноэкранных рекламных объявлений в своем приложении необходимо создать экземпляр класса MTRGRewardedAd. Для создания экземпляра необходимо указать ваш slotId.

@interface YourViewController : UIViewController
@end
 
@implementation YourViewController
{
  MTRGRewardedAd *_ad;
}
 
- (void)initAd
{
    // Включение режима отладки
    // [MTRGRewardedAd setDebugMode:YES];
     
    // Создаем экземпляр MTRGRewardedAd
    _ad = [MTRGRewardedAd rewardedAdWithSlotId:YOUR_SLOT_ID];
}

Загрузка рекламных объявлений

Для получения уведомлений (таких как успешная загрузка данных или ошибка загрузки, получение награды, клик по рекламному объявлению и т.д.) необходимо установить созданному экземпляру MTRGRewardedAd делегат, реализующий протокол MTRGRewardedAdDelegate, после чего можно запустить загрузку данных.
@interface YourViewController : UIViewController <MTRGRewardedAdDelegate>
@end
 
@implementation YourViewController
{
  MTRGRewardedAd *_ad;
}
 
- (void)initAd
{
    // Создаем экземпляр MTRGRewardedAd
    _ad = [MTRGRewardedAd rewardedAdWithSlotId:YOUR_SLOT_ID];
     
    // Устанавливаем делегат
    _ad.delegate = self;
     
    // Запускаем загрузку данных
    [_ad load];
}
  
- (void)onLoadWithRewardedAd:(MTRGRewardedAd *)rewardedAd
{
}
 
- (void)onNoAdWithReason:(NSString *)reason rewardedAd:(MTRGRewardedAd *)rewardedAd
{
}
 
- (void)onReward:(MTRGReward *)reward rewardedAd:(MTRGRewardedAd *)rewardedAd
{
}
 
- (void)onClickWithRewardedAd:(MTRGRewardedAd *)rewardedAd
{
}
 
- (void)onCloseWithRewardedAd:(MTRGRewardedAd *)rewardedAd
{
}
 
- (void)onDisplayWithRewardedAd:(MTRGRewardedAd *)rewardedAd
{
}
 
- (void)onLeaveApplicationWithRewardedAd:(MTRGRewardedAd *)rewardedAd
{
}

Показ рекламных объявлений

После успешной загрузки данных вы можете запустить показ полноэкранной рекламы
- (void)onLoadWithRewardedAd:(MTRGRewardedAd *)rewardedAd
{
    [_ad showWithController:self];
}

MTRGReward

При получении награды за просмотр полноэкранной рекламы в метод onReward:rewardedAd: делегата передаётся объект MTRGReward, содержащий поле type
@property(nonatomic, readonly) NSString *type;

Нативная реклама

myTarget SDK предоставляет возможность показывать рекламу в своем приложении, используя собственные визуальные компоненты. SDK загружает данные и предоставляет приложению модель рекламного объявления с определенными свойствами для заполнения визуального компонента, а также методы для подсчета показов и обработки кликов. SDK также предоставляет готовый настраиваемый визуальный компонент, который вы можете использовать в вашем приложении, вместо создания собственных.

Инициализация

Для показа нативных рекламных объявлений в вашем приложении необходимо создать экземпляр класса MTRGNativeAd. Для создания экземпляра MTRGNativeAd необходимо указать ваш slotId.

@interface YourViewController : UIViewController
@end
 
@implementation YourViewController
{
  MTRGNativeAd *_ad;
}
 
- (void)initAd
{
    // Включение режима отладки
    // [MTRGNativeAd setDebugMode:YES];
     
    // Создаем экземпляр MTRGNativeAd
    _ad = [MTRGNativeAd nativeAdWithSlotId:YOUR_SLOT_ID];
}

Загрузка рекламных объявлений

Для получения уведомлений (таких как успешная загрузка данных или ошибка загрузки, клик по рекламному объявлению) необходимо установить созданному экземпляру MTRGNativeAd делегат, реализующий протокол MTRGNativeAdDelegate, после чего можно запустить загрузку данных.
@interface YourViewController : UIViewController <MTRGNativeAdDelegate>
@end
 
@implementation YourViewController
{
  MTRGNativePromoAd *_ad;
}
 
- (void)initAd
{
    // Создаем экземпляр MTRGNativeAd
    _ad = [MTRGNativeAd nativeAdWithSlotId:YOUR_SLOT_ID];
     
    // Устанавливаем делегат
    _ad.delegate = self;
     
    // Запускаем загрузку данных
    [_ad load];
}
  
- (void)onLoadWithNativePromoBanner:(MTRGNativePromoBanner *)promoBanner nativeAd:(MTRGNativeAd *)nativeAd
{
}
  
- (void)onNoAdWithReason:(NSString *)reason nativeAd:(MTRGNativeAd *)nativeAd
{
}
  
- (void)onAdClickWithNativeAd:(MTRGNativeAd *)nativeAd
{
}
  
- (void)onShowModalWithNativeAd:(MTRGNativeAd *)nativeAd
{
}
  
- (void)onDismissModalWithNativeAd:(MTRGNativeAd *)nativeAd
{
}
  
- (void)onLeaveApplicationWithNativeAd:(MTRGNativeAd *)nativeAd
{
}
 
- (void)onVideoPlayWithNativeAd:(MTRGNativeAd *)nativeAd
{
}
 
- (void)onVideoPauseWithNativeAd:(MTRGNativeAd *)nativeAd
{
}
 
- (void)onVideoCompleteWithNativeAd:(MTRGNativeAd *)nativeAd
{
}

Автозагрузка изображений и видео

По умолчанию загружаются и кэшируются все медиаобъекты (изображения, видео) рекламного баннера. Вы можете выключить автоматическую загрузку изображений и/или видео, но необходимо учитывать, что на их загрузку потребуется дополнительное время, что создаст дополнительную задержку показа рекламы в вашем приложении.

_ad.cachePolicy = MTRGCachePolicyNone;
[_ad load];
Допустимые значения: MTRGCachePolicyAll (по умолчанию), MTRGCachePolicyImages, MTRGCachePolicyVideo, MTRGCachePolicyNone.

Если предзагрузка включена, то соответствующие медиафайлы (изображения и/или видео) будут загружены и сохранены в кэш параллельно с загрузкой основных данных рекламного баннера.

Если предзагрузка изображений выключена, то они будут асинхронно загружены автоматически в момент вызова метода registerView. Дополнительных действий не требуется.

Если предзагрузка видео выключена, то оно будет загружаться в процессе воспроизведения (stream).

Показ рекламных объявлений

После успешной загрузки данных вы можете использовать свойства полученного экземпляра баннера для заполнения вашего визуального компонента. Доступность свойств зависит от типа рекламируемого объекта - для приложений и сайтов они различаются.

Для показа иконки следует использовать MTRGIconAdView, а для показа главной картинки, карусели и проигрывания видео вы должны использовать компонент MTRGMediaAdView, предоставляемые SDK.

При отображении рекламного креатива, myTargetSDK определяет наличие в нём объекта MTRGMediaAdView и добавляет в него горизонтальный слайдер карточек (если они есть в баннере) или видео (если нет карточек и есть видео). Если в баннере нет ни карточек ни видео, то будет отображена картинка (preview).

После заполнения визуального компонента вы должны зарегистрировать его в экземпляре MTRGNativeAd, используя метод registerView. Если вы собираетесь использовать этот же визуальный компонент для показа других рекламных объявлений, вам необходимо предварительно вызвать метод unregisterView у текущего экземпляра MTRGNativeAd до вызова registerView у другого экземпляра. Обработка показов и кликов осуществляется автоматически, при этом приложение не должно блокировать или перехватывать пользовательские события на этом визуальном компоненте. Ниже описаны доступные свойства и приведены примеры заполнения визуальных компонентов для различных типов рекламируемых объектов.

Визуальные компоненты (как стандартные, так и собственные) следует положить внутрь контейнера MTRGNativeAdContainer.
При этом в метод registerView можно передавать как сам компонент, так и контейнер.
При создании контейнера, визуальный компонент adView будет добавлен как subview в контейнер и растянут по размерам контейнера.
Чтобы получить высоту визуального компонента в зависимости от его ширины (требуется для встраивания в TableView/CollectionView), необходимо вызвать метод sizeThatFits у контейнера.
После создания контейнера нужно установить соответствие между доступными свойствами визуального компонента и свойствами контейнера.
- (void)onLoadWithNativePromoBanner:(MTRGNativePromoBanner *)promoBanner nativeAd:(MTRGNativeAd *)nativeAd
{
    // Заголовок рекламного объявления
    NSString *title = promoBanner.title;
    // Основной текст
    NSString *descriptionText = promoBanner.descriptionText;
    // Возрастное ограничение. Может быть nil
    NSString *ageRestrictions = promoBanner.ageRestrictions;
    // Дисклеймер. Может быть nil
    NSString *disclaimer = promoBanner.disclaimer;
    // Текст метки "Реклама"
    NSString *advertisingLabel = promoBanner.advertisingLabel;
    // Иконка
    MTRGImageData *icon = promoBanner.icon;
    // Текст действия для кнопки
    NSString *ctaText = promoBanner.ctaText;
    // Свойства, доступные только для объявлений, рекламирующих приложения
    if (promoBanner.navigationType == MTRGNavigationTypeStore))
    {
        // Рейтинг приложения (0-5)
        NSNumber *rating = promoBanner.rating;
        // Количество оценок
        NSUInteger votes = promoBanner.votes;
        // Категория приложения
        NSString *category = promoBanner.category;
        // Подкатегория приложения
        NSString *subcategory = promoBanner.subcategory;
    }
    // Свойства, доступные только для объявлений, рекламирующих сайты
    else if (promoBanner.navigationType == MTRGNavigationTypeWeb)
    {
        // Домен сайта
        NSString *domain = promoBanner.domain;
    }
     
    // Пример заполнения визуального компонента
    UIView *adView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(70, 10, 200, 20)];
    titleLabel.text = title;
    UILabel *descLabel = [[UILabel alloc] initWithFrame:CGRectMake(70, 50, 200, 40)];
    descLabel.text = descriptionText;
    UIButton *ctaButton = [[UIButton alloc] initWithFrame:CGRectMake(210, 260, 80, 30)];
    [ctaButton setTitle:ctaText forState:UIControlStateNormal];
  
    // Создаем MTRGMediaAdView
    MTRGMediaAdView *mediaView = [MTRGNativeViewsFactory createMediaAdView];
    mediaView.frame = CGRectMake(10, 100, 280, 150);
    MTRGIconAdView *iconAdView = [MTRGNativeViewsFactory createIconAdView];
    iconAdView.frame = CGRectMake(10, 10, 50, 50);
     
    [adView addSubview:titleLabel];
    [adView addSubview:descLabel];
    [adView addSubview:iconAdView];
    [adView addSubview:mediaView];
    [adView addSubview:ctaButton];
 
    MTRGNativeAdContainer *containerView = [MTRGNativeAdContainer createWithAdView:adView];
    containerView.titleView = titleLabel;
    containerView.descriptionView = descLabel;
    containerView.iconView = iconAdView;
    containerView.mediaView = mediaView;
    containerView.ctaView = ctaButton;
     
    // Регистрируем визуальный компонент
    [nativeAd registerView:containerView withController:self];
  
    // Добавляем на экран
    [self.view addSubview:containerView];
}
Приложение:
Пример полноэкранного баннера
Веб-ресурс:
Пример полноэкранного баннера

Установка размеров MediaAdView

Соотношение сторон загруженной картинки может отличаться от размеров mediaView и необходимо скорректировать размеры с учётом нового значения mediaAdView.aspectRatio

Уведомление об изменении размеров можно получить подписавшись на делегат onImageSizeChanged: объекта mediaAdView
mediaAdView.delegate = self;
 
- (void)onImageSizeChanged:(MTRGMediaAdView *)mediaAdView
{
    CGFloat currentAspect = mediaView.frame.size.width / mediaView.frame.size.height;
    NSLog(@"current aspect of media view: %f", currentAspect);
   
    CGFloat actualAspect = mediaView.aspectRatio;
    NSLog(@"actual aspect of media view: %f", actualAspect);
}

Иконка AdChoices

myTarget SDK автоматически добавляет иконку AdChoices в каждый визуальный компонент. По умолчанию иконка добавляется в правый верхний угол визуального компонента, но вы вы можете выбрать предпочитаемый угол с помощью свойства adChoicesPlacement:

...
_ad.adChoicesPlacement = MTRGAdChoicesPlacementTopRight;
[_ad load]; 

Настройка кликабельной области

В приведенном выше примере визуальный компонент регистрируется с помощью метода registerView:withController. В этом случае вся область визуального компонента является кликабельной. MyTarget SDK предоставляет возможность указать конкретные визуальные компоненты, клики на которые будут отслеживаться. Для этого воспользуйтесь методом registerView:withController:withClickableViews:

- (void)onLoadWithNativePromoBanner:(MTRGNativePromoBanner *)promoBanner nativeAd:(MTRGNativeAd *)nativeAd
{
    ...
    ...
    ...
     
    // Регистрируем визуальный компонент, с кликабельными заголовком и кнопкой призыва к действию
    [nativeAd registerView:adView withController:self withClickableViews:@[titleLabel, ctaButton]];
  
    // Добавляем на экран
    [self.view addSubview:adView];
}

Использование готового визуального компонента

MyTarget SDK предоставляет готовый настраиваемый визуальный компонент, внешний вид которого вы можете настраивать под дизайн своего приложения.

Ниже приведены примеры и описаны доступные для настройки свойства.
MTRGNativeAdView
- (void)onLoadWithNativePromoBanner:(MTRGNativePromoBanner *)promoBanner nativeAd:(MTRGNativeAd *)nativeAd
{
    // Создаем визуальный компонент
    MTRGNativeAdView *adView = [MTRGNativeViewsFactory createNativeAdView];
    adView.banner = promoBanner;
  
    // Доступные для настройки внутренние визуальные компоненты
    UILabel *titleLabel = adView.titleLabel;
    UILabel *descriptionLabel = adView.descriptionLabel;
    MTRGIconAdView *iconAdView = adView.iconAdView;
    MTRGMediaAdView *mediaView = adView.mediaAdView;
    UILabel *domainLabel = adView.domainLabel;
    UILabel *categoryLabel = adView.categoryLabel;
    UILabel *disclaimerLabel = adView.disclaimerLabel;
    MTRGStarsRatingView *ratingStarsView = adView.ratingStarsView;
    UILabel *votesLabel = adView.votesLabel;
    UIView *buttonView = adView.buttonView;
    UILabel *buttonToLabel = adView.buttonToLabel;
    UILabel *ageRestrictionsLabel = adView.ageRestrictionsLabel;
    UILabel *adLabel = adView.adLabel;
  
    // Отступы
    UIEdgeInsets titleMargins = adView.titleMargins;
    UIEdgeInsets domainMargins = adView.domainMargins;
    UIEdgeInsets categoryMargins = adView.categoryMargins;
    UIEdgeInsets descriptionMargins = adView.descriptionMargins;
    UIEdgeInsets disclaimerMargins = adView.disclaimerMargins;
    UIEdgeInsets imageMargins = adView.imageMargins;
    UIEdgeInsets iconMargins = adView.iconMargins;
    UIEdgeInsets ratingStarsMargins = adView.ratingStarsMargins;
    UIEdgeInsets votesMargins = adView.votesMargins;
    UIEdgeInsets buttonMargins = adView.buttonMargins;
    UIEdgeInsets buttonCaptionMargins = adView.buttonCaptionMargins;
    UIEdgeInsets adLabelMargins = adView.adLabelMargins;
    UIEdgeInsets ageRestrictionsMargins = adView.ageRestrictionsMargins;   
  
    // Регистрируем визуальный компонент
    [nativeAd registerView:adView withController:self];
     
    // Добавляем на экран
    [self.view addSubview:adView];
}
Приложение:
Веб-ресурс:
Видео:
Карточки:

Загрузка нескольких баннеров

MyTarget SDK предоставляет класс MTRGNativeAdLoader, который даёт возможность загрузить от 1 до 20 баннеров одним запросом. Для MTRGNativeAdLoader вы можете настроить все те же параметры, которые доступны для настройки в MTRGNativeAd (например, параметры пола и возраста пользователя, автозагрузку изображений и видео). myTarget SDK не гарантирует, что будет загружено количество баннеров, указанное в параметре COUNT - этот параметр указывает на максимальное количество баннеров, которое вы хотите получить.
// Включение режима отладки
// [MTRGNativeAdLoader setDebugMode:YES];
 
 
// Создаем MTRGNativeAdLoader
MTRGNativeAdLoader *nativeAdLoader = [MTRGNativeAdLoader loaderForCount:COUNT slotId:YOUR_SLOT_ID];
 
// Загружаем баннеры
[nativeAdLoader loadWithCompletionBlock:^(NSArray<MTRGNativeAd *> * _Nonnull nativeAds)
{
    for (MTRGNativeAd *nativeAd in nativeAds)
    {
        // Устанавливаем делегат
        nativeAd.delegate = self;
         
        MTRGNativePromoBanner *promoBanner = nativeAd.banner;
        // Код, аналогичный методу onLoadWithNativePromoBanner протокола MTRGNativeAdDelegate
    }
}];
Полученный массив будет содержать от 0 до COUNT объектов MTRGNativeAd - каждый из них содержит уже загруженный MTRGNativePromoBanner и с каждым из них надо работать так же, как описано в этой документации выше, начиная с вызова метода onLoadWithNativePromoBanner.

Нативные баннеры

myTarget SDK предоставляет возможность показывать рекламу в своем приложении, используя собственные визуальные компоненты. SDK загружает данные и предоставляет приложению модель рекламного объявления с определенными свойствами для заполнения визуального компонента, а также методы для подсчета показов и обработки кликов. SDK также предоставляет готовый настраиваемый визуальный компонент, который вы можете использовать в вашем приложении, вместо создания собственных.

Нативный баннер не поддерживает MTRGMediaAdView и поэтому не может отображать медиа-контент (видео, карточки, большую картинку).

Инициализация

Для показа нативных баннеров в вашем приложении необходимо создать экземпляр класса MTRGNativeBannerAd. Для создания экземпляра MTRGNativeBannerAd необходимо указать ваш slotId.
@interface YourViewController : UIViewController
@end
 
@implementation YourViewController
{
  MTRGNativeBannerAd *_ad;
}
 
- (void)initAd
{
    // Включение режима отладки
    // [MTRGNativeBannerAd setDebugMode:YES];
     
    // Создаем экземпляр MTRGNativeAd
    _ad = [MTRGNativeBannerAd nativeBannerAdWithSlotId:YOUR_SLOT_ID];
}

Загрузка рекламных объявлений

Для получения уведомлений (таких как успешная загрузка данных или ошибка загрузки, клик по рекламному объявлению) необходимо установить созданному экземпляру MTRGNativeBannerAd делегат, реализующий протокол MTRGNativeBannerAdDelegate, после чего можно запустить загрузку данных.
@interface YourViewController : UIViewController <MTRGNativeBannerAdDelegate>
@end
 
@implementation YourViewController
{
  MTRGNativePromoAd *_ad;
}
 
- (void)initAd
{
    // Создаем экземпляр MTRGNativeAd
    _ad = [MTRGNativeBannerAd nativeBannerAdWithSlotId:YOUR_SLOT_ID];
     
    // Устанавливаем делегат
    _ad.delegate = self;
     
    // Запускаем загрузку данных
    [_ad load];
}
  
- (void)onLoadWithNativeBanner:(MTRGNativeBanner *)banner nativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd
{
}
 
- (void)onNoAdWithReason:(NSString *)reason nativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd
{
}
 
- (void)onAdShowWithNativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd
{
}
 
- (void)onAdClickWithNativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd
{
}
 
- (void)onShowModalWithNativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd
{
}
 
- (void)onDismissModalWithNativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd
{
}
 
- (void)onLeaveApplicationWithNativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd
{
}

Автозагрузка изображений

По умолчанию загружаются и кэшируются все изображения рекламного баннера. Вы можете выключить автоматическую загрузку изображений, но необходимо учитывать, что на их загрузку потребуется дополнительное время, что создаст дополнительную задержку показа рекламы в вашем приложении.
_ad.cachePolicy = MTRGCachePolicyNone;
[_ad load];
Допустимые значения: MTRGCachePolicyAll (по умолчанию), MTRGCachePolicyImages, MTRGCachePolicyNone.

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

Если предзагрузка изображений выключена, то они будут асинхронно и автоматически загружены в момент вызова метода registerView. Дополнительных действий не требуется.

Показ рекламных объявлений

После успешной загрузки данных вы можете использовать свойства полученного экземпляра баннера для заполнения вашего визуального компонента. Доступность свойств зависит от типа рекламируемого объекта - для приложений и сайтов они различаются.

Для показа иконки следует использовать MTRGIconAdView, предоставляемый SDK.

После заполнения визуального компонента вы должны зарегистрировать его в экземпляре MTRGNativeBannerAd, используя метод registerView. Если вы собираетесь использовать этот же визуальный компонент для показа других рекламных объявлений, вам необходимо предварительно вызвать метод unregisterView у текущего экземпляра MTRGNativeBannerAd до вызова registerView у другого экземпляра. Обработка показов и кликов осуществляется автоматически, при этом приложение не должно блокировать или перехватывать пользовательские события на этом визуальном компоненте. Ниже описаны доступные свойства и приведены примеры заполнения визуальных компонентов для различных типов рекламируемых объектов.

Визуальные компоненты (как стандартные, так и собственные) следует положить внутрь контейнера MTRGNativeAdContainer.
При этом в метод registerView можно передавать как сам компонент, так и контейнер.
При создании контейнера, визуальный компонент adView будет добавлен как subview в контейнер и растянут по размерам контейнера.
Чтобы получить высоту визуального компонента в зависимости от его ширины (требуется для встраивания в TableView/CollectionView), необходимо вызвать метод sizeThatFits у контейнера.
После создания контейнера нужно установить соответствие между доступными свойствами визуального компонента и свойствами контейнера.

- (void)onLoadWithNativeBanner:(MTRGNativeBanner *)banner nativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd
{
    // Заголовок рекламного объявления
    NSString *title = banner.title;
    // Возрастное ограничение. Может быть nil
    NSString *ageRestrictions = banner.ageRestrictions;
    // Дисклеймер. Может быть nil
    NSString *disclaimer = banner.disclaimer;
    // Текст метки "Реклама"
    NSString *advertisingLabel = banner.advertisingLabel;
    // Иконка
    MTRGImageData *icon = banner.icon;
    // Текст действия для кнопки
    NSString *ctaText = banner.ctaText;
    // Свойства, доступные только для объявлений, рекламирующих приложения
    if (banner.navigationType == MTRGNavigationTypeStore))
    {
        // Рейтинг приложения (0-5)
        NSNumber *rating = banner.rating;
        // Количество оценок
        NSUInteger votes = banner.votes;
    }
    // Свойства, доступные только для объявлений, рекламирующих сайты
    else if (banner.navigationType == MTRGNavigationTypeWeb)
    {
        // Домен сайта
        NSString *domain = banner.domain;
    }
     
    // Пример заполнения визуального компонента
    UIView *adView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 50)];
 
    MTRGIconAdView *iconAdView = [MTRGNativeViewsFactory createIconAdView];
    iconAdView.frame = CGRectMake(0, 0, 50, 50);
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(60, 15, 140, 20)];
    titleLabel.text = title;
    UIButton *ctaButton = [[UIButton alloc] initWithFrame:CGRectMake(210, 10, 80, 30)];
    [ctaButton setTitle:ctaText forState:UIControlStateNormal];
  
    [adView addSubview:titleLabel];
    [adView addSubview:iconAdView];
    [adView addSubview:ctaButton];
 
    MTRGNativeAdContainer *containerView = [MTRGNativeAdContainer createWithAdView:adView];
    containerView.titleView = titleLabel;
    containerView.iconView = iconAdView;
    containerView.ctaView = ctaButton;
     
    // Регистрируем визуальный компонент
    [nativeBannerAd registerView:containerView withController:self];
  
    // Добавляем на экран
    [self.view addSubview:containerView];
}
Приложение:
Веб-ресурс:

Иконка AdChoices

myTarget SDK автоматически добавляет иконку AdChoices в каждый визуальный компонент. По умолчанию иконка добавляется в правый верхний угол визуального компонента, но вы вы можете выбрать предпочитаемый угол с помощью свойства adChoicesPlacement:

...
_ad.adChoicesPlacement = MTRGAdChoicesPlacementTopRight;
[_ad load]; 

Настройка кликабельной области

В приведенном выше примере визуальный компонент регистрируется с помощью метода registerView:withController. В этом случае вся область визуального компонента является кликабельной. MyTarget SDK предоставляет возможность указать конкретные визуальные компоненты, клики на которые будут отслеживаться. Для этого воспользуйтесь методом registerView:withController:withClickableViews:
- (void)onLoadWithNativeBanner:(MTRGNativeBanner *)banner nativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd
{
    ...
    ...
    ...
     
    // Регистрируем визуальный компонент, с кликабельными заголовком и кнопкой призыва к действию
    [nativeBannerAd registerView:adView withController:self withClickableViews:@[titleLabel, ctaButton]];
  
    // Добавляем на экран
    [self.view addSubview:adView];
}

Использование готового визуального компонента

MyTarget SDK предоставляет готовый настраиваемый визуальный компонент, внешний вид которого вы можете настраивать под дизайн своего приложения.

Ниже приведены примеры и описаны доступные для настройки свойства.

MTRGNativeBannerAdView
- (void)onLoadWithNativeBanner:(MTRGNativeBanner *)banner nativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd
{
    // Создаем визуальный компонент
    MTRGNativeBannerAdView *adView = [MTRGNativeViewsFactory createNativeBannerAdView];
    adView.banner = banner;
  
    // Доступные для настройки внутренние визуальные компоненты
    UILabel *titleLabel = adView.titleLabel;
    MTRGIconAdView *iconAdView = adView.iconAdView;
    UILabel *domainLabel = adView.domainLabel;
    UILabel *disclaimerLabel = adView.disclaimerLabel;
    MTRGStarsRatingView *ratingStarsView = adView.ratingStarsView;
    UILabel *votesLabel = adView.votesLabel;
    UIView *buttonView = adView.buttonView;
    UILabel *buttonToLabel = adView.buttonToLabel;
    UILabel *ageRestrictionsLabel = adView.ageRestrictionsLabel;
    UILabel *adLabel = adView.adLabel;
  
    // Отступы
    UIEdgeInsets titleMargins = adView.titleMargins;
    UIEdgeInsets domainMargins = adView.domainMargins;
    UIEdgeInsets disclaimerMargins = adView.disclaimerMargins;
    UIEdgeInsets iconMargins = adView.iconMargins;
    UIEdgeInsets ratingStarsMargins = adView.ratingStarsMargins;
    UIEdgeInsets votesMargins = adView.votesMargins;
    UIEdgeInsets buttonMargins = adView.buttonMargins;
    UIEdgeInsets buttonCaptionMargins = adView.buttonCaptionMargins;
    UIEdgeInsets adLabelMargins = adView.adLabelMargins;
    UIEdgeInsets ageRestrictionsMargins = adView.ageRestrictionsMargins;  
  
    // Регистрируем визуальный компонент
    [nativeBannerAd registerView:adView withController:self];
     
    // Добавляем на экран
    [self.view addSubview:adView];
}
Приложение:
Веб-ресурс:

Загрузка нескольких баннеров

MyTarget SDK предоставляет класс MTRGNativeBannerAdLoader, который даёт возможность загрузить от 1 до 20 баннеров одним запросом. Для MTRGNativeBannerAdLoader вы можете настроить все те же параметры, которые доступны для настройки в MTRGNativeBannerAd (например, параметры пола и возраста пользователя, автозагрузку изображений и видео). myTarget SDK не гарантирует, что будет загружено количество баннеров, указанное в параметре COUNT - этот параметр указывает на максимальное количество баннеров, которое вы хотите получить.
// Включение режима отладки
// [MTRGNativeBannerAdLoader setDebugMode:YES];
 
 
// Создаем MTRGNativeBannerAdLoader
MTRGNativeBannerAdLoader *nativeBannerAdLoader = [MTRGNativeBannerAdLoader loaderForCount:COUNT slotId:YOUR_SLOT_ID];
 
// Загружаем баннеры
[nativeBannerAdLoader loadWithCompletionBlock:^(NSArray<MTRGNativeBannerAd *> * _Nonnull nativeBannerAds)
{
    for (MTRGNativeBannerAd *nativeBannerAd in nativeBannerAds)
    {
        // Устанавливаем делегат
        nativeBannerAd.delegate = self;
         
        MTRGNativeBanner *banner = nativeBannerAd.banner;
        // Код, аналогичный методу onLoadWithNativeBanner протокола MTRGNativeBannerAdDelegate
    }
}];
Полученный массив будет содержать от 0 до COUNT объектов MTRGNativeBannerAd - каждый из них содержит уже загруженный MTRGNativeBanner и с каждым из них надо работать так же, как описано в этой документации выше, начиная с вызова метода onLoadWithNativeBanner.

In-stream видео

myTarget SDK предоставляет возможность показывать in-stream видео-рекламу в своем приложении, во время просмотра видео. Реклама может быть показана перед началом показа видео (preroll), во время показа (midroll) и после показа (postroll).

SDK загружает данные и предоставляет приложению возможность показывать рекламу как в своем видео-плеере, так и в плеере приложения.

Инициализация

Для показа рекламного видео в вашем приложении необходимо создать экземпляр класса MTRGInstreamAd. Для создания экземпляра MTRGInstreamAd необходимо указать ваш slotId. Для каждого видео в приложении требуется создавать свой экземпляр класса MTRGInstreamAd.
@interface YourViewController : UIViewController
@end
 
@implementation YourViewController
{
  MTRGInstreamAd *_ad;
}
 
- (void)initAd
{
    // Включение режима отладки
    // [MTRGInstreamAd setDebugMode:YES];
    // Создаем экземпляр MTRGInstreamAd
    _ad = [MTRGInstreamAd instreamAdWithSlotId:YOUR_SLOT_ID];
}

Использование плеера приложения

Для проигрывания рекламы в плеере приложения, он должен реализовывать протокол MTRGInstreamAdPlayer и уведомлять установленный ему делегат MTRGInstreamAdPlayerDelegate.

Для использования своего плеера надо установить его свойству player созданного экземпляра MTRGInstreamAd.
@interface YourViewController : UIViewController
@end
 
@implementation YourViewController
{
  MTRGInstreamAd *_ad;
}
 
- (void)initAd
{
    // Создаем экземпляр MTRGInstreamAd
    _ad = [MTRGInstreamAd instreamAdWithSlotId:YOUR_SLOT_ID];
     
    // Устанавливаем плеер
    _ad.player = YOUR_PLAYER;
}

Протокол MTRGInstreamAdPlayer

Методы протокола MTRGInstreamAdPlayer вызываются экземпляром MTRGInstreamAd. Вызывать их самостоятельно не требуется.
@property(nonatomic, readonly) NSTimeInterval adVideoDuration;
Длительность рекламного видео.
@property(nonatomic, readonly) NSTimeInterval adVideoTimeElapsed;
Текущая позиция рекламного видео. Метод вызывается многократно во время воспроизведения рекламного видео и должен отдавать актуальное значение в секундах.
@property(nonatomic, weak) id <MTRGInstreamAdPlayerDelegate> adPlayerDelegate;
Устанавливает делегат плеера.
@property(nonatomic, readonly) UIView *adPlayerView;
Визуальное представление плеера, обычно self.
@property(nonatomic) float volume;
Устанавливает громкость от 0 до 1.
- (void)playAdVideoWithUrl:(NSURL *)url;
Запускает воспроизведение рекламного видео.

url — путь к видео
- (void)pauseAdVideo;
Приостанавливает проигрывание рекламного видео.
- (void)resumeAdVideo;
Возобновляет проигрывание рекламного видео.
- (void)stopAdVideo;
Останавливает проигрывание рекламного видео.

Протокол MTRGInstreamAdPlayerDelegate

Методы обратного вызова протокола MTRGInstreamAdPlayerDelegate для установленного делегата должны быть вызваны плеером в ответ на вызовы методов протокола MTRGInstreamAdPlayer при наступлении определенных событий.
- (void)onAdVideoStart;
Метод должен быть вызван после успешного начала воспроизведения рекламного видео, как ответ на вызов метода playAdVideo.
- (void)onAdVideoPause;
Метод должен быть вызван после приостановки проигрывания рекламного видео, как ответ на вызов метода pauseAdVideo.
void onAdVideoResumed();
Метод должен быть вызван после возобновления проигрывания рекламного видео, как ответ на вызов метода resumeAdVideo().
- (void)onAdVideoResume;
Метод должен быть вызван после возобновления проигрывания рекламного видео, как ответ на вызов метода resumeAdVideo.
- (void)onAdVideoStop;
Метод должен быть вызван после остановки проигрывания рекламного видео, как ответ на вызов метода stopAdVideo.
- (void)onAdVideoErrorWithReason:(NSString *)reason;
Метод должен быть вызван при возникновении какой-либо ошибки при проигрывании рекламного видео.
- (void)onAdVideoComplete;
Метод должен быть вызван при завершении проигрывания рекламного видео.

Использование плеера SDK

myTarget SDK предоставляет готовый плеер для проигрывания рекламы. Для использования плеера SDK достаточно вызвать метод useDefaultPlayer у созданного экземпляра MTRGInstreamAd и добавить плеер на экран приложения.
@interface YourViewController : UIViewController
@end
 
@implementation YourViewController
{
  MTRGInstreamAd *_ad;
}
 
- (void)initAd
{
    // Создаем экземпляр MTRGInstreamAd
    _ad = [MTRGInstreamAd instreamAdWithSlotId:YOUR_SLOT_ID];
     
    // Устанавливаем плеер SDK
    [_ad useDefaultPlayer];
    // Добавляем плеер на экран
    [self.view addSubview:_ad.player.adPlayerView];
}

Загрузка рекламных объявлений

Для получения уведомлений (таких как успешная загрузка данных или ошибка загрузки, показ рекламного объявления) необходимо установить созданному экземпляру MTRGInstreamAd делегат, реализующий протокол MTRGInstreamAdDelegate, после чего можно запустить загрузку данных.

@interface YourViewController : UIViewController <MTRGInstreamAdDelegate>
@end
 
@implementation YourViewController
{
  MTRGInstreamAd *_ad;
}
 
- (void)initAd
{
    // Создаем экземпляр MTRGInstreamAd
    _ad = [MTRGInstreamAd instreamAdWithSlotId:YOUR_SLOT_ID];
     
    // Устанавливаем делегат
    _ad.delegate = self;
 
    // Запускаем загрузку данных
    [_ad load];
}
 
- (void)onLoadWithInstreamAd:(MTRGInstreamAd *)instreamAd
{
   // Данные успешно загружены
}
 
- (void)onNoAdWithReason:(NSString *)reason instreamAd:(MTRGInstreamAd *)instreamAd
{
   // Данные не получены
}
 
- (void)onErrorWithReason:(NSString *)reason instreamAd:(MTRGInstreamAd *)instreamAd
{
   // При проигрывании рекламного видео произошла ошибка
}
 
- (void)onBannerStart:(MTRGInstreamAdBanner *)banner instreamAd:(MTRGInstreamAd *)instreamAd
{
   // Началось проигрывание рекламного видео
}
 
- (void)onBannerComplete:(MTRGInstreamAdBanner *)banner instreamAd:(MTRGInstreamAd *)instreamAd
{
   // Проигрывание рекламного видео завершено
}
 
- (void)onBannerTimeLeftChange:(NSTimeInterval)timeLeft duration:(NSTimeInterval)duration instreamAd:(MTRGInstreamAd *)instreamAd
{
   // Вызывается многократно во время воспроизведения рекламного видео, используется для обновления таймера до окончания показа рекламного видео
}
 
- (void)onCompleteWithSection:(NSString *)section instreamAd:(MTRGInstreamAd *)instreamAd
{
   // Проигрывание всех рекламных видео в рекламной секции завершено
}
 
- (void)onShowModalWithInstreamAd:(MTRGInstreamAd *)instreamAd
{
}
 
- (void)onDismissModalWithInstreamAd:(MTRGInstreamAd *)instreamAd
{
}
 
- (void)onLeaveApplicationWithInstreamAd:(MTRGInstreamAd *)instreamAd
{
}

Показ рекламных объявлений

После успешной загрузки данных вы можете запустить показ рекламных секций.

Каждая секция секция может содержать несколько рекламных видео, после начала проигрывания каждого будет вызван метод onBannerStart в установленном делегате MTRGInstreamAdDelegate, после завершения проигрывания каждого видео будет вызван метод onBannerComplete.

После завершения проигрывания всех рекламных видео в запущенной секции будет вызван метод onComplete — именно его вы должны использовать для дальнейших действий, он будет вызван даже если в процессе проигрывания произошла ошибка и был вызван метод onError.

Показ preroll и postroll секций

Для показа preroll секции необходимо перед началом показа видео вызвать метод startPreroll у экземпляра InstreamAd.

Для показа postroll секции необходимо после окончания показа видео вызвать метод startPostroll.
// Перед началом показа основного видео
[_ad startPreroll];
 
// После показа основного видео
[_ad startPostroll];

Показ midroll секции

Для показа midroll секции в какой-то позиции видео, необходимо после создания экземпляра MTRGInstreamAd задать массив позиций, на которых планируется показ midroll секции.

Позиции можно задавать как в секундах, так и в процентах от длительности видео. После успешной загрузки данных станет доступен массив позиций, для которых есть рекламные видео. То есть если были заданы позиции на первой и пятой секунде, а рекламные видео в загруженных данных есть только для первой, то в доступном массиве будет только одна первая позиция.

Если позиции не были заданы приложением, они будут установлены сервером.

Если массив позиций после загрузки оказался пустой, значит данных для показа midroll секции нет.
@interface YourViewController : UIViewController <MTRGInstreamAdDelegate>
@end
 
@implementation YourViewController
{
    MTRGInstreamAd *_ad;
    NSArray <NSNumber *> *_adPositions;
}
 
- (void)initAd
{
    // Создаем экземпляр MTRGInstreamAd
    _ad = [MTRGInstreamAd instreamAdWithSlotId:YOUR_SLOT_ID];
 
    // Устанавливаем позиции на первой и пятой секунде видео
    [_ad configureMidpoints:@[@1, @5] forVideoDuration:_videoDuration];
    // или в процентах, на 10% и 50% видео
    // [_ad configureMidpointsP:@[@10, @50] forVideoDuration:_videoDuration];
     
    // Устанавливаем делегат
    _ad.delegate = self;
  
    // Запускаем загрузку данных
    [_ad load];
}
  
- (void)onLoadWithInstreamAd:(MTRGInstreamAd *)instreamAd
{
    // Данные успешно загружены
    // Массив позиций (в секундах), доступных для показа midroll секции
    _adPositions = _ad.midpoints;
}
При достижении основным видео одной из позиций для midroll секции, необходимо вызвать метод startMidroll и передать в него в качестве параметра эту позицию.
// Видео доигралось до 5й секунды и для неё есть позиция в массиве adPositions
[_ad startMidrollWithPoint:_adPositions[1]];

Доступные свойства рекламного видео

В методы onBannerStart и onBannerComplete делегата MTRGInstreamAdDelegate передается экземпляр MTRGInstreamAdBanner, содержащий информацию о текущем рекламном видео, которая может быть использована приложением.
@property(nonatomic) NSTimeInterval duration;
Длительность текущего рекламного видео в секундах.
@property(nonatomic) BOOL allowClose;
Разрешено ли закрывать рекламное видео во время проигрывания. Используется для управления показом кнопки «Закрыть» или «Пропустить».
@property(nonatomic) NSTimeInterval allowCloseDelay;
Время в секундах, через которое рекламное видео может быть закрыто. Используется для управления показом кнопки «Закрыть» или «Пропустить».
@property(nonatomic) CGSize size;
Ширина и высота рекламного видео.
@property(nonatomic, copy) NSString *ctaText;
Текст для call-to-action кнопки.

Обработка кликов

Приложение должно самостоятельно отслеживать клики по рекламному видео (как правило, по cta кнопке) и вызывать метод handleClickWithController в экземпляре MTRGInstreamAd для обработки клика и перехода на рекламируемый сайт или приложение.
- (void)onAdClick
{
    [_ad handleClickWithController:self];
}

Управление состоянием

У экземпляра MTRGInstreamAd доступны следующие методы управления.
- (void)pause;
Приостанавливает проигрывание рекламного видео.
- (void)resume;
Возобновляет проигрывание рекламного видео.
- (void)stop;
Останавливает показ рекламной секции.
- (void)skip;
Останавливает показ рекламной секции, если это было сделано пользователем (нажатие на кнопку «Пропустить» или «Закрыть»).
- (void)skipBanner;
Останавливает текущее рекламное видео и переходит к следующему, если это было сделано пользователем (нажатие на кнопку «Пропустить» или «Закрыть»).
@property(nonatomic) float volume;
Устанавливает громкость от 0 до 1.
@property(nonatomic) NSUInteger loadingTimeout;
Устанавливает таймаут на загрузку рекламы в секундах. В случае если по истечению указанного интервала не удалось получить баннеры, будет вызван коллбек onNoAd. Значение по умолчанию — 10 секунд, минимальное значение — 5 секунд.

Пользовательские данные

Для лучшего подбора рекламных объявлений, вы можете дополнительно задать пол и возраст пользователя. Если ваше приложение использует собственную модель локализации, вы также можете указать язык выбранной локализации в формате ISO 639-1 ("ru", "en", "fr" и т.д.).

Для задания пользовательских данных вам нужно воспользоваться свойством customParams.
@interface YourViewController : UIViewController
@end
 
@implementation YourViewController
{
  MTRGInstreamAd *_ad;
}
 
- (void)initAd
{
    // Создаем экземпляр MTRGInstreamAd
    _ad = [MTRGInstreamAd instreamAdWithSlotId:YOUR_SLOT_ID];
  
    // Задаем возраст
    _ad.customParams.age = [NSNumber numberWithInt:25];
    // Задаем пол
    _ad.customParams.gender = MTRGGenderMale;
}

Примеры

Примеры интеграции доступны в нашем демоприложении на Github.

In-stream аудио

myTarget SDK предоставляет возможность проигрывать in-stream аудио-рекламу в своем приложении во время прослушивания аудио.

Реклама может быть запущена перед началом проигрывания аудио (preroll), во время проигрывания (midroll) и после проигрывания (postroll). SDK загружает данные и предоставляет приложению возможность проигрывать рекламу в плеере приложения.

Инициализация

Для проигрывания рекламного аудио в вашем приложении необходимо создать экземпляр класса MTRGInstreamAudioAd.

Для создания экземпляра MTRGInstreamAudioAd необходимо указать ваш slotId. Для каждого аудио в приложении требуется создавать свой экземпляр класса MTRGInstreamAudioAd.
@interface YourViewController : UIViewController
@end
  
@implementation YourViewController
{
  MTRGInstreamAudioAd *_ad;
}
  
- (void)initAd
{
    // Включение режима отладки
    // [MTRGInstreamAudioAd setDebugMode:YES];
    // Создаем экземпляр MTRGInstreamAudioAd
    _ad = [MTRGInstreamAudioAd instreamAudioAdWithSlotId:YOUR_SLOT_ID];
}

Использование плеера приложения

Для проигрывания рекламы в плеере приложения, он должен реализовывать протокол MTRGInstreamAudioAdPlayer и уведомлять установленный ему делегат MTRGInstreamAudioAdPlayerDelegate.

Для использования своего плеера надо установить его в свойство player у созданного экземпляра MTRGInstreamAudioAd.
@interface YourViewController : UIViewController
@end
  
@implementation YourViewController
{
  MTRGInstreamAudioAd *_ad;
}
  
- (void)initAd
{
    // Создаем экземпляр MTRGInstreamAudioAd
    _ad = [MTRGInstreamAudioAd instreamAudioAdWithSlotId:YOUR_SLOT_ID];
      
    // Устанавливаем плеер
    _ad.player = YOUR_PLAYER;
}

Протокол MTRGInstreamAudioAdPlayer

Методы протокола MTRGInstreamAudioAdPlayer вызываются экземпляром MTRGInstreamAudioAd. Вызывать их самостоятельно не требуется.
@property(nonatomic, readonly) NSTimeInterval adAudioDuration;
Длительность рекламного аудио
@property(nonatomic, readonly) NSTimeInterval adAudioTimeElapsed;
Текущая позиция рекламного аудио. Метод вызывается многократно во время проигрывания рекламного аудио и должен отдавать актуальное значение в секундах.
@property(nonatomic, weak) id <MTRGInstreamAudioAdPlayerDelegate> adPlayerDelegate;
Устанавливает делегат плеера
@property(nonatomic) float volume;
Текущий контекст.
void setVolume(float volume);
Устанавливает громкость от 0 до 1.
- (void)playAdAudioWithUrl:(NSURL *)url;
Запускает воспроизведение рекламного аудио.

uri — путь к аудио
- (void)pauseAdAudio;
Приостанавливает проигрывание рекламного аудио.
- (void)resumeAdAudio;
Возобновляет проигрывание рекламного аудио.
- (void)stopAdAudio;
Останавливает проигрывание рекламного аудио.

Протокол MTRGInstreamAudioAdPlayerDelegate

Методы обратного вызова протокола MTRGInstreamAudioAdPlayerDelegate для установленного делегата должны быть вызваны плеером в ответ на вызовы методов протокола MTRGInstreamAudioAdPlayer при наступлении определенных событий.
- (void)onAdAudioStart;
Метод должен быть вызван после успешного начала воспроизведения рекламного аудио, как ответ на вызов метода playAdAudioWithUrl..
- (void)onAdAudioPause;
Метод должен быть вызван после приостановки проигрывания рекламного аудио, как ответ на вызов метода pauseAdAudio.
- (void)onAdAudioResume;
Метод должен быть вызван после возобновления проигрывания рекламного аудио, как ответ на вызов метода resumeAdAudio.
- (void)onAdAudioStop;
Метод должен быть вызван после остановки проигрывания рекламного аудио, как ответ на вызов метода stopAdAudio.
- (void)onAdAudioErrorWithReason:(NSString *)reason;
Метод должен быть вызван при возникновении какой-либо ошибки при проигрывании рекламного аудио.
- (void)onAdAudioComplete;
Метод должен быть вызван при завершении проигрывания рекламного аудио.

Загрузка рекламных объявлений

Для получения уведомлений (таких как успешная загрузка данных или ошибка загрузки) необходимо установить созданному экземпляру MTRGInstreamAudioAd делегат, реализующий протокол MTRGInstreamAudioAdDelegate, после чего можно запустить загрузку данных.
interface YourViewController : UIViewController <MTRGInstreamAudioAdDelegate>
@end
  
@implementation YourViewController
{
  MTRGInstreamAudioAd *_ad;
}
  
- (void)initAd
{
    // Создаем экземпляр MTRGInstreamAudioAd
    _ad = [MTRGInstreamAudioAd instreamAudioAdWithSlotId:YOUR_SLOT_ID];
      
    // Устанавливаем делегат
    _ad.delegate = self;
  
    // Запускаем загрузку данных
    [_ad load];
}
  
- (void)onLoadWithInstreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
   // Данные успешно загружены
}
  
- (void)onNoAdWithReason:(NSString *)reason instreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
   // Данные не получены
}
  
- (void)onErrorWithReason:(NSString *)reason instreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
   // При проигрывании рекламного видео произошла ошибка
}
  
- (void)onBannerStart:(MTRGInstreamAudioAdBanner *)banner instreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
   // Началось проигрывание рекламного видео
}
  
- (void)onBannerComplete:(MTRGInstreamAudioAdBanner *)banner instreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
   // Проигрывание рекламного видео завершено
}
  
- (void)onBannerTimeLeftChange:(NSTimeInterval)timeLeft duration:(NSTimeInterval)duration instreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
   // Вызывается многократно во время воспроизведения рекламного видео, используется для обновления таймера до окончания показа рекламного видео
}
  
- (void)onCompleteWithSection:(NSString *)section instreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
   // Проигрывание всех рекламных видео в рекламной секции завершено
}
  
- (void)onShowModalWithInstreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
}
  
- (void)onDismissModalWithInstreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
}
  
- (void)onLeaveApplicationWithInstreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
}

Проигрывание рекламных объявлений

После успешной загрузки данных вы можете запустить проигрывание рекламных секций. Каждая секция секция может содержать несколько рекламных аудио, после начала проигрывания каждого будет вызван метод onBannerStart в установленном делегате MTRGInstreamAudioAdDelegate, после завершения проигрывания каждого аудио будет вызван метод onBannerComplete.

После завершения проигрывания всех рекламных аудио в запущенной секции будет вызван метод onComplete — именно его вы должны использовать для дальнейших действий. Он будет вызван даже если в процессе проигрывания произошла ошибка и был вызван метод onError.
Для проигрывания preroll секции необходимо перед началом проигрывания аудио вызвать метод startPreroll у экземпляра MTRGInstreamAudioAd.

Для проигрывания postroll секции необходимо после окончания проигрывания аудио вызвать метод startPostroll.
// Перед началом показа основного видео
[_ad startPreroll];
  
// После показа основного видео
[_ad startPostroll];

Показ midroll секции

Для проигрывания midroll секции в какой-то позиции аудио необходимо после создания экземпляра MTRGInstreamAudioAd задать массив позиций, на которых планируется проигрывание midroll секции. Позиции можно задавать как в секундах, так и в процентах от длительности аудио.

После успешной загрузки данных станет доступен массив позиций, для которых есть рекламные аудио. То есть если были заданы позиции на первой и пятой секунде, а рекламные аудио в загруженных данных есть только для первой, то в доступном массиве будет только одна первая позиция. Если позиции не были заданы приложением, они будут установлены сервером.

Если массив позиций после загрузки оказался пустой, значит данных для проигрывания midroll секции нет.
@interface YourViewController : UIViewController <MTRGInstreamAudioAdDelegate>
@end
  
@implementation YourViewController
{
    MTRGInstreamAudioAd *_ad;
    NSArray <NSNumber *> *_adPositions;
}
  
- (void)initAd
{
    // Создаем экземпляр MTRGInstreamAudioAd
    _ad = [MTRGInstreamAudioAd instreamAudioAdWithSlotId:YOUR_SLOT_ID];
  
    // Устанавливаем позиции на первой и пятой секунде аудио
    [_ad configureMidpoints:@[@1, @5] forVideoDuration:_videoDuration];
    // или в процентах, на 10% и 50% аудио
    // [_ad configureMidpointsP:@[@10, @50] forVideoDuration:_videoDuration];
      
    // Устанавливаем делегат
    _ad.delegate = self;
   
    // Запускаем загрузку данных
    [_ad load];
}
   
- (void)onLoadWithInstreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
    // Данные успешно загружены
    // Массив позиций (в секундах), доступных для показа midroll секции
    _adPositions = _ad.midpoints;
}
При достижении основным аудио одной из позиций для midroll секции, необходимо вызвать метод startMidroll и передать в него в качестве параметра эту позицию.
// Аудио доигралось до 5-й секунды и для неё есть позиция в массиве adPositions
[_ad startMidrollWithPoint:_adPositions[1]];

Доступные свойства рекламного аудио

В методы onBannerStart и onBannerComplete делегата MTRGInstreamAudioAdDelegate передается экземпляр MTRGInstreamAudioAdBanner, содержащий информацию о текущем рекламном аудио, которая может быть использована приложением.
@property(nonatomic) NSTimeInterval duration;
Длительность текущего рекламного аудио в секундах.
@property(nonatomic) BOOL allowSeek;
Разрешено ли прокручивать рекламное аудио.
@property(nonatomic) BOOL allowSkip;
Разрешено ли пропускать рекламное аудио.
@property(nonatomic) BOOL allowTrackChange;
Разрешено ли переходить к следующему треку.
@property(nonatomic) NSArray<MTRGInstreamAdCompanionBanner *> *companionBanners;
Список баннеров-компаньонов.
@property(nonatomic, copy) NSString *adText;
Рекламный текст.

Работа с баннерами-компаньонами

Приложение должно самостоятельно отслеживать показы и клики по баннерам-компаньонам и вызывать методы handleCompanionShow и handleCompanionClick в экземпляре MTRGInstreamAudioAd для обработки показа и клика и перехода на рекламируемый сайт или приложение.
- (void)onCompanionAdShow:(MTRGInstreamAdCompanionBanner *)companionBanner
{
    [_ad handleCompanionShow:companionBanner];
}
 
- (void)onCompanionAdClick:(MTRGInstreamAdCompanionBanner *)companionBanner
{
    [_ad handleCompanionClick:companionBanner withController:self];
}

Управление состоянием

У экземпляра MTRGInstreamAudioAd доступны следующие методы управления.
- (void)pause;
Приостанавливает проигрывание рекламного аудио.
- (void)resume;
Возобновляет проигрывание рекламного аудио.
- (void)stop;
Останавливает показ рекламной секции.
- (void)skip;
Останавливает показ рекламной секции, если это было сделано пользователем (нажатие на кнопку «Пропустить» или «Закрыть»).
- (void)skipBanner;
Останавливает текущее рекламное аудио и переходит к следующему, если это было сделано пользователем (нажатие на кнопку «Пропустить» или «Закрыть»).
@property(nonatomic) float volume;
Устанавливает громкость от 0 до 1.
@property(nonatomic) NSUInteger loadingTimeout;
Устанавливает таймаут на загрузку рекламы в секундах. В случае если по истечению указанного интервала не удалось получить баннеры, будет вызван коллбек onNoAd. Значение по умолчанию — 10 секунд, минимальное значение — 5 секунд.

Пользовательские данные

Для лучшего подбора рекламных объявлений, вы можете дополнительно задать пол и возраст пользователя. Если ваше приложение использует собственную модель локализации, вы также можете указать язык выбранной локализации в формате ISO 639-1 ("ru", "en", "fr" и т.д.).

Для задания пользовательских данных вам нужно воспользоваться свойством customParams.
@interface YourViewController : UIViewController
@end
 
@implementation YourViewController
{
  MTRGInstreamAudioAd *_ad;
}
 
-(void) initAd
{
    // Создаем экземпляр MTRGInstreamAudioAd
    _ad = [MTRGInstreamAudioAd instreamAudioAdWithSlotId:YOUR_SLOT_ID];
  
    // Задаем возраст
    _ad.customParams.age = [NSNumber numberWithInt:25];
    // Задаем пол
    _ad.customParams.gender = MTRGGenderMale;
}

Примеры

Примеры интеграции доступны в нашем демоприложении на Github.
Вам помогла эта статья?
Да
Нет