Нативная реклама
Нативная реклама - это гибкий вид рекламы. Вы можете адаптировать показ к своему пользовательскому интерфейсу, подготовив шаблон.
Appodeal предоставляет 4 варианта реализации макета нативной рекламы 3 шаблона + ваша кастомная
реализация
Все они наследуются от одного и того же класса NativeAdView
.
NativeAdView
состоит из следующих компонентов:
NativeIconView
- Иконка нативной рекламы.AdAttributionView
- Индикатор рекламы. Это TextView с меткой "Ad".TitleVIew
- Заголовок нативной рекламы.DescriptionView
- Текстовый вид описания нативной рекламы.RatingBarView
- Рейтинг приложения в диапазоне [0-5].NativeMediaView
- Медиаконтент нативной рекламы.CallToActionView
- Кнопка для клика.AdChoiceView
- Специальная иконка объявления, предоставляемая рекламной сетью.
- Шаблоны: Для их отображения достаточно сделать следующее:
- Создайте программно или в файле xml разметки один из классов View шаблонов;
Классы шаблонов нативной рекламы:.
-
NativeAdViewNewsFeed
: -
NativeAdViewAppWall
: -
NativeAdViewContentStream
:
NativeAdView для кастомной реализации:
Для его отображения достаточно сделать следующее:
- Создайте класс
NativeAdVIew
программно или в xml файле разметки - Внутри созданного
NativeAdVIew
расположите всеView
/IconView
/MediaView
, необходимые для отображения в любом удобном для вас стиле - Привяжите программно или в файле макета все необходимые
View
/IconView
/MediaView
.
Вид нативной рекламы в кастомной реализации:
NativeAdView
.
Вы можете использовать наше демо приложение в качестве примера по интеграции.
Демо приложение
Руководство по интеграции
- For templates
- Для кастомной разметки
- Создайте программно или в файле xml разметки один из классов View шаблонов:
- XML
- Kotlin
- Java
<com.appodeal.ads.nativead.NativeAdViewNewsFeed
android:id="@+id/native_news_feed"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.appodeal.ads.nativead.NativeAdViewAppWall
android:id="@+id/native_app_wall"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.appodeal.ads.nativead.NativeAdViewContentStream
android:id="@+id/native_content_stream"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
val newsFeedView = NativeAdViewNewsFeed(context)
val appWallView = NativeAdViewAppWall(context)
val contentStreamView = NativeAdViewContentStream(context)
NativeAdViewNewsFeed newsFeedView = new NativeAdViewNewsFeed(context);
NativeAdViewAppWall appWallView = new NativeAdViewAppWall(context);
NativeAdViewContentStream contentStreamView = new NativeAdViewContentStream(context);
- Получите экземпляр представления из макета ИЛИ добавьте программно созданный шаблон ViewTemplate в иерархию View:
- XML
- Kotlin
- Java
val newsFeedView = findViewById<NativeAdViewNewsFeed>(R.id.native_news_feed);
val appWallView = findViewById<NativeAdViewAppWall>(R.id.native_app_wall);
val contentStreamView = findViewById<NativeAdViewContentStream>(R.id.native_content_stream);
NativeAdViewNewsFeed newsFeedView = findViewById(R.id.native_news_feed);
NativeAdViewAppWall appWallView = findViewById(R.id.native_app_wall);
NativeAdViewContentStream contentStreamView = findViewById(R.id.native_content_stream);
rootView.addView(newsFeedView)
rootView.addView(appWallView)
rootView.addView(contentStreamView)
rootView.addView(newsFeedView);
rootView.addView(appWallView);
rootView.addView(contentStreamView);
- Когда NativeAd будет загружен, просто зарегистрируйте его:
- Для одного экземпляра
- Для нескольких экземпляров
- Kotlin
- Java
if (Appodeal.isLoaded(Appodeal.NATIVE)) {
newsFeedView.registerView(Appodeal.getNativeAdCount(1))
}
if (Appodeal.isLoaded(Appodeal.NATIVE)) {
newsFeedView.registerView(Appodeal.getNativeAdCount(1));
}
- Kotlin
- Java
val needToShow = 3
if (Appodeal.getAvailableNativeAdsCount() >= needToShow) {
val nativeAds = Appodeal.getNativeAdCount(needToShow)
newsFeedView.registerView(nativeAds[0])
appWallView.registerView(nativeAds[1])
contentStreamView.registerView(nativeAds[2])
}
int needToShow = 3;
if (Appodeal.getAvailableNativeAdsCount() >= needToShow) {
List<NativeAd> nativeAds = Appodeal.getNativeAdCount(needToShow);
newsFeedView.registerView(nativeAds.get(0));
appWallView.registerView(nativeAds.get(1));
contentStreamView.registerView(nativeAds.get(2);
}
- Когда показ завершен и вы больше не планируете использовать NativeAdView, необходимо вызвать метод destroy:
- Kotlin
- Java
nativeAdView.destroy()
nativeAdView.destroy();
Общие требования:.
- Минимальная высота
NativeAdView
должна составлять 32dp; NativeMediaView
должен иметь минимальный размер 120dp x 120dp;- В
AdAttributionView
должен быть четко обозначен в вашем View как "Реклама", чтобы пользователи не приняли его за контент; - Разрешается уменьшать масштаб
NativeIconView
илиNativeMediaView
без изменения соотношения сторон; - Разрешается симметрично обрезать
NativeIconView
илиNativeMediaView
не более чем на 20% только в одном измерении (высота или ширина).
- Создайте свою разметку с
NativeAdView
в качестве родителя:
Вы можете построить макет с любым стилем, расположением элементов и с любым типом
ViewGroup
(ConstrainLayout
, RelativeLayout
, FrameLayout
)
<?xml version="1.0" encoding="utf-8"?>
<com.appodeal.ads.nativead.NativeAdView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nativeAdView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:adChoicePosition="end_top"
app:callToActionViewId="@id/callToActionView"
app:descriptionViewId="@id/descriptionView"
app:iconViewId="@id/iconView"
app:mediaViewId="@id/mediaView"
app:ratingViewId="@id/ratingView"
app:titleViewId="@id/titleView"
app:adAttributionViewId="@+id/ad_attribution">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.appodeal.ads.nativead.NativeIconView
android:id="@+id/iconView"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_gravity="center_vertical"
android:layout_margin="5dp" />
<TextView
android:id="@+id/ad_attribution"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:background="@color/red" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/titleView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<TextView
android:id="@+id/descriptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="3" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="horizontal">
<RatingBar
android:id="@+id/ratingView"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<Button
android:id="@+id/callToActionView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="30dp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<com.appodeal.ads.nativead.NativeMediaView
android:id="@+id/mediaView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</com.appodeal.ads.nativead.NativeAdView>
Requirements for NativeAdView
elements
Имя view | Тип | Необходимость | Описание |
---|---|---|---|
titleView | TextView | Обязателен | Заголовок нативного объявления. В заголовке всегда должно отображаться не более 25 символов. Если заголовок длиннее, можно добавить многоточие в конце. |
callToActionView | Button | Обязателен | Кнопка призыва к действию. Текст должен отображаться без усечения на видимой кнопке. |
descriptionView | TextView | Опционален | Текстовое описание нативной рекламы. Если вы решили отобразить описание, то в нем должно быть не более 100 символов. В конце можно добавить многоточие. |
ratingView | RatingBar | Опционален | Рейтинг приложения в диапазоне [0-5]. |
adAttributionView | TextView | Обязателен | Индикатор рекламы. Это TextView с меткой "Ad". Вы можете задать цвет текста и фона. Смотрите настройки adAttribution. Вы можете разместить его в любом месте внутри NativeAdView . |
adChoicesView | ViewGroup | Добавляется автоматически | Специальный рекламный зна чок, предоставляемый рекламной сетью. Если SDK получил AdChoice от рекламной сети, то он прикрепляет его автоматически. Вы можете указать позицию в одном из углов NativeAdView . См. setAdChoice position |
iconView | NativeIconView | Обязателен/Опционален | Медиаконтент нативного объявления. |
mediaView | NativeMediaView | Обязателен/Опционален | Иконка нативного объявления. |
NativeAdView
должен обязательно содержать NativeIconView
или NativeMediaView
.
titleView
, callToActionView
и adAttributionView
должен быть добавлен в любом случае.
- Установите идентификаторы всех дочерних представлений
NativeAdView
.
Это можно сделать либо в xml-файле markdown (рекомендуемый способ), либо программно
- XML
- Kotlin
- Java
<com.appodeal.ads.nativead.NativeAdView
app:callToActionViewId="@id/callToActionView"
app:descriptionViewId="@id/descriptionView"
app:iconViewId="@id/iconView"
app:mediaViewId="@id/mediaView"
app:ratingViewId="@id/ratingView"
app:titleViewId="@id/titleView">
app:adAttributionViewId="@id/adAttribution">
val nativeAdView: NativeAdView = ...
nativeAdView.titleViewId = R.id.titleView
nativeAdView.callToActionViewId = R.id.callToActionView
nativeAdView.descriptionViewId = R.id.descriptionView
nativeAdView.ratingViewId = R.id.ratingView
nativeAdView.iconViewId = R.id.iconView
nativeAdView.mediaViewId = R.id.mediaView
nativeAdView.adAttributionViewId = R.id.adAttribution
// OR
nativeAdView.titleView = findViewById(R.id.titleView)
nativeAdView.callToActionView = findViewById(R.id.callToActionView)
nativeAdView.descriptionView = findViewById(R.id.descriptionView)
nativeAdView.ratingView = findViewById(R.id.ratingView)
nativeAdView.iconView = findViewById(R.id.iconView)
nativeAdView.mediaView = findViewById(R.id.mediaView)
nativeAdView.adAttributionView = findViewById(R.id.adAttribution)
NativeAdView nativeAdView: NativeAdView = ...
nativeAdView.setTitleViewId(R.id.titleView);
nativeAdView.setCallToActionViewId(R.id.callToActionView);
nativeAdView.setDescriptionViewId(R.id.descriptionView);
nativeAdView.setRatingViewId(R.id.ratingView);
nativeAdView.setIconViewId(R.id.iconView);
nativeAdView.setMediaViewId(R.id.mediaView);
nativeAdView.setAdAttributionViewId(R.id.adAttribution);
// OR
nativeAdView.setTitleView(findViewById(R.id.titleView));
nativeAdView.setCallToActionView(findViewById(R.id.callToActionView));
nativeAdView.setDescriptionView(findViewById(R.id.descriptionView));
nativeAdView.setRatingView(findViewById(R.id.ratingView));
nativeAdView.setIconView(findViewById(R.id.iconView));
nativeAdView.setMediaView(findViewById(R.id.mediaView));
nativeAdView.setAdAttributionView(findViewById(R.id.adAttribution));
3.Когда NativeAd
загружен, просто зарегистрируйте его для показа:
- Для одного экземпляра
- Для нескольких экземпляров
- Kotlin
- Java
if (Appodeal.isLoaded(Appodeal.NATIVE)) {
newsFeedView.registerView(Appodeal.getNativeAdCount(1))
}
if (Appodeal.isLoaded(Appodeal.NATIVE)) {
newsFeedView.registerView(Appodeal.getNativeAdCount(1));
}
- Kotlin
- Java
val needToShow = 3
if (Appodeal.getAvailableNativeAdsCount() >= needToShow) {
val nativeAds = Appodeal.getNativeAdCount(needToShow)
nativeAdView1.registerView(nativeAds[0])
nativeAdView2.registerView(nativeAds[1])
nativeAdView3.registerView(nativeAds[2])
}
int needToShow = 3;
if (Appodeal.getAvailableNativeAdsCount() >= needToShow) {
List<NativeAd> nativeAds = Appodeal.getNativeAdCount(needToShow);
nativeAdView1.registerView(nativeAds.get(0));
nativeAdView2.registerView(nativeAds.get(1));
nativeAdView3.registerView(nativeAds.get(2));
}