Помимо системных нативных форматов, издатели Менеджера рекламы могут создавать собственные форматы нативной рекламы, определяя пользовательские списки ресурсов. Они называются пользовательскими нативными форматами рекламы и могут использоваться с зарезервированными объявлениями. Это позволяет издателям передавать произвольные структурированные данные в свои приложения. Такие объявления представлены объектом NativeCustomFormatAd
.
Загрузить пользовательские форматы нативной рекламы
В этом руководстве объясняется, как загружать и отображать пользовательские форматы собственной рекламы .
Загрузите пользовательское нативное объявление
Чтобы загрузить пользовательское нативное объявление, выполните следующие действия:
Включите тип
NativeAdType.CUSTOM_NATIVE
как тип объявления вNativeAdRequest
.Установите идентификатор формата пользовательской нативной рекламы.
Котлин
Ява
Идентификатор пользовательского формата нативной рекламы
Идентификатор формата, используемый для определения пользовательского формата нативной рекламы, можно найти в пользовательском интерфейсе Менеджера объявлений в разделе « Нативная реклама» в раскрывающемся списке « Доставка» :
Идентификатор каждого пользовательского формата нативной рекламы отображается рядом с его названием. Нажав на одно из названий, вы откроете экран с подробной информацией о полях формата:
Здесь можно добавлять, редактировать и удалять отдельные поля. Обратите внимание на имя каждого актива. Это имя — ключ, используемый для получения данных для каждого актива при отображении вашего собственного формата нативной рекламы.
Отображение собственных нативных форматов рекламы
Пользовательские нативные форматы рекламы отличаются от системных тем, что издатели могут самостоятельно определять список ресурсов, составляющих рекламу. Поэтому процесс отображения рекламы отличается от системных форматов по нескольким параметрам:
- Текстовые и графические ресурсы доступны через
getText()
иgetImage()
, которые принимают имя поля в качестве параметра. - Поскольку специального класса
ViewGroup
для регистрации в Google не существует, вам придется вручную регистрировать показы и клики. - Пользовательское нативное объявление не имеет
null
, если объявление не содержит видеоактива.
В этом примере показано, как отобразить CustomNativeAd
:
Котлин
private fun displayCustomNativeAd(customNativeAd: CustomNativeAd, context: Context) {
// Render the text elements.
// The `customNativeAdBinding` is the layout binding for the ad container that
// contains all `CustomNativeAd` assets.
customNativeAdBinding.headline.text = customNativeAd.getText("Headline")
customNativeAdBinding.caption.text = customNativeAd.getText("Caption")
// If the main asset is an image, render it with an ImageView.
val imageView = ImageView(context)
imageView.adjustViewBounds = true
imageView.setImageDrawable(customNativeAd.getImage("MainImage")?.drawable)
imageView.setOnClickListener { customNativeAd.performClick("MainImage") }
customNativeAdBinding.mediaPlaceholder.addView(imageView)
// Render the ad choices icon.
renderAdChoices(customNativeAd)
// Record an impression.
customNativeAd.recordImpression()
}
Ява
private void displayCustomNativeAd(CustomNativeAd customNativeAd, Context context) {
// Render the text elements.
// The `customNativeAdBinding` is the layout binding for the ad container that
// contains all `CustomNativeAd` assets.
if (customNativeAdBinding != null) {
customNativeAdBinding.headline.setText(customNativeAd.getText("Headline"));
customNativeAdBinding.caption.setText(customNativeAd.getText("Caption"));
ImageView imageView = new ImageView(context);
imageView.setAdjustViewBounds(true);
imageView.setImageDrawable(customNativeAd.getImage("MainImage").getDrawable());
imageView.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
customNativeAd.performClick("MainImage");
}
});
customNativeAdBinding.mediaPlaceholder.addView(imageView);
// Render the ad choices icon.
renderAdChoices(customNativeAd);
// Record an impression.
customNativeAd.recordImpression();
}
}
Нативные видеоформаты для собственных нативных рекламных объявлений
При создании пользовательского формата у вас есть возможность сделать его пригодным для видео.
В реализации вашего приложения вы можете использовать CustomNativeAd.getMediaContent()
для получения медиаконтента. Затем вызовите setMediaContent()
чтобы установить медиаконтент в вашем медиапредставлении. Если в рекламе null
медиаконтента, предусмотрите альтернативный вариант показа рекламы без видео.
В следующем примере проверяется, есть ли в объявлении видеоконтент, и отображается изображение вместо него, если видео отсутствует:
Котлин
private fun displayVideoCustomNativeAd(customNativeAd: CustomNativeAd, context: Context) {
// Check whether the custom native ad has video content.
val mediaContent = customNativeAd.mediaContent
if (mediaContent != null && mediaContent.hasVideoContent) {
// Render the media content in a MediaView.
val mediaView = MediaView(context)
mediaView.mediaContent = mediaContent
customNativeAdBinding.mediaPlaceholder.addView(mediaView)
} else {
// Fall back to other assets defined on your custom native ad.
val imageView = ImageView(context)
imageView.adjustViewBounds = true
imageView.setImageDrawable(customNativeAd.getImage("MainImage")?.drawable)
customNativeAdBinding.mediaPlaceholder.addView(imageView)
}
// Record an impression.
customNativeAd.recordImpression()
}
Ява
private void displayVideoCustomNativeAd(CustomNativeAd customNativeAd, Context context) {
// Check whether the custom native ad has video content.
MediaContent mediaContent = customNativeAd.getMediaContent();
if (mediaContent != null && mediaContent.getHasVideoContent()) {
// Render the media content in a MediaView.
MediaView mediaView = new MediaView(context);
mediaView.setMediaContent(mediaContent);
customNativeAdBinding.mediaPlaceholder.addView(mediaView);
} else {
// Fall back to other assets defined on your custom native ad.
ImageView imageView = new ImageView(context);
imageView.setAdjustViewBounds(true);
imageView.setImageDrawable(customNativeAd.getImage("MainImage").getDrawable());
customNativeAdBinding.mediaPlaceholder.addView(imageView);
}
// Record an impression.
customNativeAd.recordImpression();
}
Дополнительную информацию о том, как настроить видеоэффекты пользовательской нативной рекламы, см. в разделе Видеореклама .
Отобразить значок AdChoices
В рамках Закона о поддержке цифровых услуг (DSA) объявления с резервированием, показываемые в Европейской экономической зоне (ЕЭЗ), должны содержать значок AdChoices и ссылку на страницу Google «Об этом объявлении» . При реализации нативной рекламы вы несёте ответственность за отображение значка AdChoices. Мы рекомендуем вам принять меры для отображения значка AdChoices и настроить прослушиватель кликов при отображении основных рекламных объектов.
В следующем примере предполагается, что вы определили элемент <ImageView />
в иерархии представлений для хранения логотипа AdChoices.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/adChoices"
android:layout_width="15dp"
android:layout_height="15dp"
android:adjustViewBounds="true"
android:contentDescription="AdChoices icon." />
</LinearLayout>
В следующих примерах отображается значок AdChoices и настраивается соответствующее поведение при клике.
Котлин
private fun renderAdChoices(customNativeAd: CustomNativeAd) {
// Render the AdChoices image.
val adChoiceAsset = customNativeAd.getImage(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW)
if (adChoiceAsset != null) {
customNativeAdBinding.adchoices.setImageDrawable(adChoiceAsset.drawable)
customNativeAdBinding.adchoices.visibility = View.VISIBLE
customNativeAdBinding.adchoices.setOnClickListener {
// Handle click. See the next section for more details.
customNativeAd.performClick(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW)
}
} else {
customNativeAdBinding.adchoices.visibility = View.GONE
}
}
Ява
private void renderAdChoices(CustomNativeAd customNativeAd) {
// Render the AdChoices image.
Image adChoiceAsset =
customNativeAd.getImage(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW);
if (adChoiceAsset != null) {
if (customNativeAdBinding != null) {
customNativeAdBinding.adchoices.setImageDrawable(adChoiceAsset.getDrawable());
customNativeAdBinding.adchoices.setVisibility(View.VISIBLE);
customNativeAdBinding.adchoices.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// Handle click.
customNativeAd.performClick(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW);
}
});
}
} else {
if (customNativeAdBinding != null) {
customNativeAdBinding.adchoices.setVisibility(View.GONE);
}
}
}
Регистрируйте показы и сообщайте о кликах
Ваше приложение отвечает за регистрацию показов и отправку сообщений о кликах в Google Mobile Ads SDK (бета-версия).
Запись впечатлений
Чтобы зарегистрировать показ пользовательской нативной рекламы, вызовите метод recordImpression()
рекламы:
Котлин
// Record an impression.
customNativeAd.recordImpression()
Ява
// Record an impression.
customNativeAd.recordImpression();
Если ваше приложение случайно вызовет метод дважды для одного и того же объявления, SDK автоматически предотвратит регистрацию повторного показа для одного запроса.
Сообщить о кликах
Чтобы сообщить SDK о клике по представлению объекта, вызовите метод performClick()
объявления. Укажите название объекта, по которому был выполнен клик, используя ту же строку, которую вы определили в пользовательском интерфейсе Менеджера рекламы.
Котлин
imageView.setOnClickListener { customNativeAd.performClick("MainImage") }
Ява
imageView.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
customNativeAd.performClick("MainImage");
}
});
Обратите внимание, что вам не нужно вызывать этот метод для каждого представления, связанного с вашей рекламой. Если бы у вас было другое поле под названием «Подпись», которое должно было отображаться, но не нажималось пользователем, вашему приложению не потребовалось бы вызывать performClick
для представления этого объекта.
Реагировать на пользовательские действия при нажатии
При клике по объявлению пользовательского формата SDK может выполнить три возможных ответа в следующем порядке:
- Вызовите
OnCustomClickListener
, если он предусмотрен. - Для каждого URL-адреса глубинной ссылки объявления попытайтесь найти преобразователь контента и запустите первый из них, который его разрешит.
- Откройте браузер и перейдите по целевому URL-адресу объявления.
Чтобы реализовать пользовательское действие щелчка, предоставьте OnCustomClickListener
:
Котлин
customNativeAd.onCustomClickListener =
object : OnCustomClickListener {
override fun onCustomClick(assetName: String) {
// Perform your custom action.
}
}
Ява
customNativeAd.setOnCustomClickListener(
new OnCustomClickListener() {
@Override
public void onCustomClick(@NonNull String assetName) {
// Perform your custom action.
}
});
Поначалу существование настраиваемых прослушивателей кликов может показаться странным. В конце концов, ваше приложение только что сообщило SDK о том, что произошло нажатие, так почему SDK должен передавать это приложению?
Этот поток информации полезен по нескольким причинам, но самое главное — он позволяет SDK контролировать реакцию на клик. Он может, например, автоматически отправлять запросы на сторонние URL-адреса отслеживания, заданные для креатива, и выполнять другие задачи автоматически, без написания дополнительного кода.