Anuncios de carga de aplicación

Esta guía está dirigida a los editores que quieran integrar anuncios de carga de aplicación.

Los anuncios de carga de aplicación tienen un formato especial pensado para editores que quieran monetizar las pantallas de carga de sus aplicaciones. Los usuarios pueden cerrar los anuncios de carga de aplicación en cualquier momento. Estos anuncios pueden mostrarse cuando los usuarios ponen tu aplicación en primer plano.

Estos anuncios muestran automáticamente una pequeña zona de branding para que los usuarios sepan que se encuentran en tu aplicación. Aquí tienes un ejemplo de anuncio de carga de aplicación:

A grandes rasgos, estos son los pasos necesarios para implementar los anuncios de carga de aplicación:

  1. Añadir métodos a AppDelegate para cargar y mostrar un GADAppOpenAd.
  2. Detectar eventos de aplicación en primer plano.
  3. Gestionar retrollamadas de presentación.

Requisitos previos

  • Sigue las instrucciones de configuración que se indican en la guía Empezar.
  • Descubre cómo configurar tu dispositivo como dispositivo de prueba.

Probar siempre las aplicaciones con anuncios de prueba

Cuando crees y pruebes tus aplicaciones, utiliza siempre anuncios de prueba en lugar de anuncios reales que se estén publicando. De lo contrario, podríamos suspender tu cuenta.

La forma más sencilla de cargar anuncios de prueba es usar el ID de bloque de anuncios de prueba que hemos creado para evaluar los anuncios de carga de aplicación:

ca-app-pub-3940256099942544/5662855259

Lo hemos configurado especialmente para que devuelva anuncios de prueba a cada solicitud, y puedes usarlo mientras programas, evaluas y depuras tus propias aplicaciones. Solo tienes que sustituirlo por el ID de tu bloque de anuncios antes de publicar la aplicación.

Para obtener más información sobre cómo funcionan los anuncios de prueba del SDK de anuncios para móviles, consulta la guía de anuncios de prueba.

Modificar el delegado de la aplicación

Los anuncios de carga de aplicación se muestran cuando la aplicación se inicia o cuando los usuarios la ponen en primer plano. Para asegurarte de que tienes un anuncio listo para mostrarse cuando un usuario abra tu aplicación, deberás tener una referencia a un anuncio lista para usarse.

Es decir, debes precargar un GADAppOpenAd antes de mostrar el anuncio. De esta forma, el anuncio de carga de aplicación estará listo para mostrarse la próxima vez que se abra la aplicación. Para indicar una única referencia al anuncio, añade a AppDelegate.h la propiedad y los métodos que aparecen a continuación:

#import <GoogleMobileAds/GoogleMobileAds.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property(strong, nonatomic) UIWindow* window;
@property(strong, nonatomic) GADAppOpenAd* appOpenAd;

- (void)requestAppOpenAd;
- (void)tryToPresentAd;

@end

Ten en cuenta que debes hacer tu solicitud y métodos accesibles más allá de AppDelegate. De esta forma, podrás llamarlos desde el objeto UISceneDelegate en dispositivos que tengan instalado iOS 13 o versiones posteriores. Esto se explica con más detalle más adelante.

En AppDelegate.m, añade el método requestAppOpenAd:

- (void)requestAppOpenAd {
  self.appOpenAd = nil;
  [GADAppOpenAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/5662855259"
                         request:[GADRequest request]
                     orientation:UIInterfaceOrientationPortrait
               completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
                 if (error) {
                   NSLog(@"Failed to load app open ad: %@", error);
                   return;
                 }
                 self.appOpenAd = appOpenAd;
               }];
}

Este método hace una solicitud para cargar un nuevo GADAppOpenAd. Si se ejecuta correctamente, se define la propiedad en AppDelegate para que el anuncio pueda mostrarse a los usuarios cuando utilicen la aplicación en primer plano.

Es obligatorio definir la orientación. Si la orientación es UIInterfaceOrientationUnknown, el GADAppOpenAd da por sentado que la orientación es vertical. Si quieres un diseño horizontal, deberás especificarlo incluyendo UIInterfaceOrientationLandscapeLeft o UIInterfaceOrientationLandscapeRight en el método de solicitud.

A continuación, deberás añadir un método para mostrar el anuncio desde el AppDelegate.

- (void)tryToPresentAd {
  if (self.appOpenAd) {
    UIViewController *rootController = self.window.rootViewController;
    [self.appOpenAd presentFromRootViewController:rootController];
  } else {
    // If you don't have an ad ready, request one.
    [self requestAppOpenAd];
  }
}

Este método se encarga de buscar un anuncio y, si lo encuentra Y además se puede mostrar desde el controlador de vista raíz, lo publica sobre tu contenido. Si no hay ningún anuncio, el método realiza una nueva solicitud.

Detectar eventos de aplicación en primer plano

Cuando los usuarios acceden por primera vez a tu aplicación, lo más probable es que no tengas una referencia de anuncio disponible. En estos casos, lo mejor es emplear el método tryToPresentAd definido anteriormente, ya que si hay un anuncio disponible lo mostrará y, si no, solicitará uno nuevo. Este método debería llamarse cada vez que tu aplicación se ponga en primer plano. Para ello, anula el método applicationDidBecomeActive: en tu AppDelegate:

- (void)applicationDidBecomeActive:(UIApplication *)application {
  [self tryToPresentAd];
}

Gestionar retrollamadas de presentación

Cuando en tu aplicación se muestra un anuncio de carga de aplicación, debes utilizar el GADFullScreenContentDelegate para gestionar determinados eventos de presentación. Concretamente, deberás solicitar el siguiente anuncio de carga de aplicación cuando termine de presentarse el primero.

Haz los siguientes cambios en tu archivo AppDelegate.h:

#import <GoogleMobileAds/GoogleMobileAds.h>
#import <UIKit/UIKit.h>
@interface AppDelegate
    : UIResponder <UIApplicationDelegate, GADFullScreenContentDelegate>

@property(strong, nonatomic) UIWindow* window;
@property(strong, nonatomic) GADAppOpenAd* appOpenAd;

- (void)requestAppOpenAd;
- (void)tryToPresentAd;

@end

A continuación, añade las siguientes líneas a tu archivo AppDelegate.m:

- (void)requestAppOpenAd {
  self.appOpenAd = nil;
  [GADAppOpenAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/5662855259"
                         request:[GADRequest request]
                     orientation:UIInterfaceOrientationPortrait
               completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
                 if (error) {
                   NSLog(@"Failed to load app open ad: %@", error);
                   return;
                 }
                 self.appOpenAd = appOpenAd;
                 self.appOpenAd.fullScreenContentDelegate = self;
               }];
}

#pragma mark - GADFullScreenContentDelegate

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
  NSLog(@"didFailToPresentFullScreenContentWithError");
  [self requestAppOpenAd];

}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"adWillPresentFullScreenContent");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"adDidDismissFullScreenContent");
  [self requestAppOpenAd];
}
...

Estas retrollamadas gestionan varios eventos del ciclo de vida de los anuncios de carga de aplicación.

Tener en cuenta la caducidad de los anuncios

Para asegurarte de que no se muestran anuncios caducados, puedes añadir un método al delegado de la aplicación que compruebe cuánto tiempo ha pasado desde que se cargó la referencia del anuncio.

En AppDelegate.h, añade una propiedad NSDate:

#import <GoogleMobileAds/GoogleMobileAds.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property(strong, nonatomic) UIWindow* window;
@property(strong, nonatomic) GADAppOpenAd* appOpenAd;
@property(weak, nonatomic) NSDate *loadTime;

- (void)requestAppOpenAd;
- (void)tryToPresentAd;

@end

Después, puedes añadir un método que devuelva el valor true si han pasado menos de un número determinado de horas desde que se cargó el anuncio.

En AppDelegate.m, añade el siguiente método:

- (BOOL)wasLoadTimeLessThanNHoursAgo:(int)n {
  NSDate *now = [NSDate date];
  NSTimeInterval timeIntervalBetweenNowAndLoadTime = [now timeIntervalSinceDate:self.loadTime];
  double secondsPerHour = 3600.0;
  double intervalInHours = timeIntervalBetweenNowAndLoadTime / secondsPerHour;
  return intervalInHours < n;
}

El siguiente paso es definir la propiedad loadTime cuando se cargue el anuncio:

- (void)requestAppOpenAd {
  self.appOpenAd = nil;
  [GADAppOpenAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/5662855259"
                         request:[GADRequest request]
                     orientation:UIInterfaceOrientationPortrait
               completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
                 if (error) {
                   NSLog(@"Failed to load app open ad: %@", error);
                   return;
                 }
                 self.appOpenAd = appOpenAd;
                 self.appOpenAd.fullScreenContentDelegate = self;
                 self.loadTime = [NSDate date];
               }];
}

Por último, antes de intentar mostrar el anuncio, comprueba que la referencia sea válida:

- (void)tryToPresentAd {
  if (self.appOpenAd && [self wasLoadTimeLessThanNHoursAgo:4]) {
    UIViewController *rootController = self.window.rootViewController;
    [self.appOpenAd presentFromRootViewController:rootController];
  } else {
    // If you don't have an ad ready, request one.
    [self requestAppOpenAd];
  }
}

Arranques en frío y pantallas de carga

Hasta ahora, en esta guía nos hemos centrado en los casos donde muestras anuncios de carga de aplicación solo cuando los usuarios tienen tu aplicación suspendida en la memoria del dispositivo (abierta en segundo plano) y la ponen en primer plano. Sin embargo, el arranque en frío tiene lugar cuando tu aplicación se lanza sin que se encuentre en segundo plano.

Un ejemplo de este tipo de arranque se da cuando un usuario abre tu aplicación por primera vez. En el caso de los arranques en frío, no tienes ningún anuncio de carga de aplicación previamente cargado que esté listo para mostrarse. Desde que se solicita el anuncio hasta que se recibe, se produce un retraso de unos instantes. Es posible que, durante ese breve periodo, los usuarios puedan usar tu aplicación antes de que les sorprenda un anuncio fuera de contexto. Este comportamiento debe evitarse porque ofrece una mala experiencia a los usuarios.

La mejor forma de utilizar anuncios de carga de aplicación en arranques en frío es usar una pantalla para cargar los recursos de la aplicación o del juego y mostrar anuncios solo en esa pantalla. Si tu aplicación ha terminado de cargarse y se ha dirigido al usuario al contenido principal, no muestres ningún anuncio.

Prácticas recomendadas

Los anuncios de carga de aplicación de Google te ayudan a obtener ingresos con las pantallas de carga de tu aplicación. No obstante, es importante que tengas presentes las prácticas recomendadas para ofrecer la mejor experiencia posible. En este sentido, recuerda lo siguiente:

  • Espera a que los usuarios utilicen la aplicación varias veces antes de mostrarles el primer anuncio de carga de aplicación.
  • Muestra anuncios de carga de aplicación en aquellos momentos en los que, de otra forma, los usuarios tendrían que esperar a que la aplicación se cargue.
  • Si tienes una pantalla de carga debajo del anuncio de carga de la aplicación y la pantalla termina de cargarse antes de que se cierre el anuncio, te recomendamos que la cierres con el método adDidDismissFullScreenContent.

Ejemplos en GitHub