Grâce à l’API des bandeaux publicitaires natifs, vous pouvez créer une expérience personnalisée permettant de présenter une publicité native sans les éléments de contenu publicitaire de l’annonceur de type image, vidéo ou carrousel. Comme dans le cas des publicités natives, vous recevrez un groupe de propriétés de publicité telles qu’un titre, une icône et un bouton call-to-action, que vous utiliserez pour créer une vue personnalisée dans laquelle la publicité s’affichera. Toutefois, contrairement aux bandeaux publicitaires, l’API des bandeaux publicitaires natifs vous offre une expérience de composition native qui vous permet de personnaliser entièrement la disposition des composants de la publicité.
Assurez-vous d’avoir terminé le Guide de démarrage et le guide Démarrer avec Android avant de commencer.
Ce guide vous indique comment placer le bandeau publicitaire natif indiqué ci-dessous. Vous allez créer un bandeau publicitaire natif au moyen des composants suivants :
Vue n° 1 : AdOptionsViewVue n° 2 : Étiquette de publicité sponsoriséeVue n° 3 : Icône de la publicité | Vue n° 4 : Titre de la publicitéVue n° 5 : Contexte socialVue n° 6 : Bouton call-to-action |
La méthode a été ajoutée à la version 5.1 du SDK Audience Network pour Android.
L’initialisation explicite du SDK Audience Network pour Android est requise à partir de la version 5.3.0
. Veuillez consulter ce document pour savoir comment initialiser le SDK Audience Network pour Android.
Avant de télécharger un objet publicitaire et de charger des publicités, vous devez initialiser le SDK Audience Network. Il est recommandé de le faire lors du démarrage de l’application.
public class YourApplication extends Application { ... @Override public void onCreate() { super.onCreate(); // Initialize the Audience Network SDK AudienceNetworkAds.initialize(this); } ... }
Ajoutez le code suivant en haut de votre activité pour importer le SDK Facebook Ads :
import com.facebook.ads.*;
Ensuite, instanciez un objet NativeBannerAd
, créez un élément AdListener
, puis appelez loadAd(...)
dans votre activité :
public class NativeBannerAdActivity extends Activity { private final String TAG = NativeBannerAdActivity.class.getSimpleName(); private NativeBannerAd nativeBannerAd; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Instantiate a NativeBannerAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get a no fill error). nativeBannerAd = new NativeBannerAd(this, "YOUR_PLACEMENT_ID"); NativeAdListener nativeAdListener = new NativeAdListener() { @Override public void onMediaDownloaded(Ad ad) { // Native ad finished downloading all assets Log.e(TAG, "Native ad finished downloading all assets."); } @Override public void onError(Ad ad, AdError adError) { // Native ad failed to load Log.e(TAG, "Native ad failed to load: " + adError.getErrorMessage()); } @Override public void onAdLoaded(Ad ad) { // Native ad is loaded and ready to be displayed Log.d(TAG, "Native ad is loaded and ready to be displayed!"); } @Override public void onAdClicked(Ad ad) { // Native ad clicked Log.d(TAG, "Native ad clicked!"); } @Override public void onLoggingImpression(Ad ad) { // Native ad impression Log.d(TAG, "Native ad impression logged!"); } }); // load the ad nativeBannerAd.loadAd( nativeBannerAd.buildLoadAdConfig() .withAdListener(nativeAdListener) .build()); } }
Nous y reviendrons plus tard pour ajouter du code à la méthode onAdLoaded()
.
Ensuite, vous devez extraire les métadonnées de la publicité et utiliser ses propriétés pour créer votre interface native sur mesure. Vous pouvez créer votre vue sur mesure au format .xml ou ajouter des éléments dans le code.
Veuillez consulter nos règles concernant les bandeaux publicitaires natifs lorsque vous en créez dans votre application.
Dans la composition activity_main.xml
de votre activité, ajoutez un conteneur pour votre bandeau publicitaire natif. Le conteneur doit être un com.facebook.ads.NativeAdLayout, c’est-à-dire un wrapper par dessus un FrameLayout avec une fonctionnalité supplémentaire qui nous a permis d’ajouter un flux de rapports de publicité. Par la suite, dans la méthode onAdLoaded()
, vous devrez remplir votre vue de publicité native dans ce conteneur.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> ... <com.facebook.ads.NativeAdLayout android:id="@+id/native_banner_ad_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" /> ... </RelativeLayout>
Créez une composition personnalisée native_banner_ad_unit.xml
pour votre bandeau publicitaire natif :
Voici un exemple de disposition personnalisée pour votre bandeau publicitaire natif :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <RelativeLayout android:id="@+id/ad_choices_container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="2dp" /> <TextView android:id="@+id/native_ad_sponsored_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:ellipsize="end" android:lines="1" android:padding="2dp" android:textColor="@android:color/darker_gray" android:textSize="12sp" /> </LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white"> <com.facebook.ads.MediaView android:id="@+id/native_icon_view" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:gravity="center" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:orientation="vertical" android:paddingLeft="53dp" android:paddingRight="83dp"> <TextView android:id="@+id/native_ad_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" android:lines="1" android:textColor="@android:color/black" android:textSize="15sp" android:textStyle="bold" /> <TextView android:id="@+id/native_ad_social_context" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" android:lines="1" android:textSize="12sp" /> </LinearLayout> <Button android:id="@+id/native_ad_call_to_action" android:layout_width="80dp" android:layout_height="50dp" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:background="#4286F4" android:gravity="center" android:paddingLeft="3dp" android:paddingRight="3dp" android:textColor="@android:color/white" android:textSize="12sp" android:visibility="gone" /> </RelativeLayout> </LinearLayout>
onAdLoaded()
ci-dessus pour récupérer les propriétés de Native Banner Ad's
et les afficher comme suit :public class NativeBannerAdActivity extends Activity { private NativeAdLayout nativeAdLayout; private LinearLayout adView; private NativeBannerAd nativeBannerAd; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Instantiate a NativeBannerAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get a no fill error). nativeBannerAd = new NativeBannerAd(this, "YOUR_PLACEMENT_ID"); NativeAdListener nativeAdListener = new NativeAdListener() { ... @Override public void onAdLoaded(Ad ad) { // Race condition, load() called again before last ad was displayed if (nativeBannerAd == null || nativeBannerAd != ad) { return; } // Inflate Native Banner Ad into Container inflateAd(nativeBannerAd); } ... }); // load the ad nativeBannerAd.loadAd( nativeBannerAd.buildLoadAdConfig() .withAdListener(nativeAdListener) .build()); } private void inflateAd(NativeBannerAd nativeBannerAd) { // Unregister last ad nativeBannerAd.unregisterView(); // Add the Ad view into the ad container. nativeAdLayout = findViewById(R.id.native_banner_ad_container); LayoutInflater inflater = LayoutInflater.from(NativeBannerAdActivity.this); // Inflate the Ad view. The layout referenced is the one you created in the last step. adView = (LinearLayout) inflater.inflate(R.layout.native_banner_ad_layout, nativeAdLayout, false); nativeAdLayout.addView(adView); // Add the AdChoices icon RelativeLayout adChoicesContainer = adView.findViewById(R.id.ad_choices_container); AdOptionsView adOptionsView = new AdOptionsView(NativeBannerAdActivity.this, nativeBannerAd, nativeAdLayout); adChoicesContainer.removeAllViews(); adChoicesContainer.addView(adOptionsView, 0); // Create native UI using the ad metadata. TextView nativeAdTitle = adView.findViewById(R.id.native_ad_title); TextView nativeAdSocialContext = adView.findViewById(R.id.native_ad_social_context); TextView sponsoredLabel = adView.findViewById(R.id.native_ad_sponsored_label); MediaView nativeAdIconView = adView.findViewById(R.id.native_icon_view); Button nativeAdCallToAction = adView.findViewById(R.id.native_ad_call_to_action); // Set the Text. nativeAdCallToAction.setText(nativeBannerAd.getAdCallToAction()); nativeAdCallToAction.setVisibility( nativeBannerAd.hasCallToAction() ? View.VISIBLE : View.INVISIBLE); nativeAdTitle.setText(nativeBannerAd.getAdvertiserName()); nativeAdSocialContext.setText(nativeBannerAd.getAdSocialContext()); sponsoredLabel.setText(nativeBannerAd.getSponsoredTranslation()); // Register the Title and CTA button to listen for clicks. List<View> clickableViews = new ArrayList<>(); clickableViews.add(nativeAdTitle); clickableViews.add(nativeAdCallToAction); nativeBannerAd.registerViewForInteraction(adView, nativeAdIconView, clickableViews); } }
Le SDK enregistrera l’impression et gérera le clic automatiquement. Notez que vous devez enregistrer la vue de la publicité avec l’instance NativeBannerAd
pour activer cette fonctionnalité. Pour rendre cliquables les éléments de votre publicité, enregistrez-la avec :
registerViewForInteraction(View view, MediaView adIconView)
Si la publicité s’affiche non pas immédiatement, mais quelques secondes ou quelques minutes après son chargement, le développeur doit vérifier si celle-ci a été invalidée ou non. Une fois chargée, la publicité est valide pendant 60 minutes. Vous ne recevrez pas de paiement en cas d’affichage d’une publicité invalidée. Vous devez appeler isAdInvalidated()
pour valider la publicité.
Suivez l’idée ci-dessous, mais ne copiez surtout pas le code dans votre projet, car il s’agit d’un exemple :
public class NativeBannerAdActivity extends Activity { private NativeBannerAd nativeBannerAd; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Instantiate a NativeBannerAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get a no fill error). nativeBannerAd = new NativeBannerAd(this, "YOUR_PLACEMENT_ID"); NativeAdListener nativeAdListener = new NativeAdListener() { ... }); // load the ad nativeBannerAd.loadAd( nativeBannerAd.buildLoadAdConfig() .withAdListener(nativeAdListener) .build()); } private void showAdWithDelay() { /** * Here is an example for displaying the ad with delay; * Please do not copy the Handler into your project */ // Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { // Check if nativeBannerAd has been loaded successfully if(nativeBannerAd == null || !nativeBannerAd.isAdLoaded()) { return; } // Check if ad is already expired or invalidated, and do not show ad if that is the case. You will not get paid to show an invalidated ad. if(nativeBannerAd.isAdInvalidated()) { return; } inflateAd(nativeBannerAd); // Inflate Native Banner Ad into Container same as in previous code example } }, 1000 * 60 * 15); // Show the ad after 15 minutes } }
Pour garantir une meilleure expérience utilisateur et de meilleurs résultats, vous devez toujours penser à contrôler la zone cliquable de votre publicité pour éviter les clics accidentels. N’hésitez pas à consulter la page Politique relative au SDK de l’Audience Network pour obtenir des détails sur la mise en application du règlement sur les espaces blancs non cliquables.
Pour contrôler plus précisément les zones cliquables, vous pouvez utiliser l’élément registerViewForInteraction(View view, MediaView adIconView, List<View> clickableViews)
afin d’enregistrer une liste des vues sur lesquelles il est possible de cliquer. Par exemple, si vous souhaitez uniquement que le titre de la publicité et le bouton d’appel à l’action soient cliquables dans l’exemple précédent, vous pouvez l’écrire comme suit :
@Override public void onAdLoaded(Ad ad) { ... List<View> clickableViews = new ArrayList<>(); clickableViews.add(nativeAdTitle); clickableViews.add(nativeAdCallToAction); nativeBannerAd.registerViewForInteraction(mAdView, nativeAdIconView, clickableViews); ... }
Lorsque vous réutilisez la vue pour présenter différentes publicités au fil du temps, veillez à appeler unregisterView()
avant d’enregistrer la même vue avec une autre instance de NativeBannerAd
.
Exécutez le code ; vous devriez voir un bandeau publicitaire natif :
Lorsqu’une publicité est chargée, les propriétés suivantes incluent certaines valeurs : title
, icon
et callToAction
. D’autres propriétés peuvent être nulles ou vides. Assurez-vous que votre code est suffisamment robuste pour gérer ces cas.
Lorsqu’il n’y a aucune publicité à présenter, onError
est appelé, accompagné d’un élément error.code
. Si vous utilisez votre propre couche de médiation ou de rapport personnalisée, nous vous conseillons de vérifier la valeur du code et de détecter ce cas. Vous pouvez utiliser un autre réseau publicitaire dans ce cas, mais ne renvoyez pas de demande de publicité immédiatement après.
Les métadonnées de la publicité que vous recevez peuvent être mises en cache et réutilisées pendant 30 minutes au maximum. Après cela, si vous souhaitez utiliser les métadonnées, vous devez faire un appel pour charger une nouvelle publicité.
Découvrez nos exemples de code de l’Audience Network pour Android sur Github. Importez les projets dans votre environnement de développement intégré et lancez-les sur un appareil ou sur le simulateur.
Lorsque votre app est prête pour la mise en ligne et la monétisation, envoyez votre app pour qu’elle soit examinée afin de vérifier qu’elle est conforme aux règles de l’Audience Network et aux standards de la communauté Facebook.
Pour ajouter des bandeaux publicitaires natifs à votre application, consultez le guide des modèles de publicités natives.
Découvrez nos exemples de code qui montrent le fonctionnement des publicités natives. L’exemple NativeBannerAdSample
fait partie du SDK et se situe dans le dossier AudienceNetwork/samples
. Importez le projet dans votre environnement de développement intégré, et lancez-le sur un appareil ou sur le simulateur.
Ressources supplémentaires |
Guide de démarrageGuide technique pour démarrer avec Audience Network Exemples de codeExemples d’intégration de publicités de l’Audience Network | Questions/réponsesQuestions/réponses sur l’Audience Network Modèle de publicités nativesUne approche plus pratique lors de l’intégration de publicités natives |