Oprócz zdefiniowanych przez system formatów natywnych wydawcy Ad Managera mogą tworzyć własne formaty reklam natywnych, definiując niestandardowe listy komponentów. Są to niestandardowe formaty reklam natywnych, których można używać w przypadku reklam zarezerwowanych. Umożliwia to wydawcom przekazywanie do aplikacji dowolnych danych strukturalnych. Te reklamy są reprezentowane przez
NativeCustomFormatAd
obiekt.
Wczytywanie niestandardowych formatów reklam natywnych
Z tego przewodnika dowiesz się, jak wczytywać i wyświetlać niestandardowe formaty reklam natywnych.
Wczytywanie niestandardowej reklamy natywnej
Aby wczytać niestandardową reklamę natywną:
W
NativeAdRequestuwzględnij typ reklamyNativeAdType.CUSTOM_NATIVE.Ustaw identyfikator formatu niestandardowej reklamy natywnej.
Kotlin
Java
Identyfikator niestandardowego formatu reklamy natywnej
Identyfikator formatu używany do identyfikowania niestandardowego formatu reklamy natywnej można znaleźć w interfejsie Ad Managera w sekcji Natywne w menu Wyświetlanie:

Każdy identyfikator niestandardowego formatu reklamy natywnej jest wyświetlany obok jego nazwy. Kliknięcie jednej z nazw powoduje przejście do ekranu szczegółów z informacjami o polach formatu:

W tym miejscu można dodawać, edytować i usuwać poszczególne pola. Zwróć uwagę na nazwę każdego zasobu. Nazwa jest kluczem używanym do pobierania danych każdego komponentu podczas wyświetlania niestandardowego formatu reklamy natywnej.
Wyświetlanie niestandardowych formatów reklam natywnych
Niestandardowe formaty reklam natywnych różnią się od formatów zdefiniowanych przez system tym, że wydawcy mogą definiować własną listę komponentów, które składają się na reklamę. Dlatego proces wyświetlania różni się od formatów zdefiniowanych przez system na kilka sposobów:
- Komponenty tekstowe i komponenty z obrazem są dostępne za pomocą metod pobierających
getText()igetImage(), które przyjmują nazwę pola jako parametr. - Ponieważ nie ma dedykowanej klasy
ViewGroup, którą można zarejestrować w Google, musisz ręcznie rejestrować wyświetlenia i kliknięcia. - Niestandardowa reklama natywna ma treść multimedialną
null, jeśli nie zawiera komponentu wideo.
Ten przykład pokazuje, jak wyświetlić 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();
}
}
Natywna kreacja wideo w niestandardowych formatach reklam natywnych
Podczas tworzenia formatu niestandardowego, możesz określić, czy ma on być odpowiedni do wyświetlania reklam wideo.
W implementacji aplikacji możesz użyć CustomNativeAd.getMediaContent()
aby uzyskać treść multimedialną. Następnie wywołaj setMediaContent()
, aby ustawić treść multimedialną w widoku multimediów.
Jeśli reklama ma treść multimedialną null, przygotuj alternatywne rozwiązanie, aby wyświetlać reklamę bez filmu.
Poniższy przykład sprawdza, czy reklama zawiera treść wideo, a jeśli nie jest ona dostępna, wyświetla obraz:
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();
}
Więcej informacji o tym, jak dostosować wyświetlanie reklam wideo w niestandardowej reklamie natywnej, znajdziesz w artykule Reklamy wideo.
Renderowanie ikony Informacja
W ramach wspierania aktu o usługach cyfrowych (DSA), reklamy z rezerwacji wyświetlane w Europejskim Obszarze Gospodarczym (EOG) muszą zawierać ikonę Informacja i link do strony „O tej reklamie” w Google. Implementując niestandardowe reklamy natywne, odpowiadasz za renderowanie ikony Informacja. Zalecamy podjęcie kroków w celu renderowania i ustawienia detektora kliknięć ikony Informacja podczas renderowania głównych komponentów reklamy.
Poniższy przykład zakłada, że w hierarchii widoków zdefiniowano element <ImageView />, który będzie zawierać logo Informacja.
<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>
Poniższe przykłady renderują ikonę Informacja i konfigurują odpowiednie działanie po kliknięciu.
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);
}
}
}
Rejestrowanie wyświetleń i raportowanie kliknięć
Twoja aplikacja odpowiada za rejestrowanie wyświetleń i raportowanie zdarzeń kliknięć do GMA Next-Gen SDK.
Rejestrowanie wyświetleń
Aby zarejestrować wyświetlenie niestandardowej reklamy natywnej, wywołaj metodę recordImpression() reklamy:
Kotlin
// Record an impression.
customNativeAd.recordImpression()
Java
// Record an impression.
customNativeAd.recordImpression();
Jeśli aplikacja przypadkowo wywoła tę metodę 2 razy w przypadku tej samej reklamy, pakiet SDK automatycznie uniemożliwi zarejestrowanie zduplikowanego wyświetlenia w przypadku pojedynczego żądania.
Raportowanie kliknięć
Aby poinformować pakiet SDK o kliknięciu w widok komponentu, wywołaj metodę performClick() reklamy. Podaj nazwę klikniętego komponentu, używając tego samego ciągu znaków, który został zdefiniowany w interfejsie Ad Managera.
Kotlin
imageView.setOnClickListener { customNativeAd.performClick("MainImage") }
Java
imageView.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
customNativeAd.performClick("MainImage");
}
});
Pamiętaj, że nie musisz wywoływać tej metody w przypadku każdego widoku powiązanego z reklamą. Jeśli masz inne pole o nazwie „Podpis”, które ma być wyświetlane, ale nie jest klikane ani dotykane przez użytkownika, aplikacja nie musi wywoływać metody performClick w przypadku tego widoku komponentu.
Odpowiadanie na niestandardowe działania po kliknięciu
Gdy klikniesz reklamę w formacie niestandardowym, pakiet SDK może zareagować na 3 sposoby, w tej kolejności:
- Wywoła
OnCustomClickListener, jeśli został podany. - W przypadku każdego adresu URL linku bezpośredniego reklamy spróbuje znaleźć moduł rozpoznawania treści i uruchomić pierwszy z nich.
- Otworzy przeglądarkę i przejdzie do docelowego adresu URL reklamy.
Aby zaimplementować niestandardowe działanie po kliknięciu, podaj 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.
}
});
Na początku może się wydawać dziwne, że istnieją niestandardowe detektory kliknięć. W końcu aplikacja właśnie poinformowała pakiet SDK o kliknięciu, więc dlaczego pakiet SDK miałby to zgłaszać aplikacji?
Ten przepływ informacji jest przydatny z kilku powodów, ale najważniejsze jest to, że umożliwia pakietowi SDK kontrolowanie reakcji na kliknięcie. Może on na przykład automatycznie wysyłać pingi do linków monitorujących firm zewnętrznych, które zostały ustawione w kreacji, i wykonywać inne zadania w tle bez dodatkowego kodu.