Нативная реклама
Это гибкий рекламный формат, который вы можете адаптировать под UI вашего приложения.
Интеграция
Native AdQueue — это инструмент для подключения и управления нативной рекламой в Appodeal SDK. Вам больше не придется загружать нативную рекламу вручную. Достаточно указать в настройках AdQueue количество нужных вам объявлений, и она будут загружены автоматически.
При использовании AdQueue обратите внимание на следующее: если ваше приложение загрузит больше объявлений, чем сможет использовать, рекламная сеть может снизить eCPM или ограничить для вас загрузку нативной рекламы.
- Swift
- Objective C
import Appodeal
class ViewController: UIViewController {
var adQueue : APDNativeAdQueue!
}
#import <Appodeal/Appodeal.h>
@interface YourViewController : UIViewController
@property (nonatomic, strong) APDNativeAdQueue* nativeAdQueue;
@end
- Все поля нативного объявления, помеченные как обязательные, должны отображаться.
- Каждое рекламное объявление должно быть помечено соответствующим знаком или маркером, чтобы явно указывать на свой рекламный характер. Например "Ad" или "Sponsored".
- Изображения, предоставляемые для размещения, могут быть масштабированы для соответствия размерам рекламного места, однако запрещается значительно искажать или обрезать изображения.
Настройки Нативной Рекламы
В adQueue.settings
вы можете указать следующие параметры для нативной
рекламы в вашем приложении:
Название настройки adQueue.settings | Тип | Назначение | Допустимые значения |
---|---|---|---|
type | APDNativeAdType | Тип нативной рекламы | APDNativeAdTypeAuto APDNativeAdTypeVideo APDNativeAdTypeVideo |
adViewClass | Class APDNativeAdView | Класс шаблона | Default template APDDefaultNativeAdView.class |
autocacheMask | APDNativeResourceAutocacheMask | Маска для кэширования медиа-файлов | Кэширование иконок: (APDNativeResourceAutocacheIcon): 1, Кэширование изображений и видео: (APDNativeResourceAutocacheMedia): 2, Кэширование всех медиа-файлов: 3 |
Инициализация Определенного Типа Нативной Рекламы
Appodeal SDK поддерживает как видео, так и статичную нативную рекламу.
Для подключения статичного типа нативной рекламы, используйте следующий код:
- Swift
- Objective C
class ViewController: UIViewController {
var adQueue : APDNativeAdQueue!
override func viewDidLoad() {
super.viewDidLoad()
adQueue.settings.adViewClass = TemplateClass.self
adQueue.settings.autocacheMask = [.icon, .media]
adQueue.settings.type = .novideo
adQueue.loadAd()
}
}
- (void)viewDidLoad {
self.nativeAdQueue = [APDNativeAdQueue new];
self.nativeAdQueue.settings.type = APDNativeAdTypeNoVideo;
self.nativeAdQueue.settings.adViewClass = APDDefaultNativeAdView.class;
self.nativeAdQueue.settings.autocacheMask = APDNativeResourceAutocacheIcon | APDNativeResourceAutocacheMedia;
[adQueue loadAd];
}
Для подключения нативной видеорекламы, используйте следующий код:
- Swift
- Objective C
class ViewController: UIViewController {
var adQueue : APDNativeAdQueue!
override func viewDidLoad() {
super.viewDidLoad()
adQueue.settings.adViewClass = TemplateClass.self
adQueue.settings.autocacheMask = [.icon, .media]
adQueue.settings.type = .video
adQueue.loadAd()
}
}
#import <Appodeal/Appodeal.h>
@interface YourViewController : UIViewController
@property (nonatomic, strong) APDNativeAdQueue* nativeAdQueue;
@property (nonatomic, strong) UIView * nativeAdView;
@end
@implementation YourViewController
- (void)viewDidLoad {
self.nativeAdQueue = [[APDNativeAdQueue alloc] init];
self.nativeAdQueue.settings.type = APDNativeAdTypeVideo;
self.nativeAdQueue.settings.adViewClass = APDDefaultNativeAdView.class;
self.nativeAdQueue.delegate = self;
self.nativeAdQueue.settings.autocacheMask = APDNativeResourceAutocacheIcon | APDNativeResourceAutocacheMedia;
[self.nativeAdQueue loadAd];
}
@end
Соотношение сторон для нативной видеорекламы — 16:9, размер файла каждого ролика около 1-3 Мб.
В Аppodeal SDK существует два типа нативных видеороликов:
- skippable - если установлен флаг “skippable”, видео можно пропустить через 5 секунд после его начала;
- muted - если установлен флаг “muted”, то видео будет проигрываться без звука.
Кэширование Нативной Рекламы
Нативные объявления начнут загружаться, когда будет создан экземпляр класса APDNativeAdQueue. Вам не нужно контролировать жизненный цикл загрузки. Но если вы используете одно из закешированных нативных объявлений, вам нужно иметь сильную ссылку на него в течение всего времени презентации нативной рекламы. Нативное объявление не имеет сильной ссылки на View, а View не имеет сильной ссылки на нативное объявление. Если приложение потеряло ссылку на нативное объявление после презентации его на экране, далее нативное объявление не будет отслеживать и реагировать на события.
Методы Обратного Вызова
Методы обратного вызова позволяют отслеживать различные события в жизненном цикле рекламного блока, например, момент, когда пользователь нажал на рекламу или закрыл ее. Для их вызова установите значение делегата:
- Добавьте
APDNativeAdQueueDelegate
и APDNativeAdPresentationDelegate в header-файл:
- Swift
- Objective C
class YourViewController: APDNativeAdQueueDelegate, APDNativeAdPresentationDelegate { }
@interface YourViewController : UIViewController <APDNativeAdQueueDelegate, APDNativeAdPresentationDelegate>
- Установите делегат:
- Swift
- Objective C
// Loading callbacks delegate
self.adQueue.delegate = self
// Presentation callbacks delegate
self.currentAd.delegate = self
// Loading callbacks delegate
self.adQueue.delegate = self;
// Presentation callbacks delegate
self.currentAd.delegate = self;
- Добавьте следующие функции:
- Swift
- Objective C
extension MainViewController : APDNativeAdPresentationDelegate {
func nativeAdWillLogImpression(_ nativeAd: APDNativeAd!) {}
func nativeAdWillLogUserInteraction(_ nativeAd: APDNativeAd!) {}
}
extension MainViewController : APDNativeAdQueueDelegate {
func adQueue(_ adQueue: APDNativeAdQueue!, failedWithError error: Error!) {}
func adQueueAdIsAvailable(_ adQueue: APDNativeAdQueue!, ofCount count: UInt) {}
}
- (void)adQueueAdIsAvailable:(APDNativeAdQueue *)adQueue ofCount:(NSUInteger)count {
}
- (void)adQueue:(APDNativeAdQueue *)adQueue failedWithError:(NSError *)error {
}
- (void)nativeAdWillLogImpression:(APDNativeAd *)nativeAd {
}
- (void)nativeAdWillLogUserInteraction:(APDNativeAd *)nativeAd {
}
Все функции обратного вызова вызываются в главном потоке.
Использование Шаблонов Для Нативной Рекламы
Для использования своих шаблонов укажите в
настройках adQueue.setting.adViewClass
класс шаблона следующим
образом:
- Swift
- Objective C
adQueue.settings.adViewClass = YourNativeAdViewTemplate.self
adQueue.settings.adViewClass = YourNativeAdViewTemplate.class;
Объекты, указанные в протоколе:
- Swift
- Objective C
protocol APDNativeAdView {
func titleLabel() -> UILabel
func callToActionLabel() -> UILabel
// Optional
func descriptionLabel() -> UILabel
func iconView() -> UIImageView
func mediaContainerView() -> UIView
func contentRatingLabel() -> UILabel
func adChoicesView() -> UIView
func setRating(_ rating: NSNumber)
static func nib() -> UINib
}
@protocol APDNativeAdView <NSObject>
- (nonnull UILabel *)titleLabel;
- (nonnull UILabel *)callToActionLabel;
@optional
- (nonnull UILabel *)descriptionLabel;
- (nonnull UIImageView *)iconView;
- (nonnull UIView *)mediaContainerView;
- (nonnull UILabel *)contentRatingLabel;
- (nonnull UIView *)adChoicesView;
- (void)setRating:(nonnull NSNumber *)rating;
+ (nonnull UINib *)nib;
@end
Объекты, указанные в протоколе:
titleLabel
- контейнер для заголовка текста;callToActionLabel
- контейнер для текста призыва к действию;descriptionLabel
- контейнер для текста описания;iconView
- контейнер для иконки;mediaContainerView
- контейнер для медиа-файлов (изображений и видео);contentRatingLabel
- контейнер для отображения рейтинга контента;adChoicesView
- контейнер для блока adChoice;rating
- контейнер для отображения рейтинга приложения;nib
- nib-файл для шаблона.
Все view должны содержаться в иерархии единого superview
.
Если YourNativeAdViewTemplate
наследуется
от UITableViewCell
(UICollectionViewCell)
, то эти view должны
содержаться в иерархии contentView
.
Получение Всей Нативной Рекламы Из Native AdQueue
- Swift
- Objective C
import UIKit
import Appodeal
class ViewController: UIViewController {
@IBOutlet weak var nativeAdView: UIView!
var nativeAdQueue: APDNativeAdQueue!
var nativeArray: [APDNativeAd] = []
override func viewDidLoad() {
super.viewDidLoad()
nativeAdQueue = APDNativeAdQueue()
nativeAdQueue.settings = APDNativeAdSettings.default()
nativeAdQueue.settings.adViewClass = CustomNativeAdView.self
nativeAdQueue.delegate = self
nativeAdQueue.settings.autocacheMask = [.icon, .media]
nativeAdQueue.loadAd()
}
@IBAction func presentNativeAd(_ sender: Any) {
let nativeAd = nativeArray.first
if let nativeAd = nativeAd {
nativeAd.delegate = self
do {
let adView = try nativeAd.getViewForPlacement("default", withRootViewController: self)
adView.frame = nativeAdView.bounds
nativeAdView.addSubview(adView)
} catch {
print("error")
}
}
}
}
extension ViewController: APDNativeAdQueueDelegate, APDNativeAdPresentationDelegate {
func adQueueAdIsAvailable(_ adQueue: APDNativeAdQueue, ofCount count: UInt) {
if nativeArray.count > 0 {
return
} else {
nativeArray.append(contentsOf: adQueue.getNativeAds(ofCount: 1))
nativeArray.map{( $0.delegate = self )}
}
}
}
#import "ViewController.h"
#import <Appodeal/Appodeal.h>
#import <Appodeal/APDNativeAdQueue.h>
#import "CustomNativeAdView.h"
@interface ViewController ()<APDNativeAdQueueDelegate, APDNativeAdPresentationDelegate>
@property (strong, nonatomic) IBOutlet UIView *nativeAdView;
@property (nonatomic, strong) APDNativeAdQueue* nativeAdQueue;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.nativeAdQueue = [[APDNativeAdQueue alloc] init];
self.nativeAdQueue.settings = [APDNativeAdSettings defaultSettings];
self.nativeAdQueue.settings.adViewClass = [CustomNativeAdView class];
self.nativeAdQueue.delegate = self;
self.nativeAdQueue.settings.autocacheMask = APDNativeResourceAutocacheIcon | APDNativeResourceAutocacheMedia;
[self.nativeAdQueue loadAd];
[Appodeal setLogLevel:APDLogLevelVerbose];
}
- (void)presentNative:(id)sender {
APDNativeAd * nativeAd = [[self.nativeAdQueue getNativeAdsOfCount:1] firstObject];
nativeAd.delegate = self;
CustomNativeAdView * adview = [nativeAd getAdViewForController:self];
[self.nativeAdView addSubview:adview];
adview.frame = self.nativeAdView.bounds;
}
@end
Объект Native Ad
В Appodeal SDK объект NativeAd обладает характеристиками, указанными ниже. Все характеристики с пометкой “Обязательный” должны отображаться в интерфейсе приложения.
Название метода | Обязательный? | Описание |
---|---|---|
NSString *title | Обязательный | Заголовок нативного объявление. Должно отображаться минимум 25 символов названия. Вы можете добавить многоточие в конце строки, если заголовок длиннее. |
NSString *subtitle | Вспомогательный | Подзаголовок нативной рекламы. |
NSString *descriptionText | Вспомогательный | Описание нативного объявления. Оптимальная длина: до 75 символов. Если текст длиннее, добавьте многоточие в конце описания. |
NSString *callToActionText | Обязательный | Призыв к действию. Должен отображаться без усечения на видимой кнопке. |
NSString *contentRating | Вспомогательный | Ограничение по возрасту. |
NSNumber *starRating | Вспомогательный | Рейтинг приложения в диапазоне [0-5]. |
APDImage *mainImage | Вспомогательный | Bitmap изображения. В рекламном объявлении содержатся и иконка, и изображение. Обязательно использование хотя бы одного из этих элементов. Устаревший метод. Вместо него для автоматического показа изображений и видео следует использовать NativeMediaView . |
APDImage *iconImage | Обязательный | Bitmap иконки. В рекламном объявлении содержатся и иконка, и изображение. Обязательно использование хотя бы одного из этих элементов. |
UIView *adChoicesView | Обязательный | View. Если метод не возвращает null, иконка провайдера обязательно должна быть отображена в любом углу рекламного объявления. Используется только для AdChoices в Facebook. |
Распространенные Ошибки При Работе С Нативными Объявлениями
Нет атрибута объявления или иконки AdChoices
Большинство рекламных сетей требуют от издателя добавления специальной метки для нативного объявления, чтобы пользователи не принимали рекламу за контент. Проверьте, что для нативных объявлениях в вашем приложении указаны соответствующие атрибуты рекламы (например, «Ad») или иконка AdChoices.
Отсутствие обязательных элементов объявлений
Каждое нативное объявление должно содержать:
- заголовок;
- кнопку для действия;
- иконку атрибута рекламы или иконку AdChoices;
- изображение, видео или иконку.
Изменение элементов нативных объявлений
Рекламодатели ожидают, что их реклама будет отображаться четко и без каких-либо изменений. Вы можете изменять масштаб кнопки и изображений, но не обрезать, перекрывать или искажать их.
Наложение элементов нативных объявлений друг на друга
Убедитесь, что все элементы нативного объявления видны и не перекрывают друг друга.
Получение Прогнозируемого eCPM
Этот метод возвращает ожидаемый eCPM для загруженного креатива. Цена высчитывается из исторических данных для конкретного рекламного блока.
- Swift
- Objective C
Appodeal.predictedEcpm(for: .nativeAd)
[Appodeal isInitalizedForAdType: AppodealAdTypeNativeAd];
Проверка Инициализации
- Swift
- Objective C
Appodeal.isInitialized(for: .nativeAd)
[Appodeal isInitalizedForAdType: AppodealAdTypeNativeAd];
Возвращает true
, если Нативная реклама была проинициализирована.