Compartir a través de


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 y setAllowNativeDemand(boolean enabled) de usoenableNativeRendering(boolean enabled). Para habilitar la demanda de vídeo, use el setAllowVideoDemand(boolean enabled) método . De forma predeterminada, estos valores son false, en cuyo caso BannerAdView 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 sobrecargadas onAdLoaded , que se puede controlar de la misma manera que si se devolvía de la manera tradicional mediante NativeAdRequest. En este caso, BannerAdView desempeña efectivamente el mismo rol que NativeAdRequest. (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;
        }
    }
}