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


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.

Медиация с другими рекламными SDK

Для нативной рекламы поддерживается медиация с Admob SDK и Mopub SDK.

Медиация Admob

myTarget является сертифицированным партнером Google Mediation.

Требования
- Xcode 11 или выше
- iOS Deployment target of 9.0 или выше
- Google Mobile Ads SDK 7.57.0 или выше

Краткая инструкция для медиации myTarget через Admob
- Настроить группу медиации в настройках рекламного блока Admob
- Импортировать myTarget SDK и адаптер (при установке адаптера с помощью менеджера зависимостей CocoaPods, автоматически будет установлены myTarget SDK и Google Mobile Ads SDK)
- Протестировать интеграцию

Пожалуйста, ознакомьтесь с полной версией инструкции: https://developers.google.com/admob/ios/mediation/mytarget#step_2_configure_mediation_settings_for_your_ad_unit

Медиация Mopub

Необходимо подключить к проекту файлы из директории mediation Github репозитория https://github.com/myTargetSDK/mytarget-ios/tree/master/mediation

Настройка медиации осуществляется на сайте http://www.mopub.com/

Для создания сети медиации, нужно зайти в раздел Networks и добавить Custom Native Network, где необходимо задать следующие поля:
Поле
Значение
CUSTOM EVENT CLASS
MTRGMopubNativeCustomEvent
CUSTOM EVENT CLASS DATA
{"slotId":"<your slot Id>"}
Вам помогла эта статья?
Да
Нет