Adicione anúncios em banner nativos a um aplicativo Android

A API de Anúncios em Banner Nativos permite criar uma experiência personalizada para mostrar um anúncio nativo sem os ativos de criativo do anunciante, como imagem, vídeo ou conteúdo em carrossel. De modo semelhante aos anúncios nativos, você receberá um grupo de propriedades de anúncio, como título, ícone e chamada para ação. Depois, usará esses materiais para criar uma visualização personalizada onde o anúncio será exibido. Porém, ao contrário dos anúncios em banner, a API de Anúncios em Banner Nativos fornece uma experiência de layout nativo, dando a você controle total da personalização do layout de componentes do anúncio.

Certifique-se de ter concluído os guias de Introdução do Audience Network e Introdução do Android antes de continuar.

Neste guia, implementaremos o seguinte posicionamento de anúncio em banner nativo. Você criará um anúncio em banner nativo com os seguintes componentes:

Visualização 1: AdOptionsView

Visualização 2: etiqueta de conteúdo patrocinado

Visualização 3: ícone do anúncio

Visualização 4: título do anúncio

Visualização 5: contexto social

Visualização 6: botão de chamada para ação




Etapas para anúncio em banner nativo

Etapa 1. Solicitar um anúncio em banner nativo

Etapa 2. Criar o layout do seu anúncio em banner nativo

Etapa 3. Preencher o layout com os metadados do anúncio

Inicialize o SDK do Audience Network

Este método foi adicionado ao SDK do Audience Network para Android versão 5.1.

A inicialização explícita do SDK do Audience Network para Android é exigida para a versão 5.3.0 e superiores. Consulte este documento sobre como inicializar o SDK do Audience Network para Android.

Inicialize o SDK do Audience Network antes de criar um objeto de anúncio e carregar anúncios. É recomendado fazer isso durante a inicialização do aplicativo.

public class YourApplication extends Application {
    ...
    @Override
    public void onCreate() {
        super.onCreate();
        // Initialize the Audience Network SDK
        AudienceNetworkAds.initialize(this);       
    }
    ...
}

Etapa 1. Solicitar um anúncio em banner nativo

Adicione o seguinte código à parte superior da sua Atividade para importar o SDK de Anúncios do Facebook:

import com.facebook.ads.*;

Depois, instancie um objeto NativeBannerAd, crie um AdListener e faça uma chamada para loadAd(...) na sua atividade:

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());
    }
}

Voltaremos mais tarde para adicionar código ao método onAdLoaded().

Etapa 2. Criar o layout do seu anúncio em banner nativo

A próxima etapa é extrair os metadados do anúncio e usar as propriedades dele para criar sua interface do usuário nativa personalizada. Você pode criar sua visualização personalizada em um layout .xml ou pode adicionar elementos em código.

Consulte as diretrizes sobre anúncios nativos ao criar anúncios em banner nativos no seu aplicativo.

Em activity_main.xml do layout da atividade, adicione um contêiner para o anúncio em banner nativo. O contêiner deve ser um com.facebook.ads.NativeAdLayout que é um wrapper em cima de um FrameLayout com algumas funcionalidades adicionais que nos permitem renderizar um Fluxo de Relatórios de Anúncios nativo na parte superior do anúncio. Depois, no método onAdLoaded(), será necessário preencher esse contêiner com a visualização do anúncio nativo.

<?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>

Crie native_banner_ad_unit.xml de layout personalizado para o seu anúncio em banner nativo:



Veja abaixo um exemplo de layout personalizado para seu anúncio em 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>

Etapa 3. Preencher o layout com os metadados do anúncio

Cenário 1: exibir imediatamente o anúncio após o carregamento. Modifique o método onAdLoaded() acima para recuperar as propriedades Native Banner Ad's e exibir da seguinte forma:

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);
    }
}

O SDK registrará a impressão e controlará o clique automaticamente. Observe que é necessário registrar a visualização do anúncio com a instância NativeBannerAd para permitir essa opção. Para tornar os elementos do anúncio clicáveis, registre-a usando:

registerViewForInteraction(View view, MediaView adIconView)

Cenário 2: exibir o anúncio poucos segundos ou minutos após o carregamento. Você deve verificar se o anúncio foi invalidado antes de exibi-lo.

Caso o anúncio não seja exibido imediatamente depois de carregado, o desenvolvedor será responsável por verificar se o anúncio foi invalidado. Quando o anúncio for carregado com sucesso, ele será válido por 60 min. Você não será pago se estiver exibindo um anúncio invalidado. Chame isAdInvalidated() para validar o anúncio.

É necessário seguir o conceito acima, mas não copie o código no projeto, pois ele serve apenas como exemplo.

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
    }
}

Como controlar a área clicável

Para uma melhor experiência de usuário e melhores resultados, sempre considere a possibilidade de controlar a área clicável do seu anúncio para evitar cliques involuntários. Consulte a página da Política do SDK do Audience Network para obter mais detalhes sobre a aplicação de espaço em branco não clicável.

Para ter um maior controle do que pode ser clicado, use o método registerViewForInteraction(View view, MediaView adIconView, List<View> clickableViews) para registrar uma lista de visualizações que podem ser clicadas. Por exemplo, se você quiser tornar apenas o título do anúncio e o botão de chamada para ação clicáveis, no exemplo anterior, será possível escrever assim:

@Override
public void onAdLoaded(Ad ad) {
  ...
  List<View> clickableViews = new ArrayList<>();
  clickableViews.add(nativeAdTitle);
  clickableViews.add(nativeAdCallToAction);
  nativeBannerAd.registerViewForInteraction(mAdView, nativeAdIconView, clickableViews);
  ...
}

Em casos nos quais a visualização é reutilizada para exibir anúncios diferentes ao longo do tempo, faça uma chamada para unregisterView() antes de registrar a mesma visualização com uma instância diferente de NativeBannerAd.

Ao executar o código, você verá um anúncio em banner nativo:

Quando um anúncio for carregado, as seguintes propriedades incluirão algum valor: title, icon e callToAction. Outras propriedades podem ser nulas ou estar vazias. Certifique-se de que se seu código é sólido o suficiente para lidar com esses casos.


Se não houver nenhum anúncio para exibir, onError receberá uma chamada com um error.code. Se você usa seu próprio relatório personalizado ou camada de mediação, verifique o valor do código para detectar esse caso. Nesse caso, você pode recorrer a uma rede de anúncios alternativa, mas não solicite novamente um anúncio logo em seguida.


Os metadados de anúncios que você recebe podem ser armazenados em cache e reutilizados por até 30 minutos. Se você pretende usar os metadados após esse período, faça uma chamada para carregar um novo anúncio.

Próximas etapas

  • Consulte o guia Modelo de anúncio nativo para adicionar anúncios nativos ao aplicativo.

  • Explore nossos exemplos de código que demonstram como usar anúncios nativos. NativeBannerAdSample está disponível como parte do SDK. É possível encontrar o modelo na pasta AudienceNetwork/samples. Importe o projeto para o seu IDE e execute-o em um dispositivo ou no emulador.

Mais recursos

Guia de introdução

Guia técnico de introdução ao Audience Network

Exemplos de código

Amostras de integração de anúncios do Audience Network

Perguntas frequentes

Perguntas frequentes sobre o Audience Network

Modelo de anúncios nativos

Uma abordagem mais indireta em relação à integração de anúncios nativos