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étodoad: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 usingsetAllowNativeDemand
, así comoshouldAllowNativeDemand
&enableNativeRendering
propiedades. Para habilitar la demanda de vídeo, use la propiedadshouldAllowVideoDemand.
/** * 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 usarshouldAllowNativeDemand
la 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 delegadoadDidReceiveAd:
oad: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