Оформление без использования шаблона
Это архивная версия документации. Актуальная документация по всем платформам находится здесь.
Для отображения нативной рекламы объекты YMANativeAd
должны быть привязаны к определенной View
. Эта View
должна определяться как корневой элемент для набора subview
, к элементам которого будут привязываться данные, содержащиеся в нативной рекламе.
Минимальный размер экземпляра класса YMANativeMediaView, в котором поддерживается воспроизведение видео: 300x160 или 160x300.
Для поддержки воспроизведения видео в нативной рекламе рекомендуется выставить ширину для mediaView
не менее 300. Чтобы вычислить соответствующее значение высоты mediaView
, используйте значение свойства aspectRatio.
Оформление нативной рекламы
- Ознакомьтесь со списком обязательных и опциональных subview для нативной рекламы.
- Установите значения всех обязательных subview. Это можно сделать с помощью
nib
или непосредственно в коде. Для этого создайте объект класса YMANativeAdView и определите значенияsubview
вinitWithFrame:
Пример регистрации набора subview:override init(frame: CGRect) { super.init(frame: frame) let titleLabel = createLabel() let bodyLabel = createLabel() let ageLabel = createLabel() let warningLabel = createLabel() let sponsoredByLabel = createLabel() let priceLabel = createLabel() let starRatingView = createStarRatingView() let button = createButton() let iconImageView = createIconAssetImageView() let mediaView = createMediaAssetView() addSubview(titleLabel) addSubview(bodyLabel) addSubview(ageLabel) addSubview(warningLabel) addSubview(sponsoredByLabel) addSubview(priceLabel) addSubview(starRatingView) addSubview(button) addSubview(iconImageView) addSubview(mediaView) self.titleLabel = titleLabel self.bodyLabel = bodyLabel self.ageLabel = ageLabel self.warningLabel = warningLabel self.sponsoredLabel = sponsoredByLabel self.callToActionButton = callToActionButton self.priceLabel = priceLabel self.ratingView = ratingView self.iconImageView = iconImageView self.mediaView = mediaView }
- (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self != nil) { UILabel *titleLabel = [self label]; UILabel *bodyLabel = [self label]; UILabel *ageLabel = [self secondaryLabel]; UILabel *warningLabel = [self label]; UILabel *sponsoredByLabel = [self label]; UILabel *priceLabel = [self label]; StarRatingView *ratingView = [self starRatingView]; UIButton *callToActionButton = [self button]; UIImageView *iconImageView = [self iconAssetImageView]; YMANativeMediaView *mediaView = [self mediaAssetView]; [self addSubview:titleLabel]; [self addSubview:bodyLabel]; [self addSubview:ageLabel]; [self addSubview:warningLabel]; [self addSubview:sponsoredByLabel]; [self addSubview:callToActionButton]; [self addSubview:priceLabel]; [self addSubview:ratingView]; [self addSubview:iconImageView]; [self addSubview:mediaView]; self.titleLabel = titleLabel; self.bodyLabel = bodyLabel; self.ageLabel = ageLabel; self.warningLabel = warningLabel; self.sponsoredLabel = sponsoredByLabel; self.callToActionButton = callToActionButton; self.priceLabel = priceLabel; self.ratingView = ratingView; self.iconImageView = iconImageView; self.mediaView = mediaView; } return self; }
- Чтобы получать уведомления о взаимодействии пользователя с рекламой (открытие и закрытие рекламы, выход из приложения), установите для нее делегат YMANativeAdDelegate, реализующий методы:
- Запросите значения компонентов нативной рекламы с помощью метода -adAssets. Это поможет заранее рассчитать расположение и размеры этих компонентов.
let assets = ad.adAssets()
YMANativeAdAssets *assets = [ad adAssets];
Пример получения размеров изображения, соотношения сторон медиа и текста заголовка объявленияlet image = assets.image let title = assets.title let media = assets.media print("Image size: \(image?.size ?? .zero)") print("Title: \(title ?? "")") print(String(format: "Media aspect ratio: %.2f", media?.aspectRatio ?? 0))
YMANativeAdImage *image = assets.image; NSString *title = assets.title; YMANativeAdMedia *media = assets.media; NSLog(@"Image size: %@", NSStringFromCGSize(image.size)); NSLog(@"Title: %@", title); NSLog(@"Media aspect ratio: %.2f", media.aspectRatio);
- Вызовите метод -bindWithAdView:error:, чтобы связать контент с объектом нативной рекламы.
// ... adView = YMANativeAdView(frame: frame) //configure content ad view // ... func nativeAdLoader(_ loader: YMANativeAdLoader, didLoad ad: YMANativeAd) { ad.delegate = self do { try ad.bind(with: contentAdView) } catch { print("Error: \(error)") } }
// ... self.adView = [[YMANativeAdView alloc] initWithFrame:frame]; //configure content ad view // ... - (void)nativeAdLoader:(YMANativeAdLoader *)loader didLoadAd:(id<YMANativeAd>)ad { ad.delegate = self; NSError *error = nil; BOOL result = [ad bindWithAdView:self.contentAdView error:error]; if (error != nil) { NSLog(@"Error: %@", error); } }
Примечание.Если для обязательного элемента нативной рекламы соответствующее свойство
YMANativeAdView
принимает значениеnil
, привязка не осуществится — реклама не будет показана. Детали в этом случае можно получить изerror
.