В дополнение к системно определенным нативным форматам, издатели Ad Manager могут создавать собственные нативные форматы рекламы, определяя пользовательские списки ресурсов. Они называются пользовательскими нативными форматами рекламы и могут использоваться с зарезервированными объявлениями. Это позволяет издателям передавать произвольные структурированные данные в свои приложения. Эти объявления представлены объектом NativeCustomFormatAd .
Загрузка пользовательских форматов нативной рекламы
В этом руководстве объясняется, как загружать и отображать пользовательские форматы нативной рекламы .
Загрузить пользовательскую нативную рекламу
Чтобы загрузить пользовательскую нативную рекламу, выполните следующие действия:
Включите тип объявления
NativeAdType.CUSTOM_NATIVEв запросNativeAdRequest.Укажите идентификатор формата пользовательской нативной рекламы.
Котлин
Java
Идентификатор пользовательского формата нативной рекламы
Идентификатор формата, используемый для идентификации пользовательского формата нативной рекламы, можно найти в пользовательском интерфейсе Ad Manager в разделе « Нативная реклама» в раскрывающемся списке «Доставка» :

Идентификатор каждого пользовательского формата нативной рекламы отображается рядом с его названием. Щелчок по одному из названий переводит вас на экран с подробной информацией о полях формата:

Здесь можно добавлять, редактировать и удалять отдельные поля. Обратите внимание на название каждого из ресурсов. Название является ключом, используемым для получения данных по каждому ресурсу при отображении вашего пользовательского формата нативной рекламы.
Отображение пользовательских форматов нативной рекламы
Пользовательские форматы нативной рекламы отличаются от системных тем, что издатели имеют возможность определять собственный список элементов, составляющих объявление. Следовательно, процесс показа такого формата отличается от системных форматов по нескольким параметрам:
- Текстовые и графические ресурсы доступны через геттеры
getText()иgetImage(), которые принимают имя поля в качестве параметра. - Поскольку для регистрации в Google нет специального класса
ViewGroup, вам необходимо вручную регистрировать показы и клики. - Если в рекламном объявлении отсутствует видеофайл, оно будет иметь пустое значение
nullmedia content).
В этом примере показано, как отобразить 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()
}
Java
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()
}
Java
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
}
}
Java
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);
}
}
}
Записывайте показы и составляйте отчеты по кликам.
Ваше приложение отвечает за запись показов и передачу данных о кликах в GMA Next-Gen SDK.
Запись впечатлений
Чтобы зарегистрировать показ пользовательской нативной рекламы, вызовите метод recordImpression() этой рекламы:
Котлин
// Record an impression.
customNativeAd.recordImpression()
Java
// Record an impression.
customNativeAd.recordImpression();
Если ваше приложение случайно вызовет этот метод дважды для одной и той же рекламы, SDK автоматически предотвратит запись дублирующего показа для одного запроса.
Сообщить о кликах
Чтобы сообщить SDK о клике по элементу рекламы, вызовите метод performClick() объявления. Укажите имя элемента, по которому был совершен клик, используя ту же строку, которую вы определили в пользовательском интерфейсе Ad Manager.
Котлин
imageView.setOnClickListener { customNativeAd.performClick("MainImage") }
Java
imageView.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
customNativeAd.performClick("MainImage");
}
});
Обратите внимание, что вам не нужно вызывать этот метод для каждого представления, связанного с вашей рекламой. Если у вас есть другое поле под названием «Подпись», которое должно отображаться, но не должно быть кликнуто или нажато пользователем, вашему приложению не нужно будет вызывать performClick для представления этого элемента.
Реагировать на пользовательские действия по клику
При клике на объявление в пользовательском формате SDK может предложить три варианта ответа, которые выполняются в указанном порядке:
- Вызовите обработчик
OnCustomClickListener, если он был предоставлен. - Для каждой из прямых ссылок в рекламе попытайтесь найти обработчик контента и запустите первый, который его обнаружит.
- Откройте браузер и перейдите по целевому URL-адресу объявления.
Для реализации пользовательского действия по клику предоставьте обработчик OnCustomClickListener :
Котлин
customNativeAd.onCustomClickListener =
object : OnCustomClickListener {
override fun onCustomClick(assetName: String) {
// Perform your custom action.
}
}
Java
customNativeAd.setOnCustomClickListener(
new OnCustomClickListener() {
@Override
public void onCustomClick(@NonNull String assetName) {
// Perform your custom action.
}
});
На первый взгляд, существование пользовательских обработчиков кликов может показаться странным. В конце концов, ваше приложение только что сообщило SDK о произошедшем клике, так почему же SDK должен сообщать об этом приложению?
Этот поток информации полезен по нескольким причинам, но самое важное — он позволяет SDK сохранять контроль над реакцией на клик. Например, он может автоматически отправлять запросы на сторонние URL-адреса отслеживания, установленные для креатива, и обрабатывать другие задачи в фоновом режиме, без какого-либо дополнительного кода.