Справка

VK Ad SDK предоставляет возможность показывать рекламу в своем приложении, используя собственные визуальные компоненты. 

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

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

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

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

private NativeAd ad;

private void initAd()
{
   // Включение режима отладки
   // MyTargetManager.setDebugMode(true); 

   // Создаем экземпляр NativeAd
   ad = new NativeAd(YOUR_SLOT_ID, this);
}
 

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

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

private NativeAd ad;

private void initAd()
{
   // Создаем экземпляр NativeAd
   ad = new NativeAd(YOUR_SLOT_ID, this);
    
   // Устанавливаем слушатель событий
   ad.setListener(new NativeAd.NativeAdListener()
   {
       @Override
       public void onLoad(NativePromoBanner banner, NativeAd ad)
       {
       }

       @Override
       public void onNoAd(String reason, NativeAd ad)
       {
       }

       @Override
       public void onClick(NativeAd ad)
       {
       }
 
       @Override
       public void onShow(NativeAd ad)
       {
       }

       @Override
       public void onVideoPlay(NativeAd ad)
       {
       }

       @Override
       public void onVideoPause(NativeAd ad)
       {
       }

       @Override
       public void onVideoComplete(NativeAd ad)
       {
       }
   });
        
   // Запускаем загрузку данных
   ad.load();
}

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

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

ad.setCachePolicy(CachePolicy.NONE);
ad.load(); 

Допустимые значения: CachePolicy.ALL (по умолчанию), CachePolicy.IMAGE, CachePolicy.VIDEO, CachePolicy.NONE. 

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

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

Уведомления об успешной загрузке ассетов

Есть возможность поставить слушатель для получения уведомлений об успешной загрузке файлов изображений image и icon в случае автоматической загрузки.

ad.setMediaListener(new NativeAdMediaListener() {
     @Override
     public void onIconLoad(@NonNull NativeAd ad)
     {
         // уведомление об успешной загрузке иконки
     }

     @Override
     public void onImageLoad(@NonNull NativeAd ad)
     {
         // уведомление об успешной загрузке основного 
изображения
     }
 });
ad.load();

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

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

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

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

Визуальный компонент должен быть добавлен в контейнер com.my.target.nativeads.views.NativeAdContainer. 

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

Элемент рекламного ViewСоответствующий id
Root View (ваш AdView)R.id.nativeads_ad_view
Advertising LabelR.id.nativeads_advertising
TitleR.id.nativeads_title
DescriptionR.id.nativeads_description
RatingR.id.nativeads_rating
DomainR.id.nativeads_domain
Age RestrictionsR.id.nativeads_age_restrictions
DisclaimerR.id.nativeads_disclaimer
Call-to-ActionR.id.nativeads_call_to_action
IconR.id.nativeads_icon
MediaAdViewR.id.nativeads_media_view

После заполнения визуального компонента вы должны зарегистрировать его в экземпляре NativeAd, используя метод registerView. 

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

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

@Override
public void onLoad(NativePromoBanner banner, NativeAd ad)
{
   // Заголовок рекламного объявления
   String title = banner.getTitle();
   // Основной текст
   String description = banner.getDescription();
   // Возрастное ограничение. Может быть null
   String ageRestrictions = banner.getAgeRestrictions();
   // Дисклеймер. Может быть null
   String disclaimer = banner.getDisclaimer();
   // Текст метки "Реклама"
   String advertisingLabel = banner.getAdvertisingLabel();

   // Иконка
   ImageData icon = banner.getIcon();
   // Текст действия для кнопки
   String ctaText = banner.getCtaText();
   // Свойства, доступные только для объявлений, рекламирующих приложения
   if (banner.getNavigationType().equals(NavigationType.STORE))
   {
       // Рейтинг приложения (0-5)
       float rating = banner.getRating();
       // Количество оценок
       int votes = banner.getVotes();
       // Категория приложения
       String category = banner.getCategory();
       // Подкатегория приложения
       String subcategory = banner.getSubcategory();
   }
   // Свойства, доступные только для объявлений, рекламирующих сайты
   else if (banner.getNavigationType().equals(NavigationType.WEB))
   {
       //Домен сайта
       String domain = banner.getDomain();
   }
    
   // Пример заполнения визуального компонента
   Context context = YourActivity.this;
   LinearLayout adViewLayout = new LinearLayout(context);
   adViewLayout.setId(R.id.nativeads_ad_view);
   TextView titleView = new TextView(context);
   titleView.setId(R.id.nativeads_title);
   titleView.setText(title);
   adViewLayout.addView(titleView);
   TextView descriptionView = new TextView(context);
   descriptionView.setId(R.id.nativeads_description);
   titleView.setText(description);
   adViewLayout.addView(descriptionView);
   Button btn = new Button(context);
   btn.setId(R.id.nativeads_call_to_action);
   btn.setText(ctaText);
   adViewLayout.addView(btn);

   // Создаем MediaAdView
   MediaAdView mediaView = NativeViewsFactory.getMediaAdView(context);
   mediaView.setId(R.id.nativeads_media_view);
   // Создаем IconAdView
   IconAdView iconView = new IconAdView(context);
   mediaView.setId(R.id.nativeads_icon);
    
   adViewLayout.addView(mediaView);
   adViewLayout.addView(iconView);

   // Создаём контейнер для креатива
   NativeAdContainer nativeAdContainer = new NativeAdContainer(context);
   // Добавляем рекламный креатив в контейнер
   nativeAdContainer.addView(adViewLayout);
    
   // Регистрируем визуальный компонент
   ad.registerView(nativeAdContainer);
 
   // Добавляем на экран
   mainLayout.addView(nativeAdContainer, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}

Компоненты нативной рекламы

В библиотеке представлены как обязательные, так и опциональные элементы. Правила размещения рекламных объявлений требуют отображения только обязательных элементов. 

Однако макеты с полным набором компонентов более кликабельные, поэтому мы рекомендуем использовать именно их. 

КомпонентОбязательность
Рекламная меткаДа
ВозрастДа
ДисклеймерДа
ДоменДа
ЗаголовокДа
Значок менюДа
ИконкаДа, для рекламы приложений
Кнопка действияДа
МедиаДа
ОписаниеНет
Рейтинг (для приложений)Нет

Используйте макет, который отображает весь набор обязательных и опциональных компонентов рекламы

Пример нативного блока для рекламы сайта
Пример нативного блока для рекламы приложения
1 из 2
Пример нативного блока для рекламы сайта

Иконка AdChoices

VK Ad SDK автоматически добавляет иконку AdChoices в каждый визуальный компонент. По умолчанию иконка добавляется в правый верхний угол визуального компонента, но вы вы можете выбрать предпочитаемый угол с помощью метода setAdChoicesPlacement(int placement):

...
ad.setAdChoicesPlacement(AdChoicesPlacement.TOP_RIGHT);
ad.load(); 

Ручная настройка AdChoices

В случае если необходимо установить свое изображение для AdChoices, нужно использовать класс NativeAdChoicesView и передать туда изображение с помощью методов setImageBitmap() или setImageDrawable().

...
NativeAdChoicesView myAdChoicesView = createMyAdChoicesView(); // создание своей NativeAdChoicesView
myAdChoicesView.setImageBitmap(bitmap);
myAdChoicesView.setImageDrawable(drawable);
...
 

В случае если требуется ручное позиционирование AdChoicesView (выставление гравитации, маржинов) внутри своей View для показа нативной рекламы, требуется указать AdChoicesPlacement.MANUAL.

...
ad.setAdChoicesPlacement(AdChoicesPlacement.MANUAL);
ad.load(); 

Кастомизация кнопки AdChoices

Разработчик может сам отрисовать кнопку адчойсов так, как ему необходимо, но в таком случае для NativeAd нужно задать свойство AdChoicesPlacement.DRAWING_MANUAL. Также необходимо вызывать метод ad.handleAdChoicesClick(context) для обработки нажатия на адчойсы.

...
ad.setAdChoicesPlacement(AdChoicesPlacement.DRAWING_MANUAL);
ad.load();
...
customAdChoicesView.setOnClickListener(v->{
   ad.handleAdChoicesClick(context)
})
 

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

//получение иконки адчойсов через переменную
ad.getBanner().getAdChoicesIcon();
...
//получение иконки адчойсов через слушатель
ad.setAdChoicesListener(new NativeAd.NativeAdChoicesListener() {
   @Override
   public void onAdChoicesIconLoad(@Nullable ImageData imageData, boolean success, @NonNull NativeAd ad)
   {
       customAdChoicesView.setImageBitmap(imageData.getBitmap)
   }
});
 

Кастомизация отрисовки опций AdChoices

Для изменения дизайна отрисовки опций AdChoices необходимо в конструкторе NativeAd передать объект, реализующий интерфейс MenuFactory, который в свою очередь должен должен возвращать объект реализующий интерфейс Menu.

MenuFactory menuFactory = new MenuFactory()
   {
       @Override
       @NonNull public Menu createMenu()
       {
           return new Menu()
           {
               @Override
               public void setListener(@Nullable Listener listener)
               {
                   //слушатель, у которого нужно вызвать метод onActionClick(menuAction) при нажатии на тот элемент UI, который был отрисован с соответствующим заголовком menuAction
               }

               @Override
               public void addAction(@NonNull MenuAction menuAction)
               {
                   // это объект который содержит в себе заголовок и тип опции адчойсов, эти объекты нужно нужно использовать при отрисовке
               }

               @Override
               public void present(@NonNull Context context)
               {
                   // данный метод вызывается когда необходимо отобразить опции адчойсов с теми menuAction, которые были ранее получены из метода addAction()
               }

               @Override
               public void dismiss()
               {
                   // данный метод вызывается когда необходимо закрыть отрисовку опций адчойсов
               }
           };
       }
   };
...
ad = new NativeAd(YOUR_SLOT_ID, menuFactory, this);
ad.load();
 

Управление закрытием рекламы

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

  • boolean shouldCloseAutomatically() — говорит SDK о том, стоит ли автоматически закрывать рекламу. Если метод возвращает true, то SDK автоматически скроет рекламу. Если false, то возможность скрыть предоставляется разработчику. 
  • onCloseAutomatically() — уведомляет разработчика, что реклама была скрыта автоматически, средствами SDK. Таким образом, этот метод вызовется, только если shouldCloseAutomatically вернет true. 
  • closeIfAutomaticallyDisabled() — уведомляет разработчика, что ему нужно скрыть рекламу самостоятельно. Таким образом, этот метод вызовется, только если shouldCloseAutomatically вернет false.

NativeAd.NativeAdChoicesOptionListener adChoicesOptionListener = new NativeAd.NativeAdChoicesOptionListener()
{
   @Override
   public boolean shouldCloseAutomatically()
   {
       return false;
   }

   @Override
   public void onCloseAutomatically(@NonNull NativeBannerAd ad)
   {

   }

   @Override
   public void closeIfAutomaticallyDisabled(@NonNull NativeBannerAd ad)
   {

   }
};
        
ad.setAdChoicesOptionListener(adChoicesOptionListener);
 

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

В приведенном выше примере визуальный компонент регистрируется с помощью метода registerView(View view). В этом случае вся область визуального компонента является кликабельной. VK Ad SDK предоставляет возможность указать конкретные визуальные компоненты, клики на которые будут отслеживаться. Для этого воспользуйтесь методом registerView(View view, List<View> clickableViews):

@Override
public void onLoad(NativePromoBanner banner, NativeAd ad)
{
   ...
   ...
   ...
    
   // Создаем массив кликабельных визуальных компонентов, заголовка и кнопки призыва к действию
   ArrayList<View> clickableViews = new ArrayList<>();
   clickableViews.add(titleView);
   clickableViews.add(btn);
   // Регистрируем визуальный компонент, с кликабельными заголовком и кнопкой призыва к действию
   ad.registerView(adViewLayout, clickableViews);
 
   // Добавляем на экран
   mainLayout.addView(adViewLayout, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
 

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

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

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

NativeAdView

public void onLoad(NativePromoBanner banner, NativeAd ad)
{
   // Создаем визуальный компонент
   NativeAdView nativeAdView = NativeViewsFactory.getNativeAdView(ad, YourActivity.this);
    
   // Доступные для настройки внутренние визуальные компоненты
   TextView advLabelView = nativeAdView.getAdvertisingTextView();
   TextView ageRestrictionView = nativeAdView.getAgeRestrictionTextView();
   TextView disclaimerView = nativeAdView.getDisclaimerTextView();
   TextView titleView = nativeAdView.getTitleTextView();
   TextView descriptionView = nativeAdView.getDescriptionTextView();  
   Button ctaBtn = nativeAdView.getCtaButtonView();
   TextView votesView = nativeAdView.getVotesTextView();
   StarsRatingView starsRatingView = nativeAdView.getStarsRatingView();
   TextView domainView = nativeAdView.getDomainOrCategoryTextView();
   MediaAdView mediaView = nativeAdView.getMediaAdView();
   IconAdView iconView = nativeAdView.getIconImageView();

   // Создаём контейнер для креатива
   NativeAdContainer nativeAdContainer = new NativeAdContainer(context);
   // Добавляем рекламный креатив в контейнер
   nativeAdContainer.addView(nativeAdView);
    
   // Регистрируем визуальный компонент
   ad.registerView(nativeAdContainer);
    
   // Добавляем на экран
   mainLayout.addView(nativeAdContainer, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
 

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

VK Ad SDK предоставляет класс NativeAdLoader, который дает возможность загрузить от 1 до 20 баннеров одним запросом. Для NativeAdLoader вы можете настроить все те же параметры, которые доступны для настройки в NativeAd (например, параметры пола и возраста пользователя, автозагрузку изображений и видео). 

VK Ad SDK не гарантирует, что будет загружено количество баннеров, указанное в параметре COUNT — этот параметр указывает на максимальное количество баннеров, которое вы хотите получить.

// Включение режима отладки
// MyTargetManager.setDebugMode(true); 

// Создаем NativeAdLoader
NativeAdLoader nativeAdLoader = NativeAdLoader.newLoader(YOUR_SLOT_ID, COUNT, this);

// Устанавливаем OnLoad коллбек и загружаем баннеры
nativeAdLoader.setOnLoad(new OnLoad()
{
  @Override
  public void onLoad(@NonNull List<NativeAd> ads)
  {
     for (NativeAd ad : ads)
     {
       // Устанавливаем слушатель событий
       ad.setListener(nativeAdListener);
        
       NativePromoBanner promoBanner = ad.getBanner();
       // Код, аналогичный методу onLoad интерфейса NativeAdListener
     }
  }
}).load();
 

Полученный массив будет содержать от 0 до COUNT объектов NativeAd — каждый из них содержит уже загруженный NativePromoBanner и с каждым из них надо работать так же, как описано в этой документации выше, начиная с вызова метода onLoad.