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

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

Здесь можно добавлять, изменять и удалять отдельные поля. Обратите внимание на название каждого объекта. Название – это ключ, который используется для получения данных по каждому объекту при показе нативного объявления специального формата.
Специальные форматы нативных объявлений в КМС
Пользовательские форматы нативных объявлений отличаются от системных тем, что издатели могут определять собственный список объектов, из которых состоит объявление. Поэтому процесс показа таких объявлений отличается от показа объявлений стандартных форматов:
- Текстовые и графические объекты доступны через методы получения
getText()иgetImage(), которые принимают название поля в качестве параметра. - Поскольку в Google нет специального класса
ViewGroup, который можно зарегистрировать, вам нужно регистрировать показы и клики вручную. - Если в специальном нативном объявлении нет видеообъекта, то медиаконтент имеет тип
null.
В примере ниже показано, как отобразить CustomNativeAd:
Kotlin
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, найдите альтернативный способ показать объявление без видео.
В следующем примере проверяется, есть ли в объявлении видеоконтент. Если видео недоступно, вместо него показывается изображение.
Kotlin
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();
}
Подробнее о том, как настроить показ видео в нативном объявлении, читайте в статье Видеообъявления.
Как показывать значок "Выбор рекламы"
В рамках поддержки закона ЕС "О цифровых услугах" (DSA) объявления с резервированием, которые показываются в Европейской экономической зоне (ЕЭЗ), должны содержать значок "Выбор рекламы" и ссылку на страницу Google "Об этой рекламе". В нативных объявлениях должен показываться значок "Выбор рекламы". Ответственность за это несете вы. Настоятельно рекомендуем вам отображать значок "Выбор рекламы" и устанавливать для него прослушиватель кликов при отрисовке основных объектов объявлений.
В примере ниже предполагается, что вы определили элемент <ImageView /> в иерархии View, чтобы разместить логотип "Выбор рекламы".
<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>
В примерах ниже показано, как отобразить значок "Выбор рекламы" и настроить поведение при клике.
Kotlin
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():
Kotlin
// Record an impression.
customNativeAd.recordImpression()
Java
// Record an impression.
customNativeAd.recordImpression();
Если приложение случайно вызовет метод дважды для одного и того же объявления, SDK автоматически предотвратит регистрацию дублирующегося показа для одного запроса.
Клики по ссылке для жалобы
Чтобы сообщить SDK о клике по объекту, вызовите метод performClick() объявления. Укажите название объекта, по которому был выполнен клик, используя ту же строку, которую вы задали в интерфейсе Менеджера рекламы.
Kotlin
imageView.setOnClickListener { customNativeAd.performClick("MainImage") }
Java
imageView.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
customNativeAd.performClick("MainImage");
}
});
Обратите внимание, что этот метод не нужно вызывать для каждого представления, связанного с объявлением. Если у вас есть другое поле, например "Подпись", которое должно показываться, но не должно быть доступно для нажатия, то для этого объекта вызывать метод performClick не нужно.
Как реагировать на специальные действия по клику
Когда пользователь нажимает на объявление специального формата, SDK может выполнить одно из трех действий (в указанном порядке):
- Вызовите
OnCustomClickListener, если он был предоставлен. - Для каждого URL ссылки на контент в объявлении попытайтесь найти распознаватель контента и запустите первый из них, который будет распознан.
- Откройте браузер и перейдите по целевому URL объявления.
Чтобы реализовать собственное действие по клику, укажите OnCustomClickListener:
Kotlin
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 отслеживания, заданные для креатива, и выполнять другие задачи в фоновом режиме без дополнительного кода.