Afficher une annonce native
Lors du chargement d'une annonce native, le SDK Google Mobile Ads appelle l'écouteur pour le format d'annonce correspondant. Votre application se charge ensuite d'afficher l'annonce, même si elle ne doit pas nécessairement le faire immédiatement. Pour faciliter l'affichage des formats d'annonces définis par le système, le SDK propose des ressources utiles, comme décrites ci-dessous.
Classe NativeAdView
Pour le format NativeAd
, il existe la classe NativeAdView
correspondante. Cette classe est un ViewGroup
que les éditeurs doivent utiliser comme racine de NativeAd
. Un seul élément NativeAdView
correspond à une seule annonce native.
Chaque vue utilisée pour afficher les éléments de cette annonce (l'ImageView
qui affiche l'élément de capture d'écran, par exemple) doit être un enfant de l'objet NativeAdView
.
La hiérarchie des vues d'une annonce native qui utilise un élément LinearLayout
pour afficher les vues d'éléments peut se présenter comme suit:
<com.google.android.gms.ads.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>
// Other assets such as image or media view, call to action, etc follow.
...
</LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>
Voici un exemple qui crée un NativeAdView
et le remplit avec un NativeAd
:
Java
AdLoader.Builder builder = new AdLoader.Builder(this, "AD_UNIT_ID")
.forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
@Override
public void onNativeAdLoaded(NativeAd nativeAd) {
// Assumes you have a placeholder FrameLayout in your View layout
// (with id fl_adplaceholder) where the ad is to be placed.
FrameLayout frameLayout =
findViewById(R.id.fl_adplaceholder);
// Assumes that your ad layout is in a file call native_ad_layout.xml
// in the res/layout folder
NativeAdView adView = (NativeAdView) getLayoutInflater()
.inflate(R.layout.native_ad_layout, null);
// This method sets the text, images and the native ad, etc into the ad
// view.
populateNativeAdView(nativeAd, adView);
frameLayout.removeAllViews();
frameLayout.addView(adView);
}
});
Kotlin
val builder = AdLoader.Builder(this, "AD_UNIT_ID")
.forNativeAd { nativeAd ->
// Assumes that your ad layout is in a file call native_ad_layout.xml
// in the res/layout folder
val adView = layoutInflater
.inflate(R.layout.native_ad_layout, null) as NativeAdView
// This method sets the text, images and the native ad, etc into the ad
// view.
populateNativeAdView(nativeAd, adView)
// Assumes you have a placeholder FrameLayout in your View layout
// (with id ad_frame) where the ad is to be placed.
ad_frame.removeAllViews()
ad_frame.addView(adView)
}
Notez que tous les éléments d'une annonce native donnée doivent s'afficher dans la mise en page NativeAdView
. Le SDK Google Mobile Ads tente de générer un avertissement lorsque les assets natifs sont affichés en dehors d'une mise en page d'une vue d'annonce native.
Les classes de vues d'annonces fournissent également des méthodes permettant d'enregistrer la vue utilisée pour chaque élément individuel et une autre permettant d'enregistrer l'objet NativeAd
lui-même.
Enregistrer les vues de cette manière permet au SDK de gérer automatiquement des tâches telles que:
- Enregistrement des clics
- Enregistrer des impressions lorsque le premier pixel est visible à l'écran
- Afficher la superposition "Choisir sa pub" pour les annonces de remplissage natives (actuellement limitée à un groupe restreint d'éditeurs)
Superposition "Choisir sa pub"
Une superposition "Choisir sa pub" est ajoutée en tant qu'affichage d'annonce par le SDK lorsqu'une annonce de remplissage est renvoyée. Si votre application utilise des annonces de remplissage natives, laissez de l'espace dans l'angle préféré de la vue de l'annonce native pour le logo "Choisir sa pub" inséré automatiquement. De plus, il est important que la superposition "Choisir sa pub" soit facilement visible. Choisissez donc des couleurs et des images d'arrière-plan appropriées. Pour en savoir plus sur l'apparence et la fonction de la superposition, consultez les consignes d'implémentation des annonces natives programmatiques.
Attribution d'annonces pour les annonces natives programmatiques
Lorsque vous affichez des annonces natives programmatiques, vous devez afficher une attribution d'annonce pour indiquer que la vue est une publicité. Pour en savoir plus, consultez nos consignes relatives à notre règlement.
Exemple de code
Pour afficher une annonce native, procédez comme suit:
- Créez une instance de la classe
NativeAdView
. - Pour chaque composant d'annonce à afficher :
- Renseignez la vue de l'élément avec l'élément dans l'objet d'annonce.
- Enregistrez la vue de l'élément avec la classe
ViewGroup
.
- Enregistrez le
MediaView
si la mise en page de votre annonce native inclut un asset média volumineux. - Enregistrez l'objet d'annonce avec la classe
ViewGroup
.
Voici un exemple de fonction qui affiche un élément NativeAd
:
Java
private void displayNativeAd(ViewGroup parent, NativeAd ad) {
// Inflate a layout and add it to the parent ViewGroup.
LayoutInflater inflater = (LayoutInflater) parent.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
NativeAdView adView = (NativeAdView) inflater
.inflate(R.layout.ad_layout_file, parent);
// Locate the view that will hold the headline, set its text, and call the
// NativeAdView's setHeadlineView method to register it.
TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
headlineView.setText(ad.getHeadline());
adView.setHeadlineView(headlineView);
...
// Repeat the above process for the other assets in the NativeAd
// using additional view objects (Buttons, ImageViews, etc).
...
// If the app is using a MediaView, it should be
// instantiated and passed to setMediaView. This view is a little different
// in that the asset is populated automatically, so there's one less step.
MediaView mediaView = (MediaView) adView.findViewById(R.id.ad_media);
adView.setMediaView(mediaView);
// Call the NativeAdView's setNativeAd method to register the
// NativeAdObject.
adView.setNativeAd(ad);
// Ensure that the parent view doesn't already contain an ad view.
parent.removeAllViews();
// Place the AdView into the parent.
parent.addView(adView);
}
Kotlin
fun displayNativeAd(parent: ViewGroup, ad: NativeAd) {
// Inflate a layout and add it to the parent ViewGroup.
val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
as LayoutInflater
val adView = inflater.inflate(R.layout.ad_layout_file, parent) as NativeAdView
// Locate the view that will hold the headline, set its text, and use the
// NativeAdView's headlineView property to register it.
val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
headlineView.text = ad.headline
adView.headlineView = headlineView
...
// Repeat the above process for the other assets in the NativeAd using
// additional view objects (Buttons, ImageViews, etc).
...
val mediaView = adView.findViewById<MediaView>(R.id.ad_media)
adView.mediaView = mediaView
// Call the NativeAdView's setNativeAd method to register the
// NativeAdObject.
adView.setNativeAd(ad)
// Ensure that the parent view doesn't already contain an ad view.
parent.removeAllViews()
// Place the AdView into the parent.
parent.addView(adView)
}
Voici les différentes tâches à effectuer:
Gonfler la mise en page
Java
LayoutInflater inflater = (LayoutInflater) parent.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); NativeAdView adView = (NativeAdView) inflater .inflate(R.layout.ad_layout_file, parent);
Kotlin
val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val adView = inflater.inflate(R.layout.ad_layout_file, parent) as NativeAdView
Ce code gonfle une mise en page XML contenant des vues pour afficher une annonce native, puis localise une référence à
NativeAdView
. Notez que vous pouvez également réutiliser unNativeAdView
existant si votre fragment ou votre activité en contient un, ou même créer une instance de manière dynamique sans utiliser de fichier de mise en page.Remplir et enregistrer les vues d'éléments
Cet exemple de code localise la vue utilisée pour afficher le titre, définit son texte à l'aide de l'élément de chaîne fourni par l'objet d'annonce, puis l'enregistre avec l'objet
NativeAdView
:Java
TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline); headlineView.setText(ad.getHeadline()); adView.setHeadlineView(headlineView);
Kotlin
val headlineView = adView.findViewById<TextView>(R.id.ad_headline) headlineView.text = ad.headline adView.headlineView = headlineView
Ce processus consistant à localiser la vue, à définir sa valeur et à l'enregistrer avec la classe d'affichage de l'annonce doit être répété pour chacun des composants fournis par l'objet d'annonce native que l'application affichera.
Gérer les clics
N'implémentez aucun gestionnaire de clics personnalisé sur des vues au-dessus ou dans l'affichage de l'annonce native. Pour observer vous-même les événements de clic, utilisez l'écouteur d'annonces.
Les clics sur les éléments de vue d'annonce sont gérés par le SDK, à condition que vous remplissiez et enregistrez correctement les vues d'éléments, comme indiqué dans la section précédente.
Voici un exemple qui utilise un écouteur d'annonces pour observer les événements de clic:
Java
AdLoader adLoader = new AdLoader.Builder(context, "/6499/example/native") ... .withAdListener(new AdListener() { @Override public void onAdFailedToLoad(LoadAdError adError) { // Handle the failure by logging, altering the UI, and so on. } @Override public void onAdClicked() { // Log the click event or other custom behavior. } }) .build();
Kotlin
val adLoader = AdLoader.Builder(this, "/6499/example/native") ... .withAdListener(object : AdListener() { override fun onAdFailedToLoad(adError: LoadAdError) { // Handle the failure by logging, altering the UI, and so on. } }) .build()
Enregistrer la MediaView
Vous devez utiliser l'élément
MediaView
au lieu de l'élémentImageView
si vous souhaitez inclure un composant Image principal dans la mise en page de votre annonce native.MediaView
est unView
spécial conçu pour afficher l'asset multimédia principal, qu'il s'agisse d'une vidéo ou d'une image.MediaView
peut être défini dans une mise en page XML ou construit de manière dynamique. Il doit être placé dans la hiérarchie des vues d'unNativeAdView
, comme n'importe quelle autre vue d'élément. Les applications qui utilisent unMediaView
doivent l'enregistrer auprès deNativeAdView
:Java
MediaView mediaView = adView.findViewById(R.id.ad_media); adView.setMediaView(mediaView);
Kotlin
adView.mediaView = adView.findViewById<MediaView>(R.id.ad_media)
Comme pour toutes les vues d'éléments, le contenu de la vue multimédia doit être renseigné. Pour ce faire, utilisez la méthode
getMediaContent()
pour récupérer le contenu multimédia pouvant être transmis à unMediaView
. Voici un extrait de code définissant le contenu multimédia pour la vue multimédia:Java
mediaView.setMediaContent(nativeAd.getMediaContent());
Kotlin
mediaView.mediaContent = nativeAd.mediaContent
ImageScaleType
La classe
MediaView
possède une propriétéImageScaleType
lors de l'affichage d'images. Si vous souhaitez modifier la mise à l'échelle d'une image dansMediaView
, définissez leImageView.ScaleType
correspondant à l'aide de la méthodesetImageScaleType()
deMediaView
:Java
mediaView.setImageScaleType(ImageView.ScaleType.CENTER_CROP);
Kotlin
mediaView.imageScaleType = ImageView.ScaleType.CENTER_CROP
MediaContent
La classe
MediaContent
contient les données liées au contenu multimédia de l'annonce native, qui s'affiche à l'aide de la classeMediaView
. Lorsque la propriétéMediaView
mediaContent
est définie avec une instanceMediaContent
:Si un asset vidéo est disponible, il est mis en mémoire tampon et sa lecture commence dans
MediaView
. Pour savoir si un asset vidéo est disponible, vérifiezhasVideoContent()
.Si l'annonce ne contient pas d'asset vidéo, l'asset
mainImage
est téléchargé et placé dansMediaView
.
Par défaut,
mainImage
est le premier composant Image téléchargé. SisetReturnUrlsForImageAssets(true)
est utilisé,mainImage
est défini surnull
et vous devez définir la propriétémainImage
sur l'image téléchargée manuellement. Notez que cette image n'est utilisée que lorsqu'aucun asset vidéo n'est disponible.Enregistrer l'objet d'annonce native
Cette dernière étape enregistre l'objet d'annonce native dans la vue chargée de l'afficher:
Java
adView.setNativeAd(ad);
Kotlin
adView.setNativeAd(ad)
Détruire l'annonce
Lorsque vous avez terminé de diffuser votre annonce native, vous devez la détruire pour que la corbeille soit correctement récupérée.
Java
nativeAd.destroy();
.inflate(R.layout.ad_layout_file, parent);
Kotlin
nativeAd.destroy()
Tester le code d'annonce natif
Annonces vendues directement
Si vous souhaitez tester le fonctionnement des annonces natives vendues directement, vous pouvez utiliser cet ID de bloc d'annonces Ad Manager:
/6499/example/native
Elle est configurée pour diffuser des exemples d'annonces incitant à installer une application et d'annonces de contenu, ainsi qu'un format d'annonce native personnalisé avec les éléments suivants:
- Titre (texte)
- MainImage (image)
- Légende (texte)
L'ID du modèle pour le format personnalisé d'annonce native est 10063170
.
Annonces de remplissage natives
Les annonces de remplissage Ad Exchange sont actuellement réservées à un groupe restreint d'éditeurs. Pour tester le comportement des annonces de remplissage natives, utilisez ce bloc d'annonces Ad Manager:
/6499/example/native-backfill
Elle diffuse des exemples d'annonces incitant à installer une application et d'annonces de contenu qui incluent la superposition "Choisir sa pub".
Avant de le mettre en ligne, n'oubliez pas de mettre à jour votre code pour qu'il fasse référence aux ID de modèle et de bloc d'annonces réels.
Exemples sur GitHub
Exemple d'intégration complète d'annonces natives:
Étapes suivantes
Explorez les sujets suivants: