Anuncios bonificados

Los anuncios bonificados permiten a los usuarios conseguir recompensas en aplicaciones a cambio de interactuar con ellos. En esta guía, te mostramos cómo integrar este tipo de anuncios de AdMob en una aplicación iOS.

Requisitos previos

Crear un objeto de anuncio bonificado

Los anuncios bonificados se solicitan y se muestran mediante los objetos GADRewardedAd. Para empezar, debes crear una instancia y especificar el ID de su bloque de anuncios. Por ejemplo, aquí se explica cómo crear un GADRewardedAd en el método viewDidLoad: de un UIViewController:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADRewardedAdDelegate {
  /// The rewarded video ad.
  var rewardedAd: GADRewardedAd? override func viewDidLoad() {
    super.viewDidLoad()
    rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313")
  }
}

Objective‑C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)viewDidLoad {
  [super viewDidLoad];

  self.rewardedAd = [[GADRewardedAd alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"];
}

Comprobar 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 los anuncios bonificados de iOS:

ca-app-pub-3940256099942544/1712485313

Lo hemos configurado especialmente para devolver anuncios de prueba a cada solicitud, y puedes usarlo para programar, probar y depurar tus propias aplicaciones. Solo tienes que sustituirlo por el ID de uno de tus bloques 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 Anuncios de prueba.

Cargar anuncios

Para cargar un anuncio bonificado, llama al elemento loadRequest:completionHandler: de un objeto GADRewardedAd:

Swift

rewardedAd?.load(GADRequest()) { error in
  self.adRequestInProgress = false
  if let error = error {
    print("Loading failed: \(error)")
  } else {
    print("Loading Succeeded")
  }
}

Objective‑C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  self.rewardedAd = [[GADRewardedAd alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"];

  GADRequest *request = [GADRequest request];
  [self.rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
    if (error) {
      // Handle ad failed to load case.
    } else {
      // Ad successfully loaded.
    }
  }];
}

En este fragmento de código, se carga un anuncio bonificado con el elemento GADRequest y el bloque de finalización que se han proporcionado. Si la solicitud de anuncio se realiza correctamente, el bloque de finalización se ejecuta con un parámetro GADRequestError de valor nulo. Si se produce un error al cargar el anuncio, el objeto de error que no es nulo facilita información sobre el fallo.

Mostrar anuncios

Antes de mostrar un anuncio bonificado a los usuarios, debes ofrecerles explícitamente la posibilidad de elegir si quieren ver este tipo de contenido publicitario a cambio de una bonificación. Estos anuncios siempre deben ser una experiencia que los usuarios elijan de forma voluntaria.

Si quieres mostrar un anuncio bonificado, consulta la propiedad isReady de GADRewardedAd para verificar que la carga ha finalizado y, después, llama a presentFromRootViewController:delegate:. Aquí tienes un ejemplo de cómo puedes hacerlo en uno de los métodos de acción de un UIViewController:

Swift

@IBAction func doSomething(sender: UIButton) {
  if rewardedAd?.isReady == true {
     rewardedAd?.present(fromRootViewController: self, delegate:self)
  }
}

Objective‑C

@import GoogleMobileAds;

@import UIKit;

@interface ViewController () <GADRewardedAdDelegate>

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (IBAction)doSomething:(id)sender {
  ...
  if (self.rewardedAd.isReady) {
    [self.rewardedAd presentFromRootViewController:self delegate:self];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

Recibir notificaciones de eventos de anuncio

El objeto GADRewardedAdDelegate proporcionado con el método presentFromRootViewController:delegate: recibe una llamada cuando se producen eventos de anuncios bonificados. Cada uno de los métodos de GADRewardedAdDelegate se corresponde con un evento del ciclo de vida de los anuncios bonificados. El método rewardedAd:userDidEarnReward: debe implementarse, pero el resto de los métodos de la clase son opcionales, es decir, solo tienes que implementar los que quieras. En este ejemplo, se implementa cada método y se registra un mensaje en la consola:

Swift

/// Tells the delegate that the user earned a reward.
func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward) {
  print("Reward received with currency: \(reward.type), amount \(reward.amount).")
}
/// Tells the delegate that the rewarded ad was presented.
func rewardedAdDidPresent(_ rewardedAd: GADRewardedAd) {
  print("Rewarded ad presented.")
}
/// Tells the delegate that the rewarded ad was dismissed.
func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) {
  print("Rewarded ad dismissed.")
}
/// Tells the delegate that the rewarded ad failed to present.
func rewardedAd(_ rewardedAd: GADRewardedAd, didFailToPresentWithError error: Error) {
  print("Rewarded ad failed to present.")
}

Objective‑C

/// Tells the delegate that the user earned a reward.
- (void)rewardedAd:(GADRewardedAd *)rewardedAd userDidEarnReward:(GADAdReward *)reward {
  // TODO: Reward the user.
  NSLog(@"rewardedAd:userDidEarnReward:");
}

/// Tells the delegate that the rewarded ad was presented.
- (void)rewardedAdDidPresent:(GADRewardedAd *)rewardedAd {
  NSLog(@"rewardedAdDidPresent:");
}

/// Tells the delegate that the rewarded ad failed to present.
- (void)rewardedAd:(GADRewardedAd *)rewardedAd didFailToPresentWithError:(NSError *)error {
  NSLog(@"rewardedAd:didFailToPresentWithError");
}

/// Tells the delegate that the rewarded ad was dismissed.
- (void)rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd {
  NSLog(@"rewardedAdDidDismiss:");
}

Usar GADRewardedAdDelegate para precargar el siguiente anuncio bonificado

GADRewardedAd es un objeto de un solo uso. Esto quiere decir que, una vez que se muestre un anuncio bonificado, dicho objeto no podrá usarse para cargar otro anuncio de este tipo. Para solicitar otro anuncio bonificado, deberás crear un objeto GADRewardedAd.

Como práctica recomendada, puedes cargar otro anuncio bonificado en el método rewardedAdDidDismiss: de GADRewardedAdDelegate, de forma que el siguiente anuncio de este tipo empiece a cargarse en cuanto el anterior se haya cerrado, tal como se muestra en este fragmento de código:

Swift

override func viewDidLoad() {
  super.viewDidLoad()
  rewardedAd = createAndLoadRewardedAd()
}

func createAndLoadRewardedAd() {
  rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313")
  rewardedAd?.load(GADRequest()) { error in
    if let error = error {
      print("Loading failed: \(error)")
    } else {
      print("Loading Succeeded")
    }
  }
  return rewardedAd
}

func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) {
  rewardedAd = createAndLoadRewardedAd()
}

Objective‑C

- (void)viewDidLoad {
  [super viewDidLoad];
  self.rewardedAd = [self createAndLoadRewardedAd];
}

- (GADRewardedAd *)createAndLoadRewardedAd {
  GADRewardedAd *rewardedAd = [[GADRewardedAd alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"];
  GADRequest *request = [GADRequest request];
  [rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
    if (error) {
      // Handle ad failed to load case.
    } else {
      // Ad successfully loaded.
    }
  }];
  return rewardedAd;
}

- (void)rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd {
  self.rewardedAd = [self createAndLoadRewardedAd];
}

Cargar varios anuncios bonificados

Si quieres cargar varios anuncios bonificados, sigue los pasos que se describen en las secciones Crear un objeto de anuncio bonificado y Cargar anuncios para cada uno de los anuncios en cuestión. En el siguiente fragmento de código se muestra cómo cargar dos anuncios bonificados en dos emplazamientos publicitarios diferentes:

Swift

override func viewDidLoad() {
  super.viewDidLoad()
  rewardedAd1 = createAndLoadRewardedAd("first-ad-unit-id")
  rewardedAd2 = createAndLoadRewardedAd("second-ad-unit-id")
}

func createAndLoadRewardedAd(adUnitId) {
  rewardedAd = GADRewardedAd(adUnitID: adUnitId)
  rewardedAd?.load(GADRequest()) { error in
    if let error = error {
      print("Loading failed: \(error)")
    } else {
      print("Loading Succeeded")
    }
  }
  return rewardedAd
}

Objective‑C

- (void)viewDidLoad {
  [super viewDidLoad];
  GADRewardedAd *gameOverRewardedAd = [self
    createAndLoadRewardedAdForAdUnit:@"ca-app-pub-3940256099942544/1712485313"];
  GADRewardedAd *extraCoinsRewardedAd = [self
    createAndLoadRewardedAdForAdUnit:@"ca-app-pub-3940256099942544/1712485313"];
}

- (GADRewardedAd *)createAndLoadRewardedAdForAdUnit:(NSString *) adUnitId {
  GADRewardedAd *rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:adUnitId];
  GADRequest *request = [GADRequest request];
  [rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
    if (error) {
      // Handle ad failed to load case.
    } else {
      // Ad successfully loaded.
    }
  }];
  return rewardedAd;
}

Preguntas frecuentes

¿Puedo obtener detalles de la bonificación del objeto GADRewardedAd?
Sí; si necesitas saber el valor de la bonificación antes de que se realice la retrollamada a userDidEarnReward, usa la propiedad reward de GADRewardedAd para consultarlo después de que el anuncio se haya cargado.
¿Las llamadas de inicialización tienen un tiempo de espera determinado?
Después de 10 segundos, el SDK de anuncios de Google para móviles invoca el elemento GADInitializationCompletionHandler que se haya proporcionado al método startWithCompletionHandler:, aunque la red de mediación aún no haya completado la inicialización.
¿Qué ocurre si alguna red de mediación no está lista cuando recibo la retrollamada de inicialización?

Te recomendamos que cargues los anuncios en un GADInitializationCompletionHandler. Aunque la red de mediación no esté lista, el SDK de anuncios de Google para móviles seguirá solicitándole el anuncio. Por lo tanto, aunque una red de mediación complete la inicialización tras finalizar el tiempo de espera, podrá servir solicitudes de anuncio más adelante en esa misma sesión.

Puedes seguir consultando el estado de la inicialización de todos los adaptadores a través de la sesión de tu aplicación. Solo tienes que llamar a GADMobileAds.initializationStatus.

¿Cómo puedo saber por qué una red de mediación concreta no está lista?

La propiedad description de los objetos GADAdapterStatus describe por qué un adaptador no está listo para servir solicitudes de anuncio.