Уважаемые партнеры!

В 2024 году мы сфокусируемся на развитии обновленного кабинета паблишера. Для партнеров myTarget мы максимально упростили и автоматизировали переход в новый интерфейс, рекомендуем вам сделать это прямо сейчас:

  1. Зайдите по ссылке https://ads.vk.com/partner и нажмите «Перейти в кабинет».
  2. В открывшемся окне выберите «Использовать рекламный кабинет myTarget» и разрешите доступ к нему.
  3. В новый кабинет автоматически перенесутся все настройки, реквизиты, площадки, рекламные блоки и статистика. Баланс в кабинетах станет единым.
В новом кабинете вас ждет: быстрое и удобное управление, расширенная статистика, новые настройки и форматы.

Рекламные форматы Android


Баннеры

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

Для показа баннеров форматов 320x50, 300x250 и 728x90 и Adaptive в своем приложении необходимо создать экземпляр класса MyTargetView. MyTargetView - визуальный компонент, наследник ViewGroup, который должен быть добавлен на экран приложения.

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

По умолчанию устанавливается адаптивный формат баннера. При этом баннер автоматически растягивается по ширине экрана с сохранением пропорций, а высота будет не менее 50dip, но не более 15% от высоты экрана. Система сама следит за изменением размеров экрана/переворотом и изменяет размер баннера соответственно.

Есть возможность переустановить свойство adSize. В этом случае SDK перестанет отслеживать изменения ориентации устройства и менять размеры адаптивного баннера. В этом случае при использовании баннеров адаптивного размера необходимо самостоятельно отслеживать изменения

private MyTargetView adView;
 
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_layout);
 
    // Включение режима отладки
    // MyTargetManager.setDebugMode(true);
 
 
    // Создаем экземпляр MyTargetView
    adView = new MyTargetView(this);
     
    // Задаём id слота
    adView.setSlotId(YOUR_SLOT_ID);
 
    // опционально: если не задать размер, то будет использоваться адаптивный формат
    adView.setAdSize(AdSize.ADSIZE_320x50);
}
Загрузка и показ рекламных объявлений

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

private MyTargetView adView;
 
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_layout);
 
 
    RelativeLayout layout = (RelativeLayout) findViewById(R.id.activityLayout);
 
    // Создаем экземпляр MyTargetView
    adView = new MyTargetView(this);
     
    // Устанавливаем id слота
    adView.setSlotId(YOUR_SLOT_ID);
 
    // Устанавливаем LayoutParams
    adViewLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    adViewLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    adView.setLayoutParams(adViewLayoutParams);
     
    // Устанавливаем слушатель событий
    adView.setListener(new MyTargetView.MyTargetViewListener()
    {
        @Override
        public void onLoad(MyTargetView myTargetView)
        {
            // Данные успешно загружены, запускаем показ объявлений
            layout.addView(adView);
        }
 
        @Override
        public void onNoAd(String reason, MyTargetView myTargetView)
        {  
        }
 
 
        @Override
        public void onShow(MyTargetView myTargetView)
        {
        }
 
        @Override
        public void onClick(MyTargetView myTargetView)
        {
        }
    });
     
    // Запускаем загрузку данных
    adView.load();
}
     
@Override
protected void onDestroy()
{
    if (adView != null) adView.destroy();
    super.onDestroy();
}
Установка MyTargetView в xml

Имеется возможность установить MyTargetView как элемента в layout xml.

<com.my.target.ads.MyTargetView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/view_ad"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:myTarget_isRefreshAd="false"  // отключение ротации баннеров
    app:myTarget_adSize="banner_320x50" // указание формата, воможные значения: banner_320x50, banner_30x250, banner_728x90, adaptive
    app:myTarget_slotId="7250"> // номер слота
</com.my.target.ads.MyTargetView>
Ротация

Рекламные объявления ротируются каждые 60 секунд. Вы можете отключить автоматическую ротацию объявлений при инициализации экземпляра MyTargetView. Ротируются только баннеры форматов 320х50 и 728x90, баннеры 300х250 не ротируются.

// Выключение автоматической ротации баннеров
adView.setRefreshAd(false);
Баннер 320x50

Полноэкранная реклама

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

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

private InterstitialAd ad;
 
private void initAd()
{
    // Включение режима отладки
    // MyTargetManager.setDebugMode(true);
     
    // Создаем экземпляр InterstitialAd
    ad = new InterstitialAd(YOUR_SLOT_ID, this);
}
Загрузка рекламных объявлений

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

private InterstitialAd ad;
 
private void initAd()
{
    // Создаем экземпляр InterstitialAd
    ad = new InterstitialAd(YOUR_SLOT_ID, this);
    // Устанавливаем слушатель событий
    interstitialAd.setListener(new InterstitialAd.InterstitialAdListener()
    {
        @Override
        public void onLoad(InterstitialAd ad)
        {
        }
 
        @Override
        public void onNoAd(String reason, InterstitialAd ad)
        {
        }
  
        @Override
        public void onClick(InterstitialAd ad)
        {
        }
  
        @Override
        public void onDisplay(InterstitialAd ad)
        {
        }
  
        @Override
        public void onDismiss(InterstitialAd ad)
        {
        }
  
        @Override
        public void onVideoCompleted(InterstitialAd ad)
        {
        }
    });
     
    // Запускаем загрузку данных
    ad.load();
}
Показ рекламных объявлений

После успешной загрузки данных вы можете запустить показ полноэкранной рекламы.


@Override
public void onLoad(InterstitialAd ad)
{
    // Запускаем показ
    // в отдельном Activity
    ad.show();
}
Пример полноэкранного баннера

Полноэкранная реклама с вознаграждением (Rewarded видео)

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

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

private RewardedAd ad;
 
private void initAd()
{
    // Включение режима отладки
    // MyTargetManager.setDebugMode(true);
     
    // Создаем экземпляр RewardedAd
    ad = new RewardedAd(YOUR_SLOT_ID, this);
}
Загрузка рекламных объявлений

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

private RewardedAd ad;
 
private void initAd()
{
    // Создаем экземпляр RewardedAd
    ad = new RewardedAd(YOUR_SLOT_ID, this);
    // Устанавливаем слушатель событий
    ad.setListener(new RewardedAd.RewardedAdListener()
    {
        @Override
        public void onLoad(RewardedAd ad)
        {
        }
 
        @Override
        public void onNoAd(String reason, RewardedAd ad)
        {
        }
  
        @Override
        public void onClick(RewardedAd ad)
        {
        }
  
        @Override
        public void onDisplay(RewardedAd ad)
        {
        }
  
        @Override
        public void onDismiss(RewardedAd ad)
        {
        }
  
        @Override
        void onReward(@NonNull Reward reward, @NonNull RewardedAd ad)
        {
        }
    });
     
    // Запускаем загрузку данных
    ad.load();
}
Показ рекламных объявлений

После успешной загрузки данных вы можете запустить показ полноэкранной рекламы.

@Override
public void onLoad(RewardedAd ad)
{
    // Запускаем показ
    ad.show();
}
Reward

При получении награды за просмотр полноэкранной рекламы в метод onReward слушателя передаётся объект Reward, содержащий поле type

Reward.type

Нативная реклама

myTarget 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

После заполнения визуального компонента вы должны зарегистрировать его в экземпляре 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);
}

Иконка AdChoices

myTarget 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)
    }
});

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

Для изменения дизайна отрисовки опций адчойсов необходимо в конструкторе 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). В этом случае вся область визуального компонента является кликабельной. MyTarget 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);
}

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

MyTarget 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);
}

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

MyTarget SDK предоставляет класс NativeAdLoader, который дает возможность загрузить от 1 до 20 баннеров одним запросом. Для NativeAdLoader вы можете настроить все те же параметры, которые доступны для настройки в NativeAd (например, параметры пола и возраста пользователя, автозагрузку изображений и видео). myTarget 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.

Нативные баннеры

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(String reason, 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.

Визуальные компоненты (как стандартные, так и собственные) следует положить внутрь контейнера NativeAdContainer.
При этом в метод registerView можно передавать как сам компонент, так и контейнер.
При создании контейнера, визуальный компонент adView будет добавлен как subview в контейнер и растянут по размерам контейнера.

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

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

@Override
public void onLoad(NativeBanner banner, NativeBannerAd ad)
{
    // Заголовок рекламного объявления
    String title = banner.getTitle();
    // Возрастное ограничение. Может быть 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();
    }
    // Свойства, доступные только для объявлений, рекламирующих сайты
    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);
    Button btn = new Button(context);
    btn.setId(R.id.nativeads_call_to_action);
    btn.setText(ctaText);
    adViewLayout.addView(btn);
 
    // Компонент показа иконки
    IconAdView iconView = new IconAdView(context);
    mediaView.setId(R.id.nativeads_icon);
     
    adViewLayout.addView(iconView);
 
 
    // Создаём контейнер для креатива
    NativeAdContainer nativeAdContainer = new NativeAdContainer(context);
    // Добавляем рекламный креатив в контейнер
    nativeAdContainer.addView(adViewLayout);
     
    // Регистрируем визуальный компонент
    ad.registerView(adViewLayout);
  
    // Добавляем на экран
    mainLayout.addView(nativeAdContainer, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}

Иконка 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(View view). В этом случае вся область визуального компонента является кликабельной. MyTarget SDK предоставляет возможность указать конкретные визуальные компоненты, клики на которые будут отслеживаться. Для этого воспользуйтесь методом registerView(View view, List<View> clickableViews):

@Override
public void onLoad(NativeBanner banner, NativeBannerAd 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);
}

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

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

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

NativeBannerAdView

public 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();
    Button ctaBtn = nativeBannerAdView.getCtaButtonView();
    TextView votesView = nativeBannerAdView.getVotesTextView();
    StarsRatingView starsRatingView = nativeBannerAdView.getStarsRatingView();
    TextView domainView = nativeBannerAdView.getDomainOrCategoryTextView();
    IconAdView iconView = nativeBannerAdView.getIconImageView();
 
    // Создаём контейнер для креатива
    NativeAdContainer nativeAdContainer = new NativeAdContainer(context);
    // Добавляем рекламный креатив в контейнер
    nativeAdContainer.addView(nativeBannerAdView);
     
    // Регистрируем визуальный компонент
    ad.registerView(nativeAdContainer);
     
    // Добавляем на экран
    mainLayout.addView(nativeAdContainer, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}

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

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.

In-stream видео

myTarget SDK предоставляет возможность показывать in-stream видеорекламу в своем приложении во время просмотра видео. Реклама может быть показана перед началом показа видео (preroll), во время показа (midroll) и после показа (postroll). SDK загружает данные и предоставляет приложению возможность показывать рекламу как в своем видео-плеере, так и в плеере приложения.

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

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

private InstreamAd ad;
 
private void initAd()
{
    // Включение режима отладки
    // MyTargetManager.setDebugMode(true);
 
    // Создаем экземпляр InstreamAd
    ad = new InstreamAd(YOUR_SLOT_ID, this);
}

Использование плеера приложения

Для проигрывания рекламы в плеере приложения, он должен реализовывать интерфейс InstreamAdPlayer и уведомлять установленный ему слушатель AdPlayerListener. Для использования своего плеера надо вызвать метод setPlayer(InstreamAdPlayer player) у созданного экземпляра InstreamAd.

private InstreamAd ad;
 
private void initAd()
{
    // Создаем экземпляр InstreamAd
    ad = new InstreamAd(YOUR_SLOT_ID, this);
     
    // Устанавливаем плеер
    ad.setPlayer(YOUR_PLAYER);
}

Кнопка adChoices

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

customAdChoicesView.setOnClickListener(v->
{
    ad.handleAdChoicesClick(context)
})

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

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

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 InstreamAd(YOUR_SLOT_ID, menuFactory, this);
ad.load();

Интерфейс InstreamAdPlayer

Методы интерфейса InstreamAdPlayer вызываются экземпляром InstreamAd. Вызывать их самостоятельно не требуется.
1. Длительность рекламного видео

float getAdVideoDuration();

2. Текущая позиция рекламного видео. Метод вызывается многократно во время воспроизведения рекламного видео и должен отдавать актуальное значение в секундах.

float getAdVideoPosition();

3. Устанавливает слушатель плеера

void setAdPlayerListener(AdPlayerListener listener);

4. Визуальное представление плеера, обычно this.

View getView();

5. Устанавливает громкость от 0 до 1.

void setVolume(float volume);
6. Запускает воспроизведение рекламного видео.

  • uri - путь к видео
  • width - ширина видео в пикселях
  • height - высота видео в пикселях

void playAdVideo(Uri uri, int width, int height);
7. Приостанавливает проигрывание рекламного видео.

void pauseAdVideo();

8. Возобновляет проигрывание рекламного видео.

void resumeAdVideo();

9. Останавливает проигрывание рекламного видео.

void stopAdVideo();

Интерфейс InstreamAdPlayer.AdPlayerListener

Методы обратного вызова интерфейса AdPlayerListener для установленного слушателя должны быть вызваны плеером в ответ на вызовы методов интерфейса InstreamAdPlayer при наступлении определенных событий.

void onAdVideoStarted();

Метод должен быть вызван после успешного начала воспроизведения рекламного видео, как ответ на вызов метода playAdVideo().

void onAdVideoPaused();

Метод должен быть вызван после приостановки проигрывания рекламного видео, как ответ на вызов метода pauseAdVideo().

void onAdVideoResumed();

Метод должен быть вызван после возобновления проигрывания рекламного видео, как ответ на вызов метода resumeAdVideo().

void onAdVideoStopped();

Метод должен быть вызван после остановки проигрывания рекламного видео, как ответ на вызов метода stopAdVideo().

void onAdVideoError(String message);

Метод должен быть вызван при возникновении какой-либо ошибки при проигрывании рекламного видео.

void onAdVideoCompleted();

Метод должен быть вызван при завершении проигрывания рекламного видео.

void onVolumeChanged(float volume);
Метод должен быть вызван при изменении громкости.

Использование плеера SDK

myTarget SDK предоставляет один из двух готовый плеер для проигрывания рекламы. Для использования плеера SDK достаточно вызвать метод useDefaultPlayer() у созданного экземпляра InstreamAd и добавить плеер на экран приложения. При этом будет использоваться ExoPlayer. Если же указать useDefaultPlayer(false) то будет использован стандартный плеер Android SDK.

private InstreamAd ad;
 
private void initAd()
{
    // Создаем экземпляр InstreamAd
    ad = new InstreamAd(YOUR_SLOT_ID, this);
     
    // Устанавливаем плеер SDK
    // В качестве параметра можно передать false, если хотим использовать стандартный плеер Android SDK вместо ExoPlayer
    ad.useDefaultPlayer();
    // Добавляем плеер на экран
    layout.addView(ad.getPlayer().getView());
}

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

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

private InstreamAd ad;
 
private void initAd()
{
    // Создаем экземпляр InstreamAd
    ad = new InstreamAd(YOUR_SLOT_ID, this);
     
    // Устанавливаем слушатель событий
    ad.setListener(new InstreamAd.InstreamAdListener()
    {
        @Override
        public void onLoad(InstreamAd instreamAd)
        {
            // Данные успешно загружены
        }
 
        @Override
        public void onNoAd(String reason, InstreamAd instreamAd)
        {
            // Данные не получены
        }
 
        @Override
        public void onError(String reason, InstreamAd ad)
        {
            // При проигрывании рекламного видео произошла ошибка
        }
 
        @Override
        public void onBannerStart(InstreamAd ad, InstreamAd.InstreamAdBanner instreamAdBanner)
        {
            // Началось проигрывание рекламного видео
        }
 
 
        @Override
        public void onBannerPause(InstreamAd ad, InstreamAd.InstreamAdBanner instreamAdBanner)
        {
            // Проигрывание рекламного видео приостановлено
        }
 
 
        @Override
        public void onBannerResume(InstreamAd ad, InstreamAd.InstreamAdBanner instreamAdBanner)
        {
            // Проигрывание рекламного видео возобновлено
        }
 
        @Override
        public void onBannerComplete(InstreamAd ad, InstreamAd.InstreamAdBanner instreamAdBanner)
        {
            // Проигрывание рекламного видео завершено
        }
 
        @Override
        public void onBannerTimeLeftChange(float timeLeft, float duration, InstreamAd ad)
        {
            // Вызывается многократно во время воспроизведения рекламного видео, используется для обновления таймера до окончания показа рекламного видео
        }
 
        @Override
        public void onComplete(String section, InstreamAd ad)
        {
            // Проигрывание всех рекламных видео в рекламной секции завершено
        }
 
        @Override
        public void onBannerShouldClose()
        {
            // Вызывается когда проигрывание рекламы должно быть завершено разработчиком самостоятельно. Пример: ad.skip()
        }  
    });
         
    // Запускаем загрузку данных
    ad.load();
}

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

После успешной загрузки данных вы можете запустить показ рекламных секций. Каждая секция секция может содержать несколько рекламных видео, после начала проигрывания каждого будет вызван метод onBannerStart в установленном слушателе InstreamAdListener, после завершения проигрывания каждого видео будет вызван метод onBannerComplete. После завершения проигрывания всех рекламных видео в запущенной секции будет вызван метод onComplete - именно его вы должны использовать для дальнейших действий, он будет вызван даже если в процессе проигрывания произошла ошибка и был вызван метод onError.

Показ preroll и postroll секций

Для показа preroll секции необходимо перед началом показа видео вызвать метод startPreroll у экземпляра InstreamAd.

Для показа postroll секции необходимо после окончания показа видео вызвать метод startPostroll.

// Перед началом показа основного видео
ad.startPreroll();
  
// После показа основного видео
ad.startPostroll();

Показ midroll секции

Для показа midroll секции в какой-то позиции видео необходимо после создания экземпляра InstreamAd задать массив позиций, на которых планируется показ midroll секции. Позиции можно задавать как в секундах, так и в процентах от длительности видео.

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

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

private InstreamAd ad;
 
private void initAd()
{
    // Создаем экземпляр InstreamAd
    ad = new InstreamAd(YOUR_SLOT_ID, this);
     
    // Устанавливаем позиции на первой и пятой секунде видео
    ad.configureMidpoints(videoDuration, new float[]{1f,5f});
    // или в процентах, на 10% и 50% видео
    // ad.configureMidpointsPercents(videoDuration, new float[]{10f,50f});
 
    // Устанавливаем слушатель событий
    ad.setListener(new InstreamAd.InstreamAdListener()
    {
        @Override
        public void onLoad(InstreamAd instreamAd)
        {
            // Данные успешно загружены
            // Массив позиций (в секундах), доступных для показа midroll секции
            adPositions = ad.getMidPoints();
        }
         
        ...
    });
     
    // Запускаем загрузку данных
    ad.load();
}
При достижении основным видео одной из позиций для midroll секции необходимо вызвать метод startMidroll и передать в него в качестве параметра эту позицию.

// Видео доигралось до 5-й секунды и для неё есть позиция в массиве adPositions
ad.startMidroll(adPositions[1]);

Доступные свойства рекламного видео

В методы onBannerStart и onBannerComplete слушателя InstreamAdListener передается экземпляр InstreamAdBanner, содержащий информацию о текущем рекламном видео, которая может быть использована приложением.

public final float duration;
Длительность текущего рекламного видео в секундах.

public final boolean allowClose;
Разрешено ли закрывать рекламное видео во время проигрывания. Используется для управления показом кнопки «Закрыть» или «Пропустить».

public final float allowCloseDelay;

Время в секундах, через которое рекламное видео может быть закрыто. Используется для управления показом кнопки «Закрыть» или «Пропустить».

public final int videoWidth;
public final int videoHeight;
Ширина и высота рекламного видео.

public String ctaText;

Текст для call-to-action кнопки.

public boolean hasAdChoices;
Наличие адчойсов.

public String advertisingLabel;
Рекламный заголовок.

public ImageData adChoicesIcon;
Иконка адчойса.

Обработка кликов

Приложение должно самостоятельно отслеживать клики по рекламному видео (как правило, по cta кнопке) и вызывать метод handleClick в экземпляре InstreamAd для обработки клика и перехода на рекламируемый сайт или приложение.

private void onAdClick()
{
    ad.handleClick();
}

Управление состоянием

У экземпляра InstreamAd доступны следующие методы управления.

public void pause()
Приостанавливает проигрывание рекламного видео.

public void resume()

Возобновляет проигрывание рекламного видео.

public void stop()

Останавливает показ рекламной секции.

public void skip()
Останавливает показ рекламной секции, если это было сделано пользователем (нажатие на кнопку «Пропустить» или «Закрыть»).

public void skipBanner()
Останавливает текущее рекламное видео и переходит к следующему, если это было сделано пользователем (нажатие на кнопку «Пропустить» или «Закрыть»).

public void setVolume(float volume)
Устанавливает громкость от 0 до 1.

public void setLoadingTimeout(int loadingTimeout)
Устанавливает таймаут на загрузку рекламы в секундах. В случае если по истечению указанного интервала не удалось получить баннеры, будет вызван коллбек onNoAd. Значение по умолчанию — 10 секунд, минимальное значение — 5 секунд.

Пользовательские данные

Для лучшего подбора рекламных объявлений, вы можете дополнительно задать пол и возраст пользователя. Если ваше приложение использует собственную модель локализации, вы также можете указать язык выбранной локализации в формате ISO 639-1 ("ru", "en", "fr" и т.д.).

Для задания пользовательских данных вам нужно воспользоваться свойством customParams.


private InstreamAd ad;
 
private void initAd()
{
    // Создаем экземпляр InstreamAd
    ad = new InstreamAd(YOUR_SLOT_ID, this);
    // Получаем экземпляр дополнительных параметров CustomParams
    CustomParams customParams = ad.getCustomParams();
    // Задаем возраст
    customParams.setAge(25);
    // Задаем пол
    customParams.setGender(CustomParams.Gender.MALE);
}

Примеры

Примеры интеграции доступны в нашем демоприложении на Github.

In-stream аудио

myTarget SDK предоставляет возможность проигрывать in-stream аудио-рекламу в своем приложении во время прослушивания аудио.

Реклама может быть запущена перед началом проигрывания аудио (preroll), во время проигрывания (midroll) и после проигрывания (postroll). SDK загружает данные и предоставляет приложению возможность проигрывать рекламу в плеере приложения.
Инициализация

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

Для каждого аудио в приложении требуется создавать свой экземпляр класса InstreamAudioAd.

private InstreamAudioAd ad;
 
private void initAd()
{
    // Включение режима отладки
    // MyTargetManager.setDebugMode(true); 
    // Создаем экземпляр InstreamAudioAd
    ad = new InstreamAudioAd(YOUR_SLOT_ID, this);
}
Использование плеера приложения

Для проигрывания рекламы в плеере приложения он должен реализовывать интерфейс InstreamAudioAdPlayer и уведомлять установленный ему слушатель AdPlayerListener.

Для использования своего плеера надо вызвать метод setPlayer(InstreamAudioAdPlayer player) у созданного экземпляра InstreamAudioAd.

private InstreamAudioAd ad;
 
private void initAd()
{
    // Создаем экземпляр InstreamAudioAd
    ad = new InstreamAudioAd(YOUR_SLOT_ID, this);
     
    // Устанавливаем плеер
    ad.setPlayer(YOUR_PLAYER);
}
Интерфейс InstreamAudioAdPlayer

Методы интерфейса InstreamAudioAdPlayer вызываются экземпляром InstreamAudioAd. Вызывать их самостоятельно не требуется.

float getAdAudioDuration();

Длительность рекламного аудио

float getAdAudioPosition();
Текущая позиция рекламного аудио. Метод вызывается многократно во время проигрывания рекламного аудио и должен отдавать актуальное значение в секундах.

void setAdPlayerListener(AdPlayerListener listener);
Устанавливает слушатель плеера

Context getCurrentContext();

Текущий контекст.

void setVolume(float volume);

Устанавливает громкость от 0 до 1.

void playAdAudio(Uri uri);

Запускает воспроизведение рекламного аудио.

uri — путь к аудио

void pauseAdAudio();
Приостанавливает проигрывание рекламного аудио.

void resumeAdAudio();

Возобновляет проигрывание рекламного аудио.

void stopAdAudio();
Останавливает проигрывание рекламного аудио.
Интерфейс InstreamAudioAdPlayer.AdPlayerListener

Методы обратного вызова интерфейса AdPlayerListener для установленного слушателя должны быть вызваны плеером в ответ на вызовы методов интерфейса InstreamAudioAdPlayer при наступлении определенных событий.

void onAdAudioStarted();
Метод должен быть вызван после успешного начала воспроизведения рекламного аудио, как ответ на вызов метода playAdAudio().

void onAdAudioPaused();

Метод должен быть вызван после приостановки проигрывания рекламного видео, как ответ на вызов метода pauseAdVideo().

void onAdAudioResumed();
Метод должен быть вызван после возобновления проигрывания рекламного аудио, как ответ на вызов метода resumeAdAudio().

void onAdAudioStopped();

Метод должен быть вызван после остановки проигрывания рекламного аудио, как ответ на вызов метода stopAdAudio().

void onAdAudioError(String message);

Метод должен быть вызван при возникновении какой-либо ошибки при проигрывании рекламного аудио.

void onAdAudioCompleted();

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

void onVolumeChanged(float volume);

Метод должен быть вызван при изменении громкости.
Загрузка рекламных объявлений

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

private InstreamAudioAd ad;
 
private void initAd()
{
    // Создаем экземпляр InstreamAudioAd
    ad = new InstreamAudioAd(YOUR_SLOT_ID, this);
     
    // Устанавливаем слушатель событий
    ad.setListener(new InstreamAudioAd.InstreamAudioAdListener()
    {
        @Override
        public void onLoad(InstreamAudioAd ad)
        {
            // Данные успешно загружены
        }
 
        @Override
        public void onNoAd(String reason, InstreamAudioAd ad)
        {
            // Данные не получены
        }
 
        @Override
        public void onError(String reason, InstreamAudioAd ad)
        {
            // При проигрывании рекламного аудио произошла ошибка
        }
 
        @Override
        public void onBannerStart(InstreamAudioAd ad, InstreamAudioAd.InstreamAudioAdBanner banner)
        {
            // Началось проигрывание рекламного аудио
        }
 
        @Override
        public void onBannerComplete(InstreamAudioAd ad, InstreamAudioAd.InstreamAudioAdBanner banner)
        {
            // Проигрывание рекламного аудио завершено
        }
 
        @Override
        public void onBannerTimeLeftChange(float timeLeft, float duration, InstreamAudioAd ad)
        {
            // Вызывается многократно во время воспроизведения рекламного аудио, используется для обновления таймера до окончания показа рекламного аудио
        }
 
        @Override
        public void onComplete(String section, InstreamAudioAd ad)
        {
            // Проигрывание всех рекламных аудио в рекламной секции завершено
        }
    });
         
    // Запускаем загрузку данных
    ad.load();
}
Проигрывание рекламных объявлений

После успешной загрузки данных вы можете запустить проигрывание рекламных секций.

Каждая секция секция может содержать несколько рекламных аудио, после начала проигрывания каждого будет вызван метод onBannerStart в установленном слушателе InstreamAudioAdListener, после завершения проигрывания каждого аудио будет вызван метод onBannerComplete.

После завершения проигрывания всех рекламных аудио в запущенной секции будет вызван метод onComplete — именно его вы должны использовать для дальнейших действий. Он будет вызван даже если в процессе проигрывания произошла ошибка и был вызван метод onError.
Показ preroll и postroll секций

Для проигрывания preroll секции необходимо перед началом проигрывания аудио вызвать метод startPreroll у экземпляра InstreamAudioAd.

Для проигрывания postroll секции необходимо после окончания проигрывания аудио вызвать метод startPostroll.

// Перед началом проигрывания основного аудио
ad.startPreroll();
 
// После проигрывания основного аудио
ad.startPostroll();
Показ midroll секции

Для проигрывания midroll секции в какой-то позиции аудио, необходимо после создания экземпляра InstreamAudioAd задать массив позиций, на которых планируется проигрывание midroll секции. Позиции можно задавать как в секундах, так и в процентах от длительности аудио.

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

Если массив позиций после загрузки оказался пустой, значит данных для проигрывания midroll секции нет.

private InstreamAudioAd ad;
 
private void initAd()
{
    // Создаем экземпляр InstreamAudioAd
    ad = new InstreamAudioAd(YOUR_SLOT_ID, this);
     
    // Устанавливаем позиции на первой и пятой секунде аудио
    ad.configureMidpoints(videoDuration, new float[]{1f,5f});
    // или в процентах, на 10% и 50% аудио
    // ad.configureMidpointsPercents(audioDuration, new float[]{10f,50f});
 
    // Устанавливаем слушатель событий
    ad.setListener(new InstreamAudioAd.InstreamAudioAdListener()
    {
        @Override
        public void onLoad(InstreamAudioAd ad)
        {
            // Данные успешно загружены
            // Массив позиций (в секундах), доступных для проигрывания midroll секции
            adPositions = ad.getMidPoints();
        }
         
        ...
    });
     
    // Запускаем загрузку данных
    ad.load();
}
При достижении основным аудио одной из позиций для midroll секции, необходимо вызвать метод startMidroll и передать в него в качестве параметра эту позицию.

// Аудио доигралось до 5-й секунды и для неё есть позиция в массиве adPositions
ad.startMidroll(adPositions[1]);
Доступные свойства рекламного аудио

В методы onBannerStart и onBannerComplete слушателя InstreamAudioAdListener передается экземпляр InstreamAudioAdBanner, содержащий информацию о текущем рекламном аудио, которая может быть использована приложением.

float getDuration();

Длительность текущего рекламного аудио в секундах.

boolean isAllowSeek();
Разрешено ли прокручивать рекламное аудио.

boolean isAllowSkip();

Разрешено ли пропускать рекламное аудио.

boolean isAllowTrackChange();

Разрешено ли переходить к следующему треку.

List<InstreamAdCompanionBanner> getInstreamAdCompanionBanners();

Список баннеров-компаньонов.

String getAdText();

Рекламный текст.
Работа с баннерами-компаньонами

Приложение должно самостоятельно отслеживать показы и клики по баннерам-компаньонам и вызывать методы handleCompanionShow и handleCompanionClick в экземпляре InstreamAudioAd для обработки показа и клика и перехода на рекламируемый сайт или приложение.

private void onCompanionAdShow(InstreamAdCompanionBanner companionBanner)
{
    ad.handleCompanionShow(companionBanner);
}
 
private void onCompanionAdClick(InstreamAdCompanionBanner companionBanner)
{
    // Обработка клика в контексте текущей активности
    ad.handleCompanionClick(companionBanner, context);
 
    // Обработка клика в контексте, который был передан при создании рекламного экземпляра
    // ad.handleCompanionClick(companionBanner);
}
Управление состоянием

У экземпляра InstreamAudioAd доступны следующие методы управления.

public void pause()

Приостанавливает проигрывание рекламного аудио.

public void resume()

Возобновляет проигрывание рекламного аудио.

public void stop()

Останавливает показ рекламной секции.

public void skip()
Останавливает показ рекламной секции, если это было сделано пользователем (нажатие на кнопку «Пропустить» или «Закрыть»).

public void skipBanner()
Останавливает текущее рекламное аудио и переходит к следующему, если это было сделано пользователем (нажатие на кнопку «Пропустить» или «Закрыть»).

public void setVolume(float volume)
Устанавливает громкость от 0 до 1.

public void setLoadingTimeout(int loadingTimeout)

Устанавливает таймаут на загрузку рекламы в секундах. В случае если по истечению указанного интервала не удалось получить баннеры, будет вызван коллбек onNoAd. Значение по умолчанию — 10 секунд, минимальное значение — 5 секунд.
Пользовательские данные

Для лучшего подбора рекламных объявлений, вы можете дополнительно задать пол и возраст пользователя. Если ваше приложение использует собственную модель локализации, вы также можете указать язык выбранной локализации в формате ISO 639-1 ("ru", "en", "fr" и т.д.).

Для задания пользовательских данных вам нужно воспользоваться свойством customParams.

private InstreamAudioAd ad;
 
private void initAd()
{
    // Создаем экземпляр InstreamAudioAd
    ad = new InstreamAudioAd(YOUR_SLOT_ID, this);
    // Получаем экземпляр дополнительных параметров CustomParams
    CustomParams customParams = ad.getCustomParams();
    // Задаем возраст
    customParams.setAge(25);
    // Задаем пол
    customParams.setGender(CustomParams.Gender.MALE);
}
Примеры

Примеры интеграции доступны в нашем демоприложении на Github.

Карусель в нативной рекламе

Загруженный баннер, вместо одной главной картинки, может содержать набор карточек, которые могут быть показаны в виде карусели. Каждая карточка содержит свою картинку, имя, описание и кнопку. Для показа карусели, вместо использования компонента MediaAdView для главной картинки, вы должны использовать компонент PromoCardRecyclerView. В качестве адаптера ему должен быть задан класс, наследующийся от предоставляемого SDK абстрактного класса PromoCardAdapter и реализующий абстрактный метод getPromoCardView(). Данный метод должен возвращать визуальный компонент для показа одной карточки реализующий интерфейс PromoCardView. Компонент PromoCardRecyclerView автоматически заполняет предоставляемый адаптером визуальный компонент данными карточек. Ниже приведен пример реализации карусели с использованием PromoCardRecyclerView.

@Override
public void onLoad(NativeAd ad)
{
    NativePromoBanner banner = ad.getBanner();
      
    // ...
    // ...
      
    // Список карточек
    List<NativePromoCard> cards = banner.getCards();
   
    // Пример заполнения визуального компонента
   
    // ...
    // ...
   
    if (cards.isEmpty())
    {
        // Создаем MediaAdView
        MediaAdView mediaView = NativeViewsFactory.getMediaAdView(context);
        adViewLayout.addView(mediaView);
    }
    else
    {
        // Создаем PromoCardRecyclerView
        PromoCardRecyclerView promoCardRecyclerView = NativeViewsFactory.getPromoCardRecyclerView(context);
   
        // Устанавливаем адаптер
        promoCardRecyclerView.setPromoCardAdapter(new PromoCardRecyclerView.PromoCardAdapter(cards)
        {
             @Override
             public PromoCardView getPromoCardView()
            {
                 return new CardView(context);
            }
        });
          
        adViewLayout.addView(promoCardRecyclerView);  
    }
      
    // Регистрируем визуальный компонент
    ad.registerView(adViewLayout);
   
    // Добавляем на экран
    mainLayout.addView(adViewLayout, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
  
// Пример класса для показа одной карточки
private static class CardView extends LinearLayout implements PromoCardView
{
   private MediaAdView mediaAdView;
   private TextView titleTextView;
   private TextView descriptionTextView;
   private Button ctaButton;
  
   public CardView(Context context)
   {
      super(context);
      mediaAdView = NativeViewsFactory.getMediaAdView(context);
      titleTextView = new TextView(context);
      descriptionTextView = new TextView(context);
      ctaButton = new Button(context);
      addView(mediaAdView);
      addView(titleTextView);
      addView(descriptionTextView);
      addView(ctaButton);
   }
  
   @Override
   public MediaAdView getMediaAdView()
   {
      return mediaAdView;
   }
  
   @Override
   public TextView getTitleTextView()
   {
      return titleTextView;
   }
  
   @Override
   public TextView getDescriptionTextView()
   {
      return descriptionTextView;
   }
  
   @Override
   public Button getCtaButton()
   {
      return ctaButton;
   }
  
   @Override
   public View getView()
   {
      return this;
   }
}
Карусель
Вам помогла эта статья?