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: AdOptionsViewVisualização 2: etiqueta de conteúdo patrocinadoVisualização 3: ícone do anúncio | Visualização 4: título do anúncioVisualização 5: contexto socialVisualização 6: botão de chamada para ação |
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); } ... }
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()
.
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>
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)
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 } }
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.
Explore nossas amostras de código do Audience Network para Android no Github. Importe os projetos para o seu IDE e veicule-os em um dispositivo ou no emulador.
Quando estiver pronto para lançar seu aplicativo e monetizar, envie o aplicativo para análise após garantir que ele cumpre as Políticas do Audience Network e os Padrões da Comunidade do Facebook.
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çãoGuia técnico de introdução ao Audience Network Exemplos de códigoAmostras de integração de anúncios do Audience Network | Perguntas frequentesPerguntas frequentes sobre o Audience Network Modelo de anúncios nativosUma abordagem mais indireta em relação à integração de anúncios nativos |