Compartir a través de


Mostrar banner nativo en iOS

Información general

Nota:

Esta oferta está actualmente en Alfa y está sujeta a cambios.

El término Banner Native hace referencia a la funcionalidad de la clase Banner de Mobile SDK para devolver la demanda nativa. El objeto banner (ANBannerAdView) 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, 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 (incluido un encabezado iOS, que se ha quitado). 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.

Presunción

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 mobile SDK versión 4.8, hay un cambio 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 mobile SDK.

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

  • El ANAdDelegate método devuelve un controlador de objetos de anuncio definido solo por id. (Anterior a la versión 4.8, el controlador se definió como id<. ANAdProtocol>).
  • El ANAdDelegate protocolo incluye el nuevo método ad:didReceivNativeAd:

Uso de la vista de anuncios de banner nativo de formato múltiple

En los pasos siguientes se explica cómo se usa el formato ANBannerAdView múltiple:

  • Habilite la demanda nativa para el ANBannerAdView método using setAllowNativeDemand , así como shouldAllowNativeDemand & enableNativeRendering propiedades. Para habilitar la demanda de vídeo, use la propiedad shouldAllowVideoDemand.

    /**
    * Sets whether or not Native Ads(AppNexus Media Type:12) can serve on this Ad object.
    *
    */
    @property (nonatomic, readwrite) BOOL shouldAllowNativeDemand;
    /**
    *  If enableNativeRendering is not set, the default is false.
    *  Rendering NativeAd to behave as BannerAd
    */
    @property (nonatomic, readwrite) BOOL enableNativeRendering;
    /**
    * Sets whether or not Video Ads(AppNexus Media Type:4) can serve on this Ad object.
    */
    @property (nonatomic, readwrite) BOOL shouldAllowVideoDemand;
    

    Nota:

    Según las nuevas mejoras, RendererId se establece desde la consola en lugar de pasar desde el SDK. Por lo tanto, el mensaje en desuso para usar shouldAllowNativeDemandla propiedad se muestra en el bloque de código.

  • De forma predeterminada, estos valores se establecen en NO, en cuyo caso ANBannerAdView solo se entregarán anuncios de banner HTML tradicionales. Debe habilitar explícitamente el vídeo y el nativo en la aplicación.

  • 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 al delegado adDidReceiveAd: o ad:didReceiveNativeAd: .

  • Un objeto de anuncio nativo se devuelve como una instancia de la ANNativeAdResponse que, a continuación, se puede controlar como cualquier otra clase de respuesta nativa tradicional.  En este caso, ANBannerAdView desempeña eficazmente el mismo rol que ANNativeAdRequest. (Consulte Mostrar anuncios nativos en iOS para obtener más información sobre ANNativeAdResponse).

  • De forma predeterminada, mainImage e iconImage no se cargan. Puede descargar manualmente estas imágenes a través de las propiedades mainImageURL e iconImageURL, en la clase ANNativeAdResponse.

Ejemplo

El uso de la clase ANBannerAdView de formato múltiple es simplemente una combinación del uso de banner y clases nativas tradicionales.

Si desea capturar nativo o una combinación de banner, vídeo o nativo, puede usar el siguiente ejemplo de código para empezar:

/**
 This view displays ads from placements that return banner, video and/or native ads.
 Note the implementation requires delaying the point where the ad is displayed,
   because native ads are displayed with ANNativeAdResponse and because the type of ad must be
   tested after load in order to determine the proper means for display.
*/
 @code
    ANBannerAdView  *banner  = nil;
    - (void) loadMultiFormatAd
    {
        CGSize  size      = CGSizeMake(300, 250);  // NOTE  Setting size is necessary only for fetching banner and video ad objects.
                                                   //       This field is ignored when the placement returns a native ad object.
        CGRect  someRect  = CGRectMake(...);
        // Create the banner ad view here, but wait until the delegate fires before displaying.
        //
        ANBannerAdView  *banner  = [ANBannerAdView adViewWithFrame:someRect placementId:@"<YOUR_PLACEMENT_ID>" adSize:size];
        banner.rootViewController = self;
        // Load an ad!
        [banner loadAd];
    }
    // Display all multi-format ads in success method from ANBannerAdViewDelegate.
    //
    - (void) adDidReceiveAd:(id)adObject
    {
        if ([adObject isKindOfClass:[ANNativeAdResponse class]])
        {
            ANNativeAdResponse  *nativeAdResponse  = (ANNativeAdResponse *)ad;
            MyNativeView        *nativeView        = [[MyNativeView alloc] init];
            nativeView.title.text            = nativeAdResponse.title;
            nativeView.text.text             = nativeAdResponse.body;
            nativeView.iconImageView.image   = nativeAdResponse.iconImage;
            nativeView.mainImageView.image   = nativeAdResponse.mainImage;
            [nativeView.callToActionButton setTitle:response.callToAction forState:UIControlStateNormal];
            nativeAdResponse.delegate = self;
            [nativeAdResponse registerViewForTracking: nativeView
                              withRootViewController: self
                                      clickableViews: @[nativeView.callToActionButton, nativeView.mainImageView]
                                               error: nil
              ];
            [self.view addSubview:nativeView];
        } else {
            [self.view addSubview:banner];
        }
    }
 @endcode
 If this view will be displaying placements that include only banner and/or video ads,
   then display can be (optimistically) handled without using ANBannerAdViewDelegate:
 @code
    - (void) loadMultiFormatAdThatDoesNotIncludeNative
    {
        CGSize size = CGSizeMake(300, 250);
        // Create the banner ad view and add it as a subview.
        //
        ANBannerAdView  *banner  = [ANBannerAdView adViewWithFrame:rect placementId:@"13572468" adSize:size];
        banner.rootViewController = self;
        [self.view addSubview:banner];
        // Load an ad!
        // NOTE  Upon loadAd failure, the view impression simply remains blank.
        //
        [banner loadAd];
    }
 @endcode

Si ANBannerAdView mostrará ubicaciones que incluyen solo anuncios de banner o vídeo, la visualización se puede controlar (optimistamente) sin usar el método adDidReceiveAd : delegate:

@implementation MyViewController
 
- (void) loadMultiFormatAdThatDoesNotIncludeNative
{
    CGSize size = CGSizeMake(300, 250);
 
    // Create the banner ad view and add it as a subview.
    //
    ANBannerAdView  *banner  = [ANBannerAdView adViewWithFrame:rect placementId:@"13572468" adSize:size];
    banner.rootViewController = self;
 
    [self.view addSubview:banner];
 
    // Load an ad!
    // NOTE  Upon loadAd failure, the view impression simply remains blank.
    //
    [banner loadAd];
}
 
@end