Справка

Нативный баннер Android (доступен по запросу)

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

Нативный баннер не поддерживает MediaAdView и поэтому не может отображать медиа-контент (видео, карточки, большую картинку).

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

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

private NativeBannerAd ad;

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


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

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

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

private NativeBannerAd ad;

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

       @Override
       public void onNoAd(IAdLoadingError adLoadingError, NativeBannerAd ad)
       {
       }

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

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

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

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

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

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

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

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

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

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

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

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

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

Визуальные компоненты (как стандартные, так и собственные) следует положить внутрь биндера — объекта приложения, который реализует интерфейс NativeBannerAdViewBinder.

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

@Override
void onLoad(NativeBanner banner, NativeBannerAd ad)
{
   // Пример заполнения визуального компонента
   Context context = YourActivity.this; // текущая активити

   // RelativeLayout взят для примера - это вьюшка-контейнер для баннера
   RelativeLayout adViewLayout = new RelativeLayout(context);

   TextView ageView = new TextView(context);
   // Возрастное ограничение
   ageView.setText(banner.getAgeRestrictions());

   TextView advertisingLabel = new TextView(context);
   // Текст метки "Реклама"
   advertisingLabel.setText(banner.getAdvertisingLabel());

   TextView titleView = new TextView(context);
   // Заголовок рекламного объявления
   titleView.setText(banner.getTitle());

   titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16.0f);
   titleView.setTypeface(null, Typeface.BOLD);
   titleView.setMaxLines(2);
   titleView.setEllipsize(TextUtils.TruncateAt.END);

   TextView domainView = new TextView(context);
   // Валидно только если (banner.navigationType == NavigationType.WEB)
   domainView.setText(banner.getDomain());

   IconAdView iconView = new IconAdView(context);
   // IconAdView - это вьюшка из SDK, он сам отобразит иконку внутри этой вьюшки
   // Дополнительные настройки не обязательны

   TextView disclaiberLabel = new TextView(context);
   disclaiberLabel.setText(banner.getDisclaimerInfo().text);

   Button ctaButton = new Button(context);
   // Текст действия для кнопки
   ctaButton.setText(banner.getCtaText());

   //
   // Размещаем вьюшки внутри RelativeLayout
   //

   RelativeLayout.LayoutParams adViewLp = new RelativeLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT);
   adViewLayout.setLayoutParams(adViewLp);

   ageView.setId(View.generateViewId());
   // ...

   RelativeLayout.LayoutParams ageViewLp = new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
   ageViewLp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
   ageViewLp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

   ageView.setLayoutParams(ageViewLp);
   adViewLayout.addView(ageView);

   //
   // Здесь остальной код для размещения вьюшек внутри adViewLayout
   // ...

   // Создаём биндер нативного баннера
   // Примечание: в этом примере создаются не все вьюшки.
   //             Это сделано, чтобы не усложнять пример.
   NativeBannerAdViewBinder binder = new NativeBannerAdViewBinder() {
       @NonNull @Override public View getAgeRestrictionView() { return ageView; }
       @NonNull @Override public View getAdvertisingView() { return advertisingLabel; }
       @NonNull @Override public IconAdView getIconView() { return iconView; }
       @Nullable @Override public View getTitleView() { return titleView; }
       @NonNull @Override public View getDomainView() { return domainView; }
       @Nullable @Override public View getCtaView() { return ctaButton; }
       @Nullable @Override public View getVotesView() { return null; }
       @Nullable @Override public View getStarsRatingView() { return null; }
       @NonNull @Override public View getDisclaimerView() { return disclaiberLabel; }
       @Nullable @Override public View getAdChoicesView() { return null; }
       @NonNull @Override public ViewGroup getRootAdBannerView() { return adViewLayout; }
   };

   // Регистрируем биндер с визуальными компонентами
   ad.registerView(binder);

   // Добавляем на экран.
   // mainLayout задаёт размеры и местоположение нативного баннера на экране приложения.
   mainLayout.addView(binder.getRootAdBannerView(), MATCH_PARENT, WRAP_CONTENT);
}

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

Иконка AdChoices

myTarget SDK автоматически добавляет иконку AdChoices в каждый визуальный компонент. По умолчанию иконка добавляется в правый верхний угол визуального компонента, но вы вы можете выбрать предпочитаемый угол с помощью свойства adChoicesPlacement:

...
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

Разработчик может сам отрисовать кнопку адчойсов так как ему необходимо, но в таком случае для NativeBannerAd нужно задать свойство 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 NativeBannerAd.NativeBannerAdChoicesListener() {
   @Override
   public void onAdChoicesIconLoad(@Nullable ImageData imageData, boolean success, @NonNull NativeAd ad)
   {
       customAdChoicesView.setImageBitmap(imageData.getBitmap)
   }
});

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

Для изменения дизайна отрисовки опций адчойсов необходимо в конструкторе NativeBannerAd передать объект реализующий интерфейс 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 NativeBannerAd(YOUR_SLOT_ID, menuFactory, this);
ad.load();

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

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

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

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

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

   }

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

   }
};
        
ad.setAdChoicesOptionListener(adChoicesOptionListener);

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

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

@Override
void onLoad(NativeBanner banner, NativeBannerAd ad)
{
   ...
   ...
   ...

   // Создаем массив кликабельных визуальных компонентов, заголовка и кнопки призыва к действию
   List<View> clickableViews = List.of(titleView, ctaButton);

   // Регистрируем биндер с вьюшками, с кликабельными заголовком и кнопкой призыва к действию
   ad.registerView(binder, clickableViews);

   // Добавляем на экран.
   // mainLayout задаёт размеры и местоположение нативного баннера на экране приложения.
   mainLayout.addView(binder.getRootAdBannerView(), MATCH_PARENT, WRAP_CONTENT);
}

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

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

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

NativeBannerAdView

@Override
void onLoad(NativeBanner banner, NativeBannerAd ad)
{
   // Создаем и инициализируем визуальный компонент
   NativeBannerAdView nativeBannerAdView = NativeViewsFactory.getNativeBannerAdView(YourActivity.this);
   nativeBannerAdView.setupView(banner);

   // Доступные для настройки внутренние визуальные компоненты
   TextView advLabelView = nativeBannerAdView.getAdvertisingTextView();
   TextView ageRestrictionView = nativeBannerAdView.getAgeRestrictionTextView();
   TextView disclaimerView = nativeBannerAdView.getDisclaimerTextView();
   TextView titleView = nativeBannerAdView.getTitleTextView();
   View ctaBtn = nativeBannerAdView.getCtaButtonView();
   TextView votesView = nativeBannerAdView.getVotesTextView();
   StarsRatingView starsRatingView  = nativeBannerAdView.getStarsRatingView();
   TextView domainView = nativeBannerAdView.getDomainTextView();
   IconAdView iconView = nativeBannerAdView.getIconView();

   // Получаем биндер
   NativeBannerAdViewBinder binder = nativeBannerAdView.getNativeBannerAdViewBinder();

   // Регистрируем визуальный компонент
   ad.registerView(binder);

   // Добавляем на экран.
   // mainLayout задаёт размеры и местоположение нативного баннера на экране приложения.
   mainLayout.addView(binder.getRootAdBannerView(), MATCH_PARENT, WRAP_CONTENT);
}

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

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

MyTarget SDK предоставляет класс NativeBannerAdLoader, который дает возможность загрузить от 1 до 20 баннеров одним запросом. Для NativeBannerAdLoader вы можете настроить все те же параметры, которые доступны для настройки в NativeBannerAd (например, параметры пола и возраста пользователя, автозагрузку изображений и видео). myTarget SDK не гарантирует, что будет загружено количество баннеров, указанное в параметре COUNT — этот параметр указывает на максимальное количество баннеров, которое вы хотите получить.

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

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

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

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