При загрузке нативной рекламы Google Mobile Ads SDK (бета) вызывает прослушиватель для соответствующего формата рекламы. После этого ваше приложение отвечает за отображение рекламы, хотя это не обязательно должно происходить немедленно. Для упрощения отображения системных форматов рекламы SDK предлагает ряд полезных ресурсов, описанных ниже.
Определите класс NativeAdView
Определите класс NativeAdView
. Этот класс является классом ViewGroup
и контейнером верхнего уровня для класса NativeAdView
. Каждое представление нативной рекламы содержит нативные рекламные ресурсы, такие как элемент представления MediaView
или элемент представления Title
, которые должны быть дочерними по отношению к объекту NativeAdView
.
XML-макет
Добавьте XML NativeAdView
в свой проект:
<com.google.android.libraries.ads.mobile.sdk.nativead.NativeAdView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical">
<LinearLayout
android:orientation="horizontal">
<ImageView
android:id="@+id/ad_app_icon" />
<TextView
android:id="@+id/ad_headline" />
</LinearLayout>
<!--Add remaining assets such as the image and media view.-->
</LinearLayout>
</com.google.android.libraries.ads.mobile.sdk.nativead.NativeAdView>
Jetpack Compose
Включите модуль JetpackComposeDemo/compose-util , который содержит помощников для составления NativeAdView
и его ресурсов.
Используя модуль compose-util
, создайте NativeAdView
:
import com.google.android.gms.compose_util.NativeAdAttribution
import com.google.android.gms.compose_util.NativeAdView
@Composable
/** Display a native ad with a user defined template. */
fun DisplayNativeAdView(nativeAd: NativeAd) {
NativeAdView {
// Display the ad attribution.
NativeAdAttribution(text = context.getString("Ad"))
// Add remaining assets such as the image and media view.
}
}
Обработка загруженной нативной рекламы
При загрузке нативной рекламы обработайте событие обратного вызова, разверните представление нативной рекламы и добавьте его в иерархию представлений:
Котлин
// Build an ad request with native ad options to customize the ad.
val adTypes = listOf(NativeAd.NativeAdType.NATIVE)
val adRequest = NativeAdRequest
.Builder("/21775744923/example/native", adTypes)
.build()
val adCallback =
object : NativeAdLoaderCallback {
override fun onNativeAdLoaded(nativeAd: NativeAd) {
activity?.runOnUiThread {
val nativeAdBinding = NativeAdBinding.inflate(layoutInflater)
val adView = nativeAdBinding.root
val frameLayout = myActivityLayout.nativeAdPlaceholder
// Populate and register the native ad asset views.
displayNativeAd(nativeAd, nativeAdBinding)
// Remove all old ad views and add the new native ad
// view to the view hierarchy.
frameLayout.removeAllViews()
frameLayout.addView(adView)
}
}
}
// Load the native ad with our request and callback.
NativeAdLoader.load(adRequest, adCallback)
Ява
// Build an ad request with native ad options to customize the ad.
List<NativeAd.NativeAdType> adTypes = Arrays.asList(NativeAd.NativeAdType.NATIVE);
NativeAdRequest adRequest = new NativeAdRequest
.Builder("/21775744923/example/native", adTypes)
.build();
NativeAdLoaderCallback adCallback = new NativeAdLoaderCallback() {
@Override
public void onNativeAdLoaded(NativeAd nativeAd) {
if (getActivity() != null) {
getActivity()
.runOnUiThread(() -> {
// Inflate the native ad view and add it to the view hierarchy.
NativeAdBinding nativeAdBinding = NativeAdBinding.inflate(getLayoutInflater());
NativeAdView adView = (NativeAdView) nativeAdBinding.getRoot();
FrameLayout frameLayout = myActivityLayout.nativeAdPlaceholder;
// Populate and register the native ad asset views.
displayNativeAd(nativeAd, nativeAdBinding);
// Remove all old ad views and add the new native ad
// view to the view hierarchy.
frameLayout.removeAllViews();
frameLayout.addView(adView);
});
}
}
};
// Load the native ad with our request and callback.
NativeAdLoader.load(adRequest, adCallback);
Обратите внимание, что все ресурсы для данного нативного объявления должны отображаться внутри макета NativeAdView
. Google Mobile Ads SDK (бета-версия) пытается регистрировать предупреждение, когда нативные ресурсы отображаются вне макета представления нативного объявления.
Классы представления рекламы также предоставляют методы для регистрации представления, используемого для каждого отдельного объекта, и один для регистрации самого объекта NativeAd
. Такая регистрация представлений позволяет SDK автоматически выполнять такие задачи, как:
- Запись щелчков
- Регистрация впечатлений, когда на экране виден первый пиксель
- Отображение наложения AdChoices для нативных рекламных объявлений для заполнения (в настоящее время доступно только избранной группе издателей).
Показывать нативную рекламу
В следующем примере показано, как отображать нативную рекламу:
Котлин
private fun displayNativeAd(nativeAd: NativeAd, nativeAdBinding : NativeAdBinding) {
// Set the native ad view elements.
val nativeAdView = nativeAdBinding.root
nativeAdView.advertiserView = nativeAdBinding.adAdvertiser
nativeAdView.bodyView = nativeAdBinding.adBody
nativeAdView.callToActionView = nativeAdBinding.adCallToAction
nativeAdView.headlineView = nativeAdBinding.adHeadline
nativeAdView.iconView = nativeAdBinding.adAppIcon
nativeAdView.priceView = nativeAdBinding.adPrice
nativeAdView.starRatingView = nativeAdBinding.adStars
nativeAdView.storeView = nativeAdBinding.adStore
// Set the view element with the native ad assets.
nativeAdBinding.adAdvertiser.text = nativeAd.advertiser
nativeAdBinding.adBody.text = nativeAd.body
nativeAdBinding.adCallToAction.text = nativeAd.callToAction
nativeAdBinding.adHeadline.text = nativeAd.headline
nativeAdBinding.adAppIcon.setImageDrawable(nativeAd.icon?.drawable)
nativeAdBinding.adPrice.text = nativeAd.price
nativeAd.starRating?.toFloat().let { value ->
nativeAdBinding.adStars.rating = value
}
nativeAdBinding.adStore.text = nativeAd.store
// Hide views for assets that don't have data.
nativeAdBinding.adAdvertiser.visibility = getAssetViewVisibility(nativeAd.advertiser)
nativeAdBinding.adBody.visibility = getAssetViewVisibility(nativeAd.body)
nativeAdBinding.adCallToAction.visibility = getAssetViewVisibility(nativeAd.callToAction)
nativeAdBinding.adHeadline.visibility = getAssetViewVisibility(nativeAd.headline)
nativeAdBinding.adAppIcon.visibility = getAssetViewVisibility(nativeAd.icon)
nativeAdBinding.adPrice.visibility = getAssetViewVisibility(nativeAd.price)
nativeAdBinding.adStars.visibility = getAssetViewVisibility(nativeAd.starRating)
nativeAdBinding.adStore.visibility = getAssetViewVisibility(nativeAd.store)
// Inform Google Mobile Ads SDK (beta) that you have finished populating
// the native ad views with this native ad.
nativeAdView.registerNativeAd(nativeAd, nativeAdBinding.adMedia)
}
/**
* Determines the visibility of an asset view based on the presence of its asset.
*
* @param asset The native ad asset to check for nullability.
* @return [View.VISIBLE] if the asset is not null, [View.INVISIBLE] otherwise.
*/
private fun getAssetViewVisibility(asset: Any?): Int {
return if (asset == null) View.INVISIBLE else View.VISIBLE
}
Ява
private void displayNativeAd(ad: NativeAd, nativeAdBinding : NativeAdBinding) {
// Set the native ad view elements.
NativeAdView nativeAdView = nativeAdBinding.getRoot();
nativeAdView.setAdvertiserView(nativeAdBinding.adAdvertiser);
nativeAdView.setBodyView(nativeAdBinding.adBody);
nativeAdView.setCallToActionView(nativeAdBinding.adCallToAction);
nativeAdView.setHeadlineView(nativeAdBinding.adHeadline);
nativeAdView.setIconView(nativeAdBinding.adAppIcon);
nativeAdView.setPriceView(nativeAdBinding.adPrice);
nativeAdView.setStarRatingView(nativeAdBinding.adStars);
nativeAdView.setStoreView(nativeAdBinding.adStore);
// Set the view element with the native ad assets.
nativeAdBinding.adAdvertiser.setText(nativeAd.getAdvertiser());
nativeAdBinding.adBody.setText(nativeAd.getBody());
nativeAdBinding.adCallToAction.setText(nativeAd.getCallToAction());
nativeAdBinding.adHeadline.setText(nativeAd.getHeadline());
if (nativeAd.getIcon() != null) {
nativeAdBinding.adAppIcon.setImageDrawable(nativeAd.getIcon().getDrawable());
}
nativeAdBinding.adPrice.setText(nativeAd.getPrice());
if (nativeAd.getStarRating() != null) {
nativeAdBinding.adStars.setRating(nativeAd.getStarRating().floatValue());
}
nativeAdBinding.adStore.setText(nativeAd.getStore());
// Hide views for assets that don't have data.
nativeAdBinding.adAdvertiser.setVisibility(getAssetViewVisibility(nativeAd.getAdvertiser()));
nativeAdBinding.adBody.setVisibility(getAssetViewVisibility(nativeAd.getBody()));
nativeAdBinding.adCallToAction.setVisibility(getAssetViewVisibility(nativeAd.getCallToAction()));
nativeAdBinding.adHeadline.setVisibility(getAssetViewVisibility(nativeAd.getHeadline()));
nativeAdBinding.adAppIcon.setVisibility(getAssetViewVisibility(nativeAd.getIcon()));
nativeAdBinding.adPrice.setVisibility(getAssetViewVisibility(nativeAd.getPrice()));
nativeAdBinding.adStars.setVisibility(getAssetViewVisibility(nativeAd.getStarRating()));
nativeAdBinding.adStore.setVisibility(getAssetViewVisibility(nativeAd.getStore()));
// Inform Google Mobile Ads SDK (beta) that you have finished populating
// the native ad views with this native ad.
nativeAdView.registerNativeAd(nativeAd, nativeAdBinding.adMedia);
}
/**
* Determines the visibility of an asset view based on the presence of its asset.
*
* @param asset The native ad asset to check for nullability.
* @return {@link View#VISIBLE} if the asset is not null, {@link View#INVISIBLE} otherwise.
*/
private int getAssetViewVisibility(Object asset) {
return (asset == null) ? View.INVISIBLE : View.VISIBLE;
}
Наложение AdChoices
Оверлей AdChoices добавляется SDK в качестве рекламного представления при возврате объявления-заполнения. Если ваше приложение использует нативную рекламу-заполнение, оставьте место в нужном углу нативного рекламного представления для автоматически вставленного логотипа AdChoices. Кроме того, важно, чтобы оверлей AdChoices был виден, поэтому выбирайте соответствующие фоновые цвета и изображения. Подробнее о внешнем виде и функциях оверлея см. в руководстве по реализации нативной рекламы с программной реализацией .
Атрибуция рекламы для программной нативной рекламы
При показе программной нативной рекламы необходимо указывать авторство объявления, чтобы обозначить, что это реклама. Подробнее см. в наших правилах .
Обработка щелчков
Не реализуйте пользовательские обработчики кликов в представлениях, расположенных поверх или внутри нативного представления рекламы. Клики по объектам представления рекламы обрабатываются SDK при условии корректного заполнения и регистрации представлений активов.
Для отслеживания кликов реализуйте функцию обратного вызова клика Google Mobile Ads SDK (бета-версия):
Котлин
private fun setEventCallback(nativeAd: NativeAd) {
nativeAd.adEventCallback =
object : NativeAdEventCallback {
override fun onAdClicked() {
Log.d(Constant.TAG, "Native ad recorded a click.")
}
}
}
Ява
private void setEventCallback(NativeAd nativeAd) {
nativeAd.setAdEventCallback(new NativeAdEventCallback() {
@Override
public void onAdClicked() {
Log.d(Constant.TAG, "Native ad recorded a click.");
}
});
}
ImageScaleType
Класс MediaView
имеет свойство ImageScaleType
, используемое при отображении изображений. Если вы хотите изменить масштаб изображения в MediaView
, установите соответствующее свойство ImageView.ScaleType
с помощью метода setImageScaleType()
объекта MediaView
:
Котлин
nativeAdViewBinding.mediaView.imageScaleType = ImageView.ScaleType.CENTER_CROP
Ява
nativeAdViewBinding.mediaView.setImageScaleType(ImageView.ScaleType.CENTER_CROP);
МедиаКонтент
Класс MediaContent
содержит данные, связанные с медиаконтентом нативной рекламы, которая отображается с помощью класса MediaView
. Когда свойство MediaView
mediaContent
задано с помощью экземпляра MediaContent
:
Если видео доступно, оно буферизуется и начинается воспроизведение внутри
MediaView
. Проверить доступность видео можно, проверивhasVideoContent()
.Если объявление не содержит видеоактива, вместо него загружается актив
mainImage
и помещается вMediaView
.
Уничтожить рекламу
После показа нативной рекламы удалите её. Следующий пример удаляет нативную рекламу:
Котлин
nativeAd.destroy()
Ява
nativeAd.destroy();
Тестовый нативный рекламный код
Прямая продажа рекламы
Если вы хотите протестировать, как выглядит нативная реклама с прямой продажей, вы можете использовать этот идентификатор рекламного блока Менеджера рекламы:
/21775744923/example/native
Он настроен на показ образцов рекламы для установки приложений и контента, а также пользовательского формата нативной рекламы со следующими ресурсами:
- Заголовок (текст)
- MainImage (изображение)
- Подпись (текст)
Идентификатор шаблона для пользовательского формата нативной рекламы — 10063170
.
Нативная засыпная реклама
Заполнение Ad Exchange доступно только избранной группе издателей. Чтобы протестировать поведение нативных объявлений с заполнением, используйте этот рекламный блок Менеджера рекламы:
/21775744923/example/native-backfill
Он показывает примеры рекламы приложений и контента, включающие наложение AdChoices.
Не забудьте обновить свой код, указав в нем фактические идентификаторы рекламного блока и шаблона, прежде чем он будет опубликован.
Следующие шаги
Изучите следующие темы:
Пример
Загрузите и запустите пример приложения , демонстрирующий использование Google Mobile Ads SDK (бета-версия).