Mostrar banner nativo en Android
Nota:
Esta oferta está actualmente en Alfa y está sujeta a cambios.
El término Banner Native hace referencia a la funcionalidad de nuestra clase Banner del SDK móvil para devolver la demanda nativa. El objeto BannerAdView tiene varios formatos, lo que devuelve la demanda de anuncios de banner y, si se habilita a través de las API, como se describe en los ejemplos siguientes, los anuncios nativos y de vídeo. Esto significa que puede crear una instancia de un único objeto de clase Banner y pasarlo un solo identificador de miembro y código (o identificador de ubicación) y acceder a la demanda en cualquiera o todos los formatos de banner, vídeo y tipo de medio nativo.
Si decide no usar la funcionalidad Banner Native, no observará ningún cambio significativo en la forma en que funcionan las implementaciones existentes. Hay cambios menores en los encabezados estándar de MobileSDK. Pero aparte de los cambios menores de un solo uso para satisfacer el proceso de compilación, no debería haber ningún impacto en ningún código existente que use la clase Banner.
La suposición de este documento es que ya está familiarizado con las clases Banner y Native. Para usar Banner Native, hay una serie de cambios significativos tanto estructural como procesalmente que debe administrar. La clase Banner con Banner Native se comporta como la clase de solicitud nativa tradicional. Cuando la clase Banner vuelve con un objeto de anuncio nativo, como la solicitud nativa tradicional, devuelve un objeto Native Response. Este objeto de respuesta nativa se puede usar de la manera tradicional para mostrar y realizar un seguimiento del contenido del anuncio de un objeto de anuncio nativo.
Procesar cambios
A partir de MobileSDK versión 4.9 para Android, hay un cambio importante en el procedimiento de control de objetos de anuncios de banner y vídeo a través de la clase Banner. Antes de la introducción de Banner Native, era posible agregar la vista de instancia de clase Banner a una jerarquía de vistas, incluso antes de que la instancia de clase devolvió el objeto de anuncio. Esto hizo posible finalizar la configuración de visualización de la clase incluso antes de que se completara el ciclo de vida de carga y captura del objeto de anuncio. Aunque este práctico corte corto significaba omitir potencialmente la devolución de llamada que indica que el anuncio se ha cargado, es un patrón común con MobileSDK.
Si la clase Banner se usa para capturar anuncios nativos, el paso para mostrar DEBE esperar hasta que se haya desencadenado la devolución de llamada. Esto se debe a que la devolución de llamada proporciona el punto de entrega para el objeto de anuncio nativo, si se devuelve, y porque es el único lugar para distinguir entre la devolución de un objeto de anuncio nativo frente a un banner o un objeto de anuncio de vídeo.
Estructura del SDK móvil
AdListener define un método ( onAdLoaded
respuesta NativeAdResponse), que debe declararse incluso si no se usa.
Siga estos pasos para comprender cómo se usa el formato BannerAdView
múltiple:
Habilite la demanda nativa para los
BannerAdView
métodos ysetAllowNativeDemand(boolean enabled)
de usoenableNativeRendering(boolean enabled)
. Para habilitar la demanda de vídeo, use elsetAllowVideoDemand(boolean enabled)
método . De forma predeterminada, estos valores son false, en cuyo casoBannerAdView
solo se entregarán anuncios de banner HTML tradicionales. Debe habilitar explícitamente el vídeo y nativo en la aplicación./** * Sets whether or not Native Ads(AppNexus Media Type:12) should be Renderered or not. * * @param enabled whether to enable Native Assembly Renderer or not. default is false */ public void enableNativeRendering(boolean enabled) { enableNativeRendering = enabled; } /** * Sets whether or not Native Ads(AppNexus Media Type:12) can serve on this Ad object. * This overrides the value set in console. * * @param enabled whether to enable Native Ads or not. default is false */ public void setAllowNativeDemand(boolean enabled) { Clog.d(Clog.publicFunctionsLogTag, Clog.getString( R.string.set_allow_native, enabled)); requestParameters.setBannerNativeEnabled(enabled); } /** * Sets whether or not Video Ads(AppNexus Media Type:4) can serve on this Ad object. * This overrides the value set in console. * * @param enabled whether to enable Video Ads or not. default is false */ public void setAllowVideoDemand(boolean enabled) { Clog.d(Clog.publicFunctionsLogTag, Clog.getString( R.string.set_allow_video, enabled)); requestParameters.setBannerVideoEnabled(enabled); }
Mientras
loadAd
que se puede llamar lo antes posible, el anuncio de banner (o vídeo) no se puede colocar en una subvista hasta que se haya llamado a una de las funciones sobrecargadas de onAdLoaded. Esto se debe a que primero debemos determinar el tipo de medio del anuncio devuelto.Se
NativeAdResponse
devuelve como una de las llamadas sobrecargadasonAdLoaded
, que se puede controlar de la misma manera que si se devolvía de la manera tradicional medianteNativeAdRequest
. En este caso,BannerAdView
desempeña efectivamente el mismo rol queNativeAdRequest
. (Consulta Mostrar anuncios nativos en Android para obtener más información sobre NativeAdResponse).De forma predeterminada, mainImage e iconImage no se cargan. Puede descargar manualmente estas imágenes a través de las direcciones URL devueltas por los métodos getImageUrl() y getIconUrl(), en la clase
NativeAdReponse
.
Ejemplos
El uso de la clase BannerAdView de formato múltiple es simplemente una combinación del uso de banner y clases nativas tradicionales.
Si adopta este SDK pero no quiere capturar la demanda nativa, todavía debe implementar un método sobrecargado enAdLoaded que devuelva NativeAdResponse, pero se puede dejar vacío.
Si desea capturar nativo o una combinación de banner, vídeo o nativo, puede usar el siguiente ejemplo de código para empezar:
Nota:
Como procedimientos recomendados:
- Se debe llamar a todos los métodos del SDK en el subproceso principal.
activityOnDestroy()
se debe llamar a para el BannerAdView que se espera que se destruya.
// Android: Java to handle a banner-native ad response
package com.appnexus.opensdk;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.appnexus.opensdk.*;
import com.appnexus.opensdk.R.*;
public class PresentBannerNative extends Activity {
FrameLayout adFrame;
Context context;
BannerAdView bav;
NativeAdResponse nativeAdResponse;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
adFrame = (FrameLayout) findViewById(android.R.id.content);
// Create the AdView and set its placement ID. Tweak a few other settings.
bav = new BannerAdView(this);
bav.setPlacementID("1326299");
bav.setAdSize(300, 50);
bav.setAdListener(adListener);
bav.setAllowNativeDemand(true);
//If auto-refresh is enabled
bav.loadAd();
}
final NativeAdEventListener nativeAdEventListener = new NativeAdEventListener() {
@Override
public void onAdWasClicked() {
}
@Override
public void onAdWillLeaveApplication() {
}
};
final AdListener adListener = new AdListener() {
@Override
public void onAdRequestFailed(AdView adView, ResultCode errorCode) {
}
@Override
public void onAdLoaded(AdView adView) {
if (nativeAdResponse != null) {
// It's your responsibility to keep a reference to the view
// and `NativeAdResponse` object if necessary.
// Once done with the native ad view, call the following method to
// unregister that view.
NativeAdSDK.unRegisterTracking(adFrame);
nativeAdResponse = null;
}
adFrame.removeAllViews();
adFrame.addView(bav);
}
@Override
public void onAdLoaded(NativeAdResponse response) {
nativeAdResponse = response;
adFrame.removeAllViews();
// Title
TextView title = new TextView(context);
title.setText(nativeAdResponse.getTitle());
// Main text
TextView description = new TextView(context);
description.setText(nativeAdResponse.getDescription());
// Cover image url
String imageUrl = nativeAdResponse.getImageUrl();
// Icon image url
String iconUrl = nativeAdResponse.getIconUrl();
// Text that indicates a call to action -- for example, to install an app
TextView callToAction = new TextView(context);
callToAction.setText(nativeAdResponse.getCallToAction());
// Create a container (a parent view that holds all the views for native ads)
LinearLayout container = new LinearLayout(context);
container.addView(title);
container.addView(description);
container.addView(imageView);
container.addView(iconView);
container.addView(callToAction);
// Add the native ad container to the view hierarchy
adFrame.addView(container);
// Register native views for click and impression tracking. The
// `adEventListener` is the listener created above; it can be `null` if
// you don't want to receive notifications about click events.
// Impressions and clicks won't be counted if the view is not registered.
NativeAdSDK.registerTracking(nativeAdResponse, adFrame, nativeAdEventListener);
}
@Override
public void onAdExpanded(AdView adView) {
}
@Override
public void onAdCollapsed(AdView adView) {
}
@Override
public void onAdClicked(AdView adView) {
}
};
@Override
protected void onDestroy() {
if (bav != null) {
bav.activityOnDestroy();
}
super.onDestroy();
if (nativeAdResponse != null) {
// It's your responsibility to keep a reference to the view
// and `NativeAdResponse` object if necessary.
// Once done with the native ad view, call the following method to
// unregister that view.
NativeAdSDK.unRegisterTracking(adFrame);
nativeAdResponse = null;
}
}
}