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);
}
Иконка 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);
}
Загрузка нескольких баннеров
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.