Нативная реклама
Нативная реклама — это гибкий тип рекламы. Вы можете адаптировать отображение к своему пользовательскому интерфейсу, подготовив шаблон.
Appodeal предоставляет 4 варианта реализации макета нативных объявлений: 3 шаблона + ваша пользовательская реализация.
Все они наследуются от одного и того же класса NativeAdView
.
NativeAdView
состоит из следующих компонентов:
NativeIconView
- Иконка на тивного объявления.AdAttributionView
- Индикатор рекламы. Это TextView с надписью "Реклама".TitleVIew
- Заголовок нативного объявления.DescriptionView
- Текстовое описание нативного объявления.RatingBarView
- Рейтинг приложения в диапазоне [0-5].NativeMediaView
- Медиаконтент нативного объявления.CallToActionView
- Кнопка для клика.AdChoiceView
- Специальный рекламный значок, предоставленный рекламной сетью.
Реализация шаблонов:
Для их отображения все, что вам нужно сделать, это:
- Создать программно или в файле макета один из классов шаблонов View
Классы шаблонов нативных представлений:
NativeAdViewNewsFeed
NativeAdViewAppWall
NativeAdViewContentStream
NativeAdView для пользовательской реализации:
Для его отображения все, что вам нужно сделать, это:
- Создать класс
NativeAdVIew
программно или в файле макета. - Внутри созданного
NativeAdView
расположить все необходимыеView
/IconView
/MediaView
для отображения в любом стиле, который вы предпочитаете. - Привязать программно или в файле макета все необходимые
View
/IconView
/MediaView
.
Нативное представление для пользовательской реализации:
NativeAdView
Руководство по интеграции
- Для шаблонов
- Для пользовательского макета
- Создайте программно или в файле макета один из классов шаблонов 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 в иерархию ваших представлений:
- 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);
rootView.addView(newsFeedView)
rootView.addView(appWallView)
rootView.addView(contentStreamView)
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);
- Когда NativeAd загружен, просто зарегистрируйте его
- Для одного NativeAd
- Для нескольких экземпляров 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
должен четко помечать вашу нативную рекламу как "Реклама", чтобы пользователи не приняли ее за контент;- Вы можете уменьшать
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>
Требования к элементам NativeAdView
Название представления | Тип | Обязательно | Описание |
---|---|---|---|
titleView | TextView | Обязательно | Заголовок нативного объявления. Должны всегда отображаться максимум 25 символов заголовка. В конце можно добавить многоточие, если заголовок длиннее. |
callToActionView | Button | Обязательно | Кнопка призыва к действию. Должна отображаться без усечения на видимой кнопке. |
descriptionView | TextView | Опционально | Текстовое описание нативного объявления. Если вы решили отобразить описание, вы должны отображать максимум 100 символов. В конце можно добавить многоточие. |
ratingView | RatingBar | Опционально | Рейтинг приложения в диапазоне [0-5] |
adAttributionView | TextView | Опционально | Индикатор рекламы. Это TextView с надписью "Реклама". Вы можете указать цвет текста и фона. См. настройки adAttribution. Вы можете разместить его в любом месте внутри NativeAdView . |
adChoicesView | ViewGroup | Прикрепляется автоматически | Специальный рекламный значок, предоставленный рекламной сетью. Если SDK получил AdChoice от рекламной сети, он прикрепит его автоматически. Вы можете указать позицию в одном из углов NativeAdView . См. setAdChoice позицию |
iconView | NativeIconView | Обязательно/Опционально | Медиаконтент нативного объявления. |
mediaView | NativeMediaView | Обязательно/Опционально | Иконка нативного объявления. |
NativeAdView
должен содер жать либо NativeIconView
, либо NativeMediaView
.
titleView
, callToActionView
и adAttributionView
должны быть добавлены в любом случае.
- Установите идентификаторы всех дочерних представлений
NativeAdView
.
Вы можете сделать это либо в XML-файле макета (рекомендуемый способ), либо программно.
- 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
// ИЛИ
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);
// ИЛИ
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));
- Когда
NativeAd
загружен, просто зарегистрируйте его для показа:
- Для одного NativeAd
- Для нескольких экземпляров 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));
}
- Когда отображение завершено и вы больше не планируете использовать
NativeAdView
, вам следует вызвать методdestroy
:
- Kotlin
- Java
nativeAdView.destroy()
nativeAdView.destroy();
Если вы хотите показать новое NativeAd внутри используемого nativeAdView, просто вызовите
метод nativeAdView.registerView(newNativeAd)
.
Проверить, загружено ли об ъявление
Чтобы проверить, загружен ли хотя бы 1 экземпляр NativeAd
, используйте метод:
- Kotlin
- Java
Appodeal.isLoaded(Appodeal.NATIVE)
Appodeal.isLoaded(Appodeal.NATIVE);
Чтобы узнать, сколько экземпляров NativeAd
загружено, используйте метод:
- Kotlin
- Java
val nativeAmount = Appodeal.getAvailableNativeAdsCount()
int nativeAmount = Appodeal.getAvailableNativeAdsCount();
По умолчанию Appodeal SDK с включенным AutoCache загружает по 2 экземпляра NativeAd
Мы рекомендуем всегда проверять, доступно ли объявление, прежде чем пытаться его показать.