L'API Native Banner Ad ti consente di creare un'esperienza personalizzata per la visualizzazione di un'inserzione nativa senza le risorse creative dell'inserzionista, come il contenuto di immagini, video o carosello. Come per altre inserzioni native, riceverai un gruppo di proprietà dell'inserzione come titolo, icona e call to action, che dovrai usare per creare una visualizzazione personalizzata nel punto in cui verrà mostrata l'inserzione. Tuttavia, a differenza dei banner, l'API, Native Banner Ad fornisce un'esperienza di layout nativo che ti consente di avere il pieno controllo della personalizzazione del layout per i componenti all'interno dell'inserzione.
Prima di proseguire, assicurati di aver consultato le guide Primi passi di Audience Network e Primi passi su Android.
In questa guida implementeremo il seguente posizionamento dei banner nativi. Potrai creare un banner nativo con i seguenti componenti:
Visualizzazione 1: AdOptionsViewVisualizzazione 2: etichetta sponsorizzataVisualizzazione 3: icona dell'inserzione | Visualizzazione 4: titolo dell'inserzioneVisualizzazione 5: contesto socialVisualizzazione 6: pulsante di call to action |
Questo metodo è stato aggiunto nell'SDK Android Audience Network versione 5.1.
L'inizializzazione esplicita dell'SDK Audience Network per Android è obbligatoria a partire dalla versione 5.3.0
. Consulta questo documento per informazioni su come inizializzare l'SDK Audience Network per Android.
Prima di creare un oggetto pubblicitario e caricare le inserzioni, devi inizializzare l'SDK di Audience Network. È consigliabile eseguire questa operazione all'avvio dell'app.
public class YourApplication extends Application { ... @Override public void onCreate() { super.onCreate(); // Initialize the Audience Network SDK AudienceNetworkAds.initialize(this); } ... }
Aggiungi il codice seguente nella parte superiore della tua attività per importare l'SDK Facebook Ads:
import com.facebook.ads.*;
In seguito, istanzia un oggetto NativeBannerAd
, crea un AdListener
e chiama loadAd(...)
nella tua attività:
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()); } }
Torneremo in seguito per aggiungere il codice al metodo onAdLoaded()
.
Il passaggio successivo consiste nell'estrazione dei metadati dell'inserzione e nell'utilizzarne le relative proprietà per creare l'interfaccia utente nativa personalizzata. Puoi creare la visualizzazione personalizzata in un file .xml del layout oppure puoi aggiungere degli elementi nel codice.
Per la progettazione di banner nativi nell'app, consulta le nostre linee guida per le inserzioni native.
Nel layout della tua attività activity_main.xml
, aggiungi un contenitore per il banner nativo. Il contenitore deve essere un com.facebook.ads.NativeAdLayout, che è un wrapper basato su un FrameLayout con alcune funzionalità extra che ci hanno consentito di visualizzare un flusso di report di inserzioni native basato sull'inserzione. Più avanti, nel metodo onAdLoaded()
dovrai popolare la visualizzazione dell'inserzione nativa in questo contenitore.
<?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>
Crea un layout personalizzato native_banner_ad_unit.xml
per il banner nativo:
Di seguito è riportato un esempio di layout personalizzato per il banner nativo:
<?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()
per recuperare le proprietà Native Banner Ad's
e visualizzarle nel modo seguente: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); } }
L'SDK registrerà l'impression e gestirà automaticamente il clic. Tieni presente che devi registrare la visualizzazione dell'inserzione con l'istanza NativeBannerAd
per abilitarla. Per rendere cliccabili gli elementi dell'inserzione, registrala utilizzando:
registerViewForInteraction(View view, MediaView adIconView)
In caso di mancata visualizzazione dell'inserzione subito dopo il caricamento, lo sviluppatore è responsabile di verificare se l'inserzione è stata ritenuta non valida. Dopo aver caricato correttamente l'inserzione, questa sarà valida per 60 minuti. Non riceverai alcun pagamento se l'inserzione visualizzata non è valida. Devi chiamare isAdInvalidated()
per convalidare l'inserzione.
Prendi spunto dal codice seguente, ma non copiarlo nel progetto poiché è solo un esempio:
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 } }
Per un'esperienza utente e risultati migliori, controlla sempre l'area cliccabile dell'inserzione, per evitare clic accidentali. Consulta la pagina della normativa dell'SDK di Audience Network per maggiori dettagli in merito all'applicazione degli spazi bianchi non cliccabili.
Per un controllo più capillare degli elementi cliccabili, usa il metodo registerViewForInteraction(View view, MediaView adIconView, List<View> clickableViews)
per registrare una lista di visualizzazioni cliccabili. Ad esempio, se desideri rendere cliccabili solo il titolo dell'inserzione e il pulsante di call to action nell'esempio precedente, puoi scrivere così:
@Override public void onAdLoaded(Ad ad) { ... List<View> clickableViews = new ArrayList<>(); clickableViews.add(nativeAdTitle); clickableViews.add(nativeAdCallToAction); nativeBannerAd.registerViewForInteraction(mAdView, nativeAdIconView, clickableViews); ... }
Nei casi in cui riutilizzi la visualizzazione per mostrare inserzioni diverse nel tempo, assicurati di chiamare unregisterView()
prima della registrazione della stessa visualizzazione con un'istanza differente di NativeBannerAd
.
Eseguendo il codice, dovresti vedere un banner nativo:
Durante il caricamento di un'inserzione, le seguenti proprietà includeranno alcuni valori: title
, icon
e callToAction
. Altre proprietà potrebbero invece essere nulle o vuote. Assicurati che il codice sia sufficientemente affidabile per gestire questi casi.
Quando non c'è alcuna inserzione da mostrare, onError
verrà chiamato con un error.code
. Se utilizzi il tuo livello di report o mediazione personalizzato, potresti voler controllare il valore del codice e rilevare questo caso. In questo caso puoi eseguire il fallback a un'altra rete di inserzioni, ma non richiedere nuovamente un'inserzione subito dopo.
I metadati delle inserzioni ricevuti possono essere memorizzati nella cache e usati nuovamente per 30 minuti al massimo. Se programmi di utilizzarli dopo questo lasso di tempo, effettua una chiamata per caricare una nuova inserzione.
Scopri i nostri esempi di codice di Audience Network per Android su GitHub. Importa i progetti nel tuo IDE ed eseguili su un dispositivo o su un emulatore.
Quando è tutto pronto per la pubblicazione della tua app e per la monetizzazione, invia l'app per l'analisi dopo averne verificato la conformità con le normative di Audience Network e gli Standard della community di Facebook.
Consulta la guida Modello di inserzione nativa per aggiungere inserzioni native nell'app.
Esplora i nostri esempi di codice che dimostrano come utilizzare le inserzioni native. NativeBannerAdSample
è disponibile come parte dell'SDK ed è presente nella cartella AudienceNetwork/samples
. Importa il progetto nell'IDE ed eseguilo su un dispositivo o sull'emulatore.
Altre risorse |
Guida introduttivaGuida tecnica per muovere i primi passi con Audience Network Esempi di codiceEsempi di integrazione delle inserzioni di Audience Network | FAQFAQ di Audience Network Modello delle inserzioni nativeUn approccio più libero all'integrazione delle inserzioni native |