@interface YourViewController : UIViewController
@end
@implementation YourViewController
{
MTRGAdView *_adView;
}
- (void)initAd
{
// Включение режима отладки
// [MTRGManager setDebugMode:YES];
// Создаем экземпляр MTRGAdView
_adView = [MTRGAdView adViewWithSlotId:YOUR_SLOT_ID];
// Формат 300x250
// _adView.adSize = [MTRGAdSize adSize300x250];
}
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
_adView.adSize = [MTRGAdSize adSizeForCurrentOrientation];
}
+ (instancetype)adSize320x50;
+ (instancetype)adSize300x250;
+ (instancetype)adSize728x90;
+ (instancetype)adSizeForCurrentOrientation; // Адаптивный размер
+ (instancetype)adSizeForCurrentOrientationForWidth:(CGFloat)width; // Адаптивный размер с ограничением максимальной ширины
@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
{
}
// Выключение автоматической ротации баннеров
_adView = [MTRGAdView adViewWithSlotId:YOUR_SLOT_ID shouldRefreshAd:NO];
@interface YourViewController : UIViewController
@end
@implementation YourViewController
{
MTRGInterstitialAd *_ad;
}
- (void)initAd
{
// Включение режима отладки
// [MTRGManager setDebugMode:YES];
// Создаем экземпляр MTRGInterstitialAd
_ad = [MTRGInterstitialAd interstitialAdWithSlotId:YOUR_SLOT_ID];
}
@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];
}
@interface YourViewController : UIViewController
@end
@implementation YourViewController
{
MTRGRewardedAd *_ad;
}
- (void)initAd
{
// Включение режима отладки
// [MTRGManager setDebugMode:YES];
// Создаем экземпляр MTRGRewardedAd
_ad = [MTRGRewardedAd rewardedAdWithSlotId:YOUR_SLOT_ID];
}
@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];
}
@property(nonatomic, readonly) NSString *type;
@interface YourViewController : UIViewController
@end
@implementation YourViewController
{
MTRGNativeAd *_ad;
}
- (void)initAd
{
// Включение режима отладки
// [MTRGManager setDebugMode:YES];
// Создаем экземпляр MTRGNativeAd
_ad = [MTRGNativeAd nativeAdWithSlotId:YOUR_SLOT_ID];
}
@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];
@protocol MTRGNativeAdMediaDelegate <NSObject>
- (void)onIconLoadWithNativeAd:(MTRGNativeAd *)nativeAd;
- (void)onImageLoadWithNativeAd:(MTRGNativeAd *)nativeAd;
- (void)onAdChoicesIconLoadWithNativeAd:(MTRGNativeAd *)nativeAd;
- (void)onMediaLoadFailedWithNativeAd:(MTRGNativeAd *)nativeAd;
@end
- (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.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);
}
...
_ad.adChoicesPlacement = MTRGAdChoicesPlacementTopRight;
[_ad load];
- (void)setupAdChoicesView
{
_ad.adChoicesPlacement = MTRGAdChoicesPlacementManual;
MTRGAdChoicesView *adChoicesView = MTRGNativeViewsFactory.createAdChoicesView;
// Устанавливаем свою картинку
adChoicesView.imageView.image = [UIImage imageNamed:@"AdChoices"];
[_adView addSubview:adChoicesView];
// Можно использовать Autolayout или фреймы для расположения и указания размеров adChoicesView
}
- (void)setupAdChoicesView
{
_ad.adChoicesPlacement = MTRGAdChoicesPlacementDrawingManual;
_adChoicesButton = UIButton.new;
[_adChoicesButton setImage:_ad.banner.adChoicesIcon.image forState:UIControlStateNormal];
[_adChoicesButton addTarget:self action:@selector(adChoicesClick) forControlEvents:UIControlEventTouchUpInside];
[_adView addSubview:_adChoicesButton];
// Можно использовать Autolayout или фреймы для расположения и указания размеров adChoicesImageView
}
// Уведомляем SDK о том, что компонент AdChoices был нажат
- (void)adChoicesClick
{
[_ad handleAdChoicesClickWithController:self sourceView:_adChoicesButton];
}
- (void)onLoadWithNativePromoBanner:(MTRGNativePromoBanner *)promoBanner nativeAd:(MTRGNativeAd *)nativeAd
{
...
...
...
// Регистрируем визуальный компонент, с кликабельными заголовком и кнопкой призыва к действию
[nativeAd registerView:adView withController:self withClickableViews:@[titleLabel, ctaButton]];
// Добавляем на экран
[self.view addSubview:adView];
}
// Пример реализации меню
// Добавляем модель MTRGMenuAction в _items. Массив объектов, которые нужно будет показать в меню
- (void)addMenuAction:(nonnull MTRGMenuAction *)action
{
[_items addObject:action];
}
// На основе _items создаем UIAlertController и отображаем его
- (void)presentInViewController:(nonnull UIViewController *)viewController sourceView:(nullable UIView *)sourceView
{
UIAlertControllerStyle style = UIAlertControllerStyleAlert;
MTRGAlertController *alert = [MTRGAlertController alertControllerWithTitle:nil message:nil preferredStyle:style];
for (MTRGMenuAction *item in _items.copy)
{
UIAlertActionStyle actionStyle = (item.style == MTRGMenuActionStyleDefault) ? UIAlertActionStyleDefault : UIAlertActionStyleCancel;
UIAlertAction *action = [UIAlertAction actionWithTitle:item.title
style:actionStyle
handler:^(UIAlertAction * _Nonnull action)
{
[item handleClick];
}];
[alert addAction:action];
}
[viewController presentViewController:alert animated:YES completion:nil];
}
- (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];
}
// Включение режима отладки
// [MTRGManager 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
}
}];
@interface YourViewController : UIViewController
@end
@implementation YourViewController
{
MTRGNativeBannerAd *_ad;
}
- (void)initAd
{
// Включение режима отладки
// [MTRGManager setDebugMode:YES];
// Создаем экземпляр MTRGNativeAd
_ad = [MTRGNativeBannerAd nativeBannerAdWithSlotId:YOUR_SLOT_ID];
}
@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];
@protocol MTRGNativeBannerAdMediaDelegate <NSObject>
- (void)onIconLoadWithNativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd;
- (void)onAdChoicesIconLoadWithNativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd;
- (void)onMediaLoadFailedWithNativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd;
@end
- (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];
}
...
_ad.adChoicesPlacement = MTRGAdChoicesPlacementTopRight;
[_ad load];
- (void)setupAdChoicesView
{
_ad.adChoicesPlacement = MTRGAdChoicesPlacementManual;
MTRGAdChoicesView *adChoicesView = MTRGNativeViewsFactory.createAdChoicesView;
// Устанавливаем свою картинку
adChoicesView.imageView.image = [UIImage imageNamed:@"AdChoices"];
[_adView addSubview:adChoicesView];
// Можно использовать Autolayout или фреймы для расположения и указания размеров adChoicesView
}
- (void)setupAdChoicesView
{
_ad.adChoicesPlacement = MTRGAdChoicesPlacementDrawingManual;
_adChoicesButton = UIButton.new;
[_adChoicesButton setImage:_ad.banner.adChoicesIcon.image forState:UIControlStateNormal];
[_adChoicesButton addTarget:self action:@selector(adChoicesClick) forControlEvents:UIControlEventTouchUpInside];
[_adView addSubview:_adChoicesButton];
// Можно использовать Autolayout или фреймы для расположения и указания размеров adChoicesImageView
}
// Уведомляем SDK о том, что компонент AdChoices был нажат
- (void)adChoicesClick
{
[_ad handleAdChoicesClickWithController:self sourceView:_adChoicesButton];
}
- (void)onLoadWithNativeBanner:(MTRGNativeBanner *)banner nativeBannerAd:(MTRGNativeBannerAd *)nativeBannerAd
{
...
...
...
// Регистрируем визуальный компонент, с кликабельными заголовком и кнопкой призыва к действию
[nativeBannerAd registerView:adView withController:self withClickableViews:@[titleLabel, ctaButton]];
// Добавляем на экран
[self.view addSubview:adView];
}
// Пример реализации меню
// Добавляем модель MTRGMenuAction в _items. Массив объектов, которые нужно будет показать в меню
- (void)addMenuAction:(nonnull MTRGMenuAction *)action
{
[_items addObject:action];
}
// На основе _items создаем UIAlertController и отображаем его
- (void)presentInViewController:(nonnull UIViewController *)viewController sourceView:(nullable UIView *)sourceView
{
UIAlertControllerStyle style = UIAlertControllerStyleAlert;
MTRGAlertController *alert = [MTRGAlertController alertControllerWithTitle:nil message:nil preferredStyle:style];
for (MTRGMenuAction *item in _items.copy)
{
UIAlertActionStyle actionStyle = (item.style == MTRGMenuActionStyleDefault) ? UIAlertActionStyleDefault : UIAlertActionStyleCancel;
UIAlertAction *action = [UIAlertAction actionWithTitle:item.title
style:actionStyle
handler:^(UIAlertAction * _Nonnull action)
{
[item handleClick];
}];
[alert addAction:action];
}
[viewController presentViewController:alert animated:YES completion:nil];
}
- (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];
}
// Включение режима отладки
// [MTRGManager 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
}
}];
@interface YourViewController : UIViewController
@end
@implementation YourViewController
{
MTRGInstreamAd *_ad;
}
- (void)initAd
{
// Включение режима отладки
// [MTRGManager setDebugMode:YES];
// Создаем экземпляр MTRGInstreamAd
_ad = [MTRGInstreamAd instreamAdWithSlotId:YOUR_SLOT_ID];
}
@interface YourViewController : UIViewController
@end
@implementation YourViewController
{
MTRGInstreamAd *_ad;
}
- (void)initAd
{
// Создаем экземпляр MTRGInstreamAd
_ad = [MTRGInstreamAd instreamAdWithSlotId:YOUR_SLOT_ID];
// Устанавливаем плеер
_ad.player = YOUR_PLAYER;
}
@property(nonatomic, readonly) NSTimeInterval adVideoDuration;
@property(nonatomic, readonly) NSTimeInterval adVideoTimeElapsed;
@property(nonatomic, weak) id <MTRGInstreamAdPlayerDelegate> adPlayerDelegate;
@property(nonatomic, readonly) UIView *adPlayerView;
@property(nonatomic) float volume;
- (void)playAdVideoWithUrl:(NSURL *)url;
- (void)pauseAdVideo;
- (void)resumeAdVideo;
- (void)stopAdVideo;
- (void)onAdVideoStart;
- (void)onAdVideoPause;
- (void)onAdVideoResume;
- (void)onAdVideoStop;
- (void)onAdVideoErrorWithReason:(NSString *)reason;
- (void)onAdVideoComplete;
@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];
}
@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
{
}
// Перед началом показа основного видео
[_ad startPreroll];
// После показа основного видео
[_ad startPostroll];
@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;
}
// Видео доигралось до 5й секунды и для неё есть позиция в массиве adPositions
[_ad startMidrollWithPoint:_adPositions[1]];
@property(nonatomic) NSTimeInterval duration;
@property(nonatomic) BOOL allowClose;
@property(nonatomic) NSTimeInterval allowCloseDelay;
@property(nonatomic) CGSize size;
@property(nonatomic, copy) NSString *ctaText;
- (void)onAdClick
{
[_ad handleClickWithController:self];
}
// вручную добавляем компонент отображения AdChoices
- (void)setupAdChoicesView
{
_adChoicesButton = UIButton.new;
[_adChoicesButton addTarget:self action:@selector(adChoicesClick) forControlEvents:UIControlEventTouchUpInside];
[_adChoicesButton setHidden:YES];
[_playerView addSubview:_adChoicesButton];
}
// сообщаем SDK, что AdChoices был нажат
- (void)adChoicesClick
{
[_ad handleAdChoicesClickWithController:self sourceView:_adChoicesButton];
}
// Отображаем компонент AdChoices, когда баннер начинает проигрываться
- (void)onBannerStart:(MTRGInstreamAdBanner *)banner instreamAd:(MTRGInstreamAd *)instreamAd
{
BOOL hasAdChocies = banner.adChoicesImage != nil && banner.hasAdChoices;
[_adChoicesButton setImage:banner.adChoicesImage forState:UIControlStateNormal];
_adChoicesButton.hidden = !hasAdChocies;
}
// Если пользователь выбрал опцию закрытия рекламы, то пропускаем рекламу
- (void)onBannerShouldClose:(MTRGInstreamAdBanner *)banner instreamAd:(MTRGInstreamAd *)instreamAd
{
[_ad skipBanner];
}
// Пример реализации меню
// Добавляем модель MTRGMenuAction в _items. Массив объектов, которые нужно будет показать в меню
- (void)addMenuAction:(nonnull MTRGMenuAction *)action
{
[_items addObject:action];
}
// На основе _items создаем UIAlertController и отображаем его
- (void)presentInViewController:(nonnull UIViewController *)viewController sourceView:(nullable UIView *)sourceView
{
UIAlertControllerStyle style = UIAlertControllerStyleAlert;
MTRGAlertController *alert = [MTRGAlertController alertControllerWithTitle:nil message:nil preferredStyle:style];
for (MTRGMenuAction *item in _items.copy)
{
UIAlertActionStyle actionStyle = (item.style == MTRGMenuActionStyleDefault) ? UIAlertActionStyleDefault : UIAlertActionStyleCancel;
UIAlertAction *action = [UIAlertAction actionWithTitle:item.title
style:actionStyle
handler:^(UIAlertAction * _Nonnull action)
{
[item handleClick];
}];
[alert addAction:action];
}
[viewController presentViewController:alert animated:YES completion:nil];
}
- (void)pause;
- (void)resume;
- (void)stop;
- (void)skip;
- (void)skipBanner;
@property(nonatomic) float volume;
@property(nonatomic) NSUInteger loadingTimeout;
@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;
}
@interface YourViewController : UIViewController
@end
@implementation YourViewController
{
MTRGInstreamAudioAd *_ad;
}
- (void)initAd
{
// Включение режима отладки
// [MTRGManager setDebugMode:YES];
// Создаем экземпляр MTRGInstreamAudioAd
_ad = [MTRGInstreamAudioAd instreamAudioAdWithSlotId:YOUR_SLOT_ID];
}
@interface YourViewController : UIViewController
@end
@implementation YourViewController
{
MTRGInstreamAudioAd *_ad;
}
- (void)initAd
{
// Создаем экземпляр MTRGInstreamAudioAd
_ad = [MTRGInstreamAudioAd instreamAudioAdWithSlotId:YOUR_SLOT_ID];
// Устанавливаем плеер
_ad.player = YOUR_PLAYER;
}
@property(nonatomic, readonly) NSTimeInterval adAudioDuration;
@property(nonatomic, readonly) NSTimeInterval adAudioTimeElapsed;
@property(nonatomic, weak) id <MTRGInstreamAudioAdPlayerDelegate> adPlayerDelegate;
@property(nonatomic) float volume;
- (void)playAdAudioWithUrl:(NSURL *)url;
- (void)pauseAdAudio;
- (void)resumeAdAudio;
- (void)stopAdAudio;
- (void)onAdAudioStart;
- (void)onAdAudioPause;
- (void)onAdAudioResume;
- (void)onAdAudioStop;
- (void)onAdAudioErrorWithReason:(NSString *)reason;
- (void)onAdAudioComplete;
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
{
}
// Перед началом показа основного видео
[_ad startPreroll];
// После показа основного видео
[_ad startPostroll];
@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;
}
// Аудио доигралось до 5-й секунды и для неё есть позиция в массиве adPositions
[_ad startMidrollWithPoint:_adPositions[1]];
@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;
- (void)onCompanionAdShow:(MTRGInstreamAdCompanionBanner *)companionBanner
{
[_ad handleCompanionShow:companionBanner];
}
- (void)onCompanionAdClick:(MTRGInstreamAdCompanionBanner *)companionBanner
{
[_ad handleCompanionClick:companionBanner withController:self];
}
- (void)pause;
- (void)resume;
- (void)stop;
- (void)skip;
- (void)skipBanner;
@property(nonatomic) float volume;
@property(nonatomic) NSUInteger loadingTimeout;
// Добавление компонента AdChoices
- (void)setupAdChoicesView
{
_adChoicesButton = UIButton.new;
[_adChoicesButton addTarget:self action:@selector(adChoicesClick) forControlEvents:UIControlEventTouchUpInside];
[_adChoicesButton setHidden:YES];
[_playerView addSubview:_adChoicesButton];
}
// Обработка нажатия
- (void)adChoicesClick
{
[_ad handleAdChoicesClickWithController:self sourceView:_adChoicesButton];
}
// Отображение компонента AdChoices при проигрывании баннера
- (void)onBannerStart:(MTRGInstreamAudioAdBanner *)banner instreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
BOOL hasAdChocies = banner.adChoicesImage != nil && banner.hasAdChoices;
[_adChoicesButton setImage:banner.adChoicesImage forState:UIControlStateNormal];
_adChoicesButton.hidden = !hasAdChocies;
}
// Закрытие рекламы
- (void)onBannerShouldClose:(MTRGInstreamAudioAdBanner *)banner instreamAudioAd:(MTRGInstreamAudioAd *)instreamAudioAd
{
[_ad skipBanner];
}
// Пример реализации меню
// Добавляем модель MTRGMenuAction в _items (массив объектов, которые нужно будет показать в меню)
- (void)addMenuAction:(nonnull MTRGMenuAction *)action
{
[_items addObject:action];
}
// На основе _items создаем UIAlertController и отображаем его
- (void)presentInViewController:(nonnull UIViewController *)viewController sourceView:(nullable UIView *)sourceView
{
UIAlertControllerStyle style = UIAlertControllerStyleAlert;
MTRGAlertController *alert = [MTRGAlertController alertControllerWithTitle:nil message:nil preferredStyle:style];
for (MTRGMenuAction *item in _items.copy)
{
UIAlertActionStyle actionStyle = (item.style == MTRGMenuActionStyleDefault) ? UIAlertActionStyleDefault : UIAlertActionStyleCancel;
UIAlertAction *action = [UIAlertAction actionWithTitle:item.title
style:actionStyle
handler:^(UIAlertAction * _Nonnull action)
{
[item handleClick];
}];
[alert addAction:action];
}
[viewController presentViewController:alert animated:YES completion:nil];
}
@property (nonatomic) id <MTRGPromoCardSliderStateProtocol> sliderState;
+ (MTRGPromoCardCollectionView *)createPromoCardCollectionView;
+ (MTRGPromoCardCollectionView *)createPromoCardCollectionViewWithCardScaleFactor:(CGFloat)cardScaleFactor
cardSpacing:(CGFloat)cardSpacing;
-(void)onLoadWithNativePromoBanner:(MTRGNativePromoBanner *)promoBanner nativeAd:(MTRGNativeAd *)nativeAd
{
// ...
// ...
// Список карточек
NSArray<MTRGNativePromoCard *> *cards = promoBanner.cards;
// Пример заполнения визуального компонента
// ...
// ...
if(cards.count > 0)
{
// Создаем MTRGPromoCardCollectionView
MTRGPromoCardCollectionView *cardCollectionView = [MTRGNativeViewsFactory createPromoCardCollectionView];
// Устанавливаем класс для ячейки
[_cardCollectionView registerClass:[CardView class] forCellWithReuseIdentifier:@"CardView"];
// Устанавливаем карточки
[_cardCollectionView setCards:cards];
[adView addSubview:cardCollectionView];
}
else
{
// Создаем MTRGMediaAdView
MTRGMediaAdView *mediaView = [MTRGNativeViewsFactory createMediaAdView];
[adView addSubview:mediaView];
}
// Регистрируем визуальный компонент
[nativeAd registerView:adView withController:self];
// Добавляем на экран
[self.view addSubview:adView];
}
...
...
...
// Пример класса для показа одной карточки
@interface CardView : UICollectionViewCell <MTRGPromoCardViewProtocol>
@property(nonatomic, readonly) UILabel *titleLabel;
@property(nonatomic, readonly) UILabel *descriptionLabel;
@property(nonatomic, readonly) UILabel *ctaButtonLabel;
@property(nonatomic, readonly) MTRGMediaAdView *mediaAdView;
- (CGFloat)heightWithCardWidth:(CGFloat)width;
@end
@implementation CardView
- (instancetype)init
{
self = [super init];
if (self)
{
[self setupView];
}
return self;
}
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
[self setupView];
}
return self;
}
- (void)setupView
{
_mediaAdView = [[MTRGMediaAdView alloc] init];
_mediaAdView.clipsToBounds = YES;
[self.contentView addSubview:_mediaAdView];
_titleLabel = [[UILabel alloc] init];
[self.contentView addSubview:_titleLabel];
_descriptionLabel = [[UILabel alloc] init];
[self.contentView addSubview:_descriptionLabel];
_ctaButtonLabel = [[UILabel alloc] init];
[self.contentView addSubview:_ctaButtonLabel];
}
- (CGFloat)heightWithCardWidth:(CGFloat)width
{
...
...
return calculatedSize;
}
@end