Перейти к основному содержимому
осторожно
Android SDK 3.0.2 устарела. Stable версия - здесь.
Версия: 3.0.2

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

Нативная реклама - гибкий тип рекламы, стиль и вид которой вы можете адаптировать под контент вашего приложения.

Вы можете использовать наше демо приложение в качестве примера по интеграции.

Demo App

Кеширование

Для кеширования нативной рекламы используйте следющий метод:

Appodeal.cache(this, Appodeal.NATIVE)

Для кеширования конкретного количества нативной рекламы используйте следующий метод:

Appodeal.cache(this, Appodeal.NATIVE, 3)
к сведению

Указание количества нативной рекламы при кешировании не гарантирует, что указанное количество будет загружено.

Проверка Загрузки

Appodeal.isLoaded(Appodeal.NATIVE)

Получение Экземпляра Загруженной Нативной Рекламы

Чтобы получить загруженную нативную рекламу используйте следующий метод:

val nativeAds: List<NativeAd> = Appodeal.getNativeAds(amount)
примечание

Как только вы получите список с нативной рекламой, он будет удален из кеша Appodeal SDK.

Методы Обратного Вызова

Appodeal.setNativeCallbacks(object : NativeCallbacks {
override fun onNativeLoaded() {
// Called when native ads are loaded
}
override fun onNativeFailedToLoad() {
// Called when native ads are failed to load
}
override fun onNativeShown(NativeAd nativeAd) {
// Called when native ad is shown
}
override fun onNativeShowFailed(NativeAd nativeAd) {
// Called when native ad show failed
}
override fun onNativeClicked(NativeAd nativeAd) {
// Called when native ads is clicked
}
override fun onNativeExpired() {
// Called when native ads is expired
}
})
к сведению

Вcе callback методы вызываются в главном потоке.

Ручное Кеширование

Чтобы отключить автоматическое кеширование для нативной рекламы, вызовите следующий код до инициализации SDK:

Appodeal.setAutoCache(Appodeal.NATIVE, false)

Более подробную информацию о ручном кешировании рекламы вы можете найти в нашем FAQ.

Получение Количества Доступной Нативной Рекламы

Appodeal.getAvailableNativeAdsCount()

Объект NativeAd

После загрузки нативных объявлений вы можете получить список объектов NativeAd, вызвав Appodeal.getNativeAds().

МетодТипОбязателенОписание
nativeAd.titleStringОбязателенЗаголовок нативной рекламы. Всегда должно отображаться не более 25 символов заголовка. Вы можете добавить многоточие в конце, если заголовок длиннее.
nativeAd.callToActionStringОбязателенТекст Call-to-action кнопки. Должен отображаться полный заголовок кнопки.
nativeAd.descriptionStringОпционаленТекстовое описание нативного объявления. Если вы решите отобразить описание, оно должно содержать не более 100 символов. Вы можете добавить многоточие в конце.
nativeAd.ratingFloatОпционаленРейтинг приложения в диапазоне [0-5]
nativeAd.ageRestrictionsStringОпционаленВозрастное ограничение рекламируемого приложения. Может возвращать null.
nativeAd.adProviderStringОпционаленИмя провайдера нативной рекламы.
nativeAd.getProviderView(context: Context)ViewОбязателенЕсли он не возвращает null, то в любом углу нативного объявления обязательно отображается значок провайдера. Используется некоторыми сетями для отображения AdChoices или значка конфиденциальности.
nativeAd.containsVideo()BooleanОпционаленВозвращает true, если объект NativeAd содержит видео.
nativeAd.canShow(placementName: String)BooleanОпционаленПроверяет, может ли нативная реклама быть показана для указанного плейсмента.
nativeAd.isPrecacheBooleanОпционаленПроверяет, является ли загруженная реклама прекэшем.
nativeAd.predictedEcpmDoubleОпционаленВозвращает прогнозируемое значение ecpm.
nativeAd.destroy()UnitОбязателенУничтожает нативную рекламы и прекращает ее отслеживание.

Настройка

Кэширование Ресурсов Нативной Рекламы

Задайте ресурсы для нативной рекламы, необходимые для показа. Значение по умолчанию - ALL.

//assets caching for NativeIconView and NativeMediaView
Appodeal.setRequiredNativeMediaAssetType(Native.MediaAssetType.ALL)
//assets caching only for NativeIconView
Appodeal.setRequiredNativeMediaAssetType(Native.MediaAssetType.ICON)
//assets caching only for NativeMediaView
Appodeal.setRequiredNativeMediaAssetType(Native.MediaAssetType.IMAGE)

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

Для показа нативного видео необходимо использовать NativeMediaView. В случае отсутствия видео в объекте NativeAd, автоматически отобразится главное изображение.

val adView: NativeAdView = findViewById(R.id.native_layout)
val nativeMediaView: NativeMediaView = adView.findViewById(R.id.appodeal_media_view_content)
if (nativeAd.containsVideo()) {
adView.nativeMediaView = nativeMediaView;
} else {
nativeMediaView.visibility = View.GONE;
}

Настойки Нативной Видеорекламы

Для управления нативной видеорекламой используйте следующие методы:

// both static image and video native ads will be loaded
Appodeal.setNativeAdType(Native.NativeAdType.Auto)
// only static image native ads will be loaded
Appodeal.setNativeAdType(Native.NativeAdType.NoVideo)
// only video native ads will be loaded.
Appodeal.setNativeAdType(Native.NativeAdType.Video)

Шаблоны

Appodeal SDK предоставляет 3 вида шаблонов для нативной рекламы:

  • NativeAdViewNewsFeed;
  • NativeAdViewAppWall;
  • NativeAdViewContentStream.

Если вы хотите использовать один из этих шаблонов, Вы можете добавить выбранный шаблон в разметку:

XML
<com.appodeal.ads.native_ad.views.NativeAdViewNewsFeed
android:id="@+id/native_ad_view_news_feed"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp">
</com.appodeal.ads.native_ad.views.NativeAdViewNewsFeed>

<com.appodeal.ads.native_ad.views.NativeAdViewAppWall
android:id="@+id/native_ad_view_app_wall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp">
</com.appodeal.ads.native_ad.views.NativeAdViewAppWall>

<com.appodeal.ads.native_ad.views.NativeAdViewContentStream
android:id="@+id/native_ad_view_content_stream"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp">
</com.appodeal.ads.native_ad.views.NativeAdViewContentStream>

Для показа рекламы используйте:

val nav_nf: NativeAdViewNewsFeed = mActivity.findViewById(R.id.native_ad_view_news_feed)
nav_nf.setNativeAd(mNativeAd)

val nav_aw: NativeAdViewAppWall = mActivity.findViewById(R.id.native_ad_view_app_wall)
nav_aw.setNativeAd(mNativeAd)

val nav_cs: NativeAdViewContentStream = mActivity.findViewById(R.id.native_ad_view_content_stream)
nav_cs.setNativeAd(mNativeAd)

Вы также можете создать View для отображения рекламы программно:

val holder: RelativeLayout = mActivity.findViewById(R.id.native_template_holder)
val nativeAdView = NativeAdViewAppWall(mActivity, mNativeAd)
holder.addView(nativeAdView)

Элементы Шаблона

val title: TextView = getTitleView()
val description: TextView = getDescriptionView()
val rating: View = getRatingView()
val ratingBar: RatingBar = getRatingBar()
val providerView: View = getProviderView()
val callToAction: TextView = getCallToActionView()
val iconView: NativeIconView = getNativeIconView()
val mediaView: NativeMediaView = getNativeMediaView()

По умолчанию нативная реклама помечается как «Ad». Вы можете заменить эту метку на «Sponsored»:

nav.showSponsored(true);

Для изменения цвета кнопки действия в шаблонах используйте:

nav.setCallToActionColor(color: Integer)
nav.setCallToActionColor(color: String)

Использование Собственной Разметки

val nativeAdView: NativeAdView = findViewById(R.id.native_layout)
val tvTitle: TextView = nativeAdView.findViewById(R.id.tv_title)
tvTitle.text = nativeAd.title
nativeAdView.titleView = tvTitle
val tvDescription: TextView = nativeAdView.findViewById(R.id.tv_description)
tvDescription.text = nativeAd.description
nativeAdView.descriptionView = tvDescription
val ratingBar: RatingBar = nativeAdView.findViewById(R.id.rb_rating)
if (nativeAd.rating == 0.0f) {
ratingBar.visibility = View.INVISIBLE
} else {
ratingBar.visibility = View.VISIBLE
ratingBar.rating = nativeAd.rating
ratingBar.stepSize = 0.1f
}
nativeAdView.ratingView = ratingBar
val ctaButton: Button = nativeAdView.findViewById(R.id.b_cta)
ctaButton.text = nativeAd.callToAction
nativeAdView.callToActionView = ctaButton
val providerView: View? = nativeAd.getProviderView(context)
if (providerView != null) {
if (providerView.parent != null && providerView.parent is ViewGroup) {
(providerView.parent as ViewGroup).removeView(providerView)
}
val providerViewContainer: FrameLayout =
nativeAdView.findViewById(R.id.provider_view)
val layoutParams: ViewGroup.LayoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
providerViewContainer.addView(providerView, layoutParams)
}
nativeAdView.providerView = providerView
val tvAgeRestrictions: TextView = nativeAdView.findViewById(R.id.tv_age_restriction)
if (nativeAd.ageRestrictions != null) {
tvAgeRestrictions.text = nativeAd.ageRestrictions
tvAgeRestrictions.visibility = View.VISIBLE
} else {
tvAgeRestrictions.visibility = View.GONE
}
val nativeIconView: NativeIconView = nativeAdView.findViewById(R.id.icon)
nativeAdView.setNativeIconView(nativeIconView)
val nativeMediaView: NativeMediaView = nativeAdView.findViewById(R.id.appodeal_media_view_content)
nativeAdView.nativeMediaView = nativeMediaView
nativeAdView.registerView(nativeAd)
подсказка

Чтобы отобразить NativeAd в своей собственной разметке, используйте NativeAdView, наполните и свяжите View ресурсы.

Привяжите View ресурсы к NativeAdView:

nativeAdView.titleView = view: View
nativeAdView.callToActionView = view: View
nativeAdView.ratingView = view: View
nativeAdView.descriptionView = view: View
nativeAdView.providerView = view: View
nativeAdView.setNativeIconView(nativeIconView: NativeIconView)
nativeAdView.nativeMediaView = nativeMediaView: NativeMediaView

Привяжите объект NativeAd к NativeAdView.

nativeAdView.registerView(nativeAd: NativeAd)
// or nativeAdView.registerView(nativeAd: NativeAd, placementName: String) if you use placements
к сведению

Если к данному экземпляру NativeAdView уже было зарегистрировано другое объявление, его отслеживание будет автоматически прекращено.

Для остановки отслеживания NativeAd необходимо вызвать:

nativeAdView.unregisterViewForInteraction();
примечание

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

Для удаления NativeAd, привязанного к NativeAdView, необходимо вызвать:

nativeAdView.destroy()
примечание

Невозможно использовать NativeAdView после вызова destroy(). Необходимо либо скрыть NativeAdView, либо привязать новое объявление.

Пример Интеграции

fun loadNativeAds() {
Appodeal.setRequiredNativeMediaAssetType(Native.MediaAssetType.ICON)
Appodeal.initialize(this, YOUR_APP_KEY, Appodeal.NATIVE, consentValue)
Appodeal.setNativeCallbacks(new NativeCallbacks() {
override fun onNativeLoaded() {
Toast.makeText(MainActivity.this, "onNativeLoaded", Toast.LENGTH_SHORT).show()
}

override fun onNativeFailedToLoad() {
Toast.makeText(MainActivity.this, "onNativeFailedToLoad", Toast.LENGTH_SHORT).show()
}

override fun onNativeShown(NativeAd nativeAd) {
Toast.makeText(MainActivity.this, "onNativeShown", Toast.LENGTH_SHORT).show()
}

override fun onNativeClicked(NativeAd nativeAd) {
Toast.makeText(MainActivity.this, "onNativeClicked", Toast.LENGTH_SHORT).show()
}

override fun onNativeExpired() {
Toast.makeText(MainActivity.this, "onNativeExpired", Toast.LENGTH_SHORT).show()
}
})
}

После получение метода обратного вызова onNativeLoaded, можно получить нативную рекламу при помощи Appodeal.getNativeAds() и показать её, как указано в пункте "Использование собственной разметки".

Для отображения загруженной нативной рекламы используйте:

fun showNativeAd() {
val loadedNativeAds = Appodeal.getNativeAds(1)
if (loadedNativeAds.isEmpty()) {
//Native Ads not loaded yet
return
}
val nativeAd = loadedNativeAds[0]
val nativeAdView: NativeAdView = findViewById(R.id.native_layout)
val tvTitle: TextView = nativeAdView.findViewById(R.id.tv_title)
tvTitle.text = nativeAd.title
nativeAdView.titleView = tvTitle
val tvDescription: TextView = nativeAdView.findViewById(R.id.tv_description)
tvDescription.text = nativeAd.description
nativeAdView.descriptionView = tvDescription
val ratingBar: RatingBar = nativeAdView.findViewById(R.id.rb_rating)
if (nativeAd.rating == 0f) {
ratingBar.visibility = View.INVISIBLE
} else {
ratingBar.visibility = View.VISIBLE
ratingBar.rating = nativeAd.rating
ratingBar.stepSize = 0.1f
}
nativeAdView.ratingView = ratingBar
val ctaButton: Button = nativeAdView.findViewById(R.id.b_cta)
ctaButton.text = nativeAd.callToAction
nativeAdView.callToActionView = ctaButton
val providerView = nativeAd.getProviderView(context)
if (providerView != null) {
if (providerView.parent != null && providerView.parent is ViewGroup) {
(providerView.parent as ViewGroup).removeView(providerView)
}
val providerViewContainer: FrameLayout = nativeAdView.findViewById(R.id.provider_view)
val layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
providerViewContainer.addView(providerView, layoutParams)
}
nativeAdView.providerView = providerView
val tvAgeRestrictions: TextView = nativeAdView.findViewById(R.id.tv_age_restriction)
if (nativeAd.ageRestrictions != null) {
tvAgeRestrictions.text = nativeAd.ageRestrictions
tvAgeRestrictions.visibility = View.VISIBLE
} else {
tvAgeRestrictions.visibility = View.GONE
}
val nativeIconView: NativeIconView = nativeAdView.findViewById(R.id.icon)
nativeAdView.setNativeIconView(nativeIconView)
val nativeMediaView: NativeMediaView =
nativeAdView.findViewById(R.id.appodeal_media_view_content)
nativeAdView.nativeMediaView = nativeMediaView
nativeAdView.registerView(nativeAd)
nativeAdView.visibility = View.VISIBLE
}

Пример Интеграции Нативной Рекламы В Ленту

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

import android.util.SparseArray
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.FrameLayout
import android.widget.RatingBar
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.appodeal.ads.*

/**
* Wrapper adapter to show Native Ad in recycler view with fixed step
*
* @param userAdapter user adapter
* @param nativeStep step show [com.appodeal.ads.NativeAd]
*/
class AppodealWrapperAdapter(
userAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>,
nativeStep: Int
) : RecyclerView.Adapter<RecyclerView.ViewHolder>(), NativeCallbacks {

private val _userAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>?
private val userAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>
get() = requireNotNull(_userAdapter)
private var nativeStep = DEFAULT_NATIVE_STEP
private val nativeAdList = SparseArray<NativeAd?>()

init {
this._userAdapter = userAdapter
this.nativeStep = nativeStep + 1
userAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onChanged() {
super.onChanged()
notifyDataSetChanged()
fillListWithAd()
}

override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
super.onItemRangeInserted(positionStart, itemCount)
notifyDataSetChanged()
fillListWithAd()
}
})
Appodeal.setNativeCallbacks(this)
fillListWithAd()
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == VIEW_HOLDER_NATIVE_AD_TYPE) {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.include_native_ads, parent, false)
NativeCustomAdViewHolder(view)
} else {
userAdapter.onCreateViewHolder(parent, viewType)
}
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is NativeCustomAdViewHolder) {
holder.fillNative(nativeAdList[position])
} else {
userAdapter.onBindViewHolder(holder, getPositionInUserAdapter(position))
}
}

override fun getItemCount(): Int {
var resultCount = 0
resultCount += nativeAdsCount
resultCount += userAdapterItemCount
return resultCount
}

override fun getItemViewType(position: Int): Int {
return if (isNativeAdPosition(position)) {
VIEW_HOLDER_NATIVE_AD_TYPE
} else {
userAdapter.getItemViewType(getPositionInUserAdapter(position))
}
}

override fun onViewRecycled(holder: RecyclerView.ViewHolder) {
super.onViewRecycled(holder)
if (holder is NativeCustomAdViewHolder) {
holder.unregisterViewForInteraction()
}
}

/**
* Destroy all used native ads
*/
fun destroyNativeAds() {
for (i in 0 until nativeAdList.size()) {
val nativeAd = nativeAdList.valueAt(i)
nativeAd!!.destroy()
}
nativeAdList.clear()
}

override fun onNativeLoaded() {
fillListWithAd()
}

override fun onNativeFailedToLoad() {}
override fun onNativeShown(nativeAd: NativeAd?) {}
override fun onNativeShowFailed(nativeAd: NativeAd?) {}
override fun onNativeClicked(nativeAd: NativeAd?) {}
override fun onNativeExpired() {}

/**
* @return count of loaded ads [com.appodeal.ads.NativeAd]
*/
private val nativeAdsCount: Int
get() = nativeAdList.size()

/**
* @return user items count
*/
private val userAdapterItemCount: Int
get() = userAdapter.itemCount

/**
* @param position index in wrapper adapter
* @return `true` if item by position is [com.appodeal.ads.NativeAd]
*/
private fun isNativeAdPosition(position: Int): Boolean {
return nativeAdList[position] != null
}

/**
* Method for searching position in user adapter
*
* @param position index in wrapper adapter
* @return index in user adapter
*/
private fun getPositionInUserAdapter(position: Int): Int {
return position - nativeAdList.size().coerceAtMost(position / nativeStep)
}

/**
* Method for filling list with [com.appodeal.ads.NativeAd]
*/
private fun fillListWithAd() {
var insertPosition = findNextAdPosition()
var nativeAd: NativeAd? = null
while (canUseThisPosition(insertPosition) && nativeAdItem.also { nativeAd = it } != null) {
nativeAdList.put(insertPosition, nativeAd)
notifyItemInserted(insertPosition)
insertPosition = findNextAdPosition()
}
}

/**
* Get native ad item
*
* @return [com.appodeal.ads.NativeAd]
*/
private val nativeAdItem: NativeAd?
get() {
val ads = Appodeal.getNativeAds(1)
return if (ads.isNotEmpty()) ads[0] else null
}

/**
* Method for finding next position suitable for [com.appodeal.ads.NativeAd]
*
* @return position for next native ad view
*/
private fun findNextAdPosition(): Int {
return if (nativeAdList.size() > 0) {
nativeAdList.keyAt(nativeAdList.size() - 1) + nativeStep
} else nativeStep - 1
}

/**
* @param position index in wrapper adapter
* @return `true` if you can add [com.appodeal.ads.NativeAd] to this position
*/
private fun canUseThisPosition(position: Int): Boolean {
return nativeAdList[position] == null && itemCount > position
}

/**
* View holder for create custom [com.appodeal.ads.native_ad.views.NativeAdView]
*/
internal class NativeCustomAdViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

private val nativeAdView: NativeAdView = itemView.findViewById(R.id.native_item)
private val tvTitle: TextView = itemView.findViewById(R.id.tv_title)
private val tvDescription: TextView = itemView.findViewById(R.id.tv_description)
private val ratingBar: RatingBar = itemView.findViewById(R.id.rb_rating)
private val ctaButton: Button = itemView.findViewById(R.id.b_cta)
private val nativeIconView: NativeIconView = itemView.findViewById(R.id.icon)
private val tvAgeRestrictions: TextView = itemView.findViewById(R.id.tv_age_restriction)
private val nativeMediaView: NativeMediaView = itemView.findViewById(R.id.appodeal_media_view_content)
private val providerViewContainer: FrameLayout = itemView.findViewById(R.id.provider_view)

fun fillNative(nativeAd: NativeAd?) {
tvTitle.text = nativeAd!!.title
tvDescription.text = nativeAd.description
if (nativeAd.rating == 0f) {
ratingBar.visibility = View.INVISIBLE
} else {
ratingBar.visibility = View.VISIBLE
ratingBar.rating = nativeAd.rating
ratingBar.stepSize = 0.1f
}
ctaButton.text = nativeAd.callToAction
val providerView = nativeAd.getProviderView(nativeAdView.context)
if (providerView != null) {
if (providerView.parent != null && providerView.parent is ViewGroup) {
(providerView.parent as ViewGroup).removeView(providerView)
}
providerViewContainer.removeAllViews()
val layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
providerViewContainer.addView(providerView, layoutParams)
}
if (nativeAd.ageRestrictions != null) {
tvAgeRestrictions.text = nativeAd.ageRestrictions
tvAgeRestrictions.visibility = View.VISIBLE
} else {
tvAgeRestrictions.visibility = View.GONE
}
if (nativeAd.containsVideo()) {
nativeAdView.nativeMediaView = nativeMediaView
} else {
nativeMediaView.visibility = View.GONE
}
nativeAdView.titleView = tvTitle
nativeAdView.descriptionView = tvDescription
nativeAdView.ratingView = ratingBar
nativeAdView.callToActionView = ctaButton
nativeAdView.setNativeIconView(nativeIconView)
nativeAdView.providerView = providerView
nativeAdView.registerView(nativeAd)
nativeAdView.visibility = View.VISIBLE
}

fun unregisterViewForInteraction() {
nativeAdView.unregisterViewForInteraction()
}
}

companion object {
private const val DEFAULT_NATIVE_STEP = 5
private const val VIEW_HOLDER_NATIVE_AD_TYPE = 600
}
}

Для использования данного адаптера-обертки над уже существующим в вашем приложении адаптером создайте экземпляр AppodealWrapperAdapter:

val appodealWrapperAdapter: AppodealWrapperAdapter = AppodealWrapperAdapter(myAdapter, 2)

Передайте этот адаптер в recycler view.

Распространенные Ошибки

  • Нет атрибута объявления или иконки AdChoices

Большинство рекламных сетей требуют от издателя добавления специальной метки для нативного объявления, чтобы пользователи не принимали рекламу за контент. Проверьте, что для нативных объявлениях в вашем приложении указаны соответствующие атрибуты рекламы (например, «Ad») или иконка AdChoices.

  • Отсутствие обязательных элементов объявлений

Каждое нативное объявление должно содержать:

  • заголовок;

  • кнопку для действия;

  • иконку атрибута рекламы или иконку AdChoices;

  • изображение, видео или иконку.

  • Изменение элементов нативных объявлений

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

  • Наложение элементов нативных объявлений друг на другаr

Убедитесь, что все элементы нативного объявления видны и не перекрывают друг друга.

к сведению

Требования к нативной рекламе:

  • Все поля нативного объявления, помеченные как обязательные, должны отображаться.
  • Каждое объявление должно иметь знак, четко указывающий, что это рекламное объявление. Например "Ad" или "Sponsored".
  • Предоставляемые изображения можно масштабировать, чтобы соответствовать вашему рекламному месту, но нельзя значительно искажать или обрезать.

Проверка Инициализизации

Чтобы проверить, была ли проинициализирована ли нативная реклама, вы можете использовать метод:

Appodeal.isInitialized(Appodeal.NATIVE)

Возвращает true, если нативная реклама была проинициализирована.

Проверка Типа Кеширования

Чтобы проверить, включено ли автоматическое кеширование для нативной рекламы, вы можете использовать метод:

Appodeal.isAutoCacheEnabled(Appodeal.NATIVE)

Возвращает true, если автоматическое кеширование включено для нативной рекламы.

Получение Прогнозируемого eCPM

Для того, чтобы получить прогнозируемый eCPM для нативной рекламы для следующего блока в очереди на опрос, вы можете использовать метод:

NativeAd.getPredictedEcpm()
подсказка

Этот метод целесообразно использовать, если включено ручное кэширование рекламы.

Проверка показа

Вы всегда можете проверить в логах был ли засчитан показ и видна ли реклама.

Вы увидите Native [Notify Shown] лог если показ был успешно засчитан.

Appodeal  com.example.app  D Native [Notify Shown]