Anuncios intersticiales (API antigua)

Los anuncios intersticiales son anuncios a pantalla completa que cubren la interfaz de una aplicación hasta que el usuario los cierra. Se suelen mostrar en los puntos de transición naturales de una aplicación, por ejemplo, entre distintas actividades o al pasar de un nivel a otro en un juego. Cuando una aplicación muestra un anuncio intersticial, el usuario tiene la opción de tocarlo e ir a la página de destino, o de cerrarlo y volver a la aplicación. Consulta este caso de éxito.

En esta guía aprenderás a integrar anuncios intersticiales en aplicaciones iOS.

Requisitos previos

Crear objetos de anuncio intersticiales

Los anuncios intersticiales se solicitan y se muestran mediante objetos GADInterstitial. Para empezar, debes crear una instancia y especificar el ID del bloque de anuncios. Por ejemplo, más abajo se explica cómo crear un GADInterstitial en el método viewDidLoad de un UIViewController:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  var interstitial: GADInterstitial!

  override func viewDidLoad() {
    super.viewDidLoad()
    interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
  }
}

Objective‑C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  self.interstitial = [[GADInterstitial alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"];
}

GADInterstitial es un objeto de un solo uso que, al cargarse, muestra un anuncio intersticial. Para que una aplicación muestre varios anuncios intersticiales, es necesario crear un GADInterstitial para cada uno de ellos.

Comprobar siempre las aplicaciones con anuncios de prueba

Cuando crees y testes 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 intersticiales de iOS: ca-app-pub-3940256099942544/4411468910

Lo hemos configurado especialmente para devolver anuncios de prueba a cada solicitud; puedes usarlo para programar, probar y depurar tus propias aplicaciones. Recuerda sustituirlo por el ID de uno de tus bloques de anuncios cuando vayas a publicar la aplicación.

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

Cargar anuncios

Para cargar un anuncio intersticial, llama al elemento loadRequest: en un objeto GADRequest:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  var interstitial: GADInterstitial!

  override func viewDidLoad() {
    super.viewDidLoad()
    interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
    let request = GADRequest()
    interstitial.load(request)
  }
}

Objective‑C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [[GADInterstitial alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"];
  GADRequest *request = [GADRequest request];
  [self.interstitial loadRequest:request];
}

Mostrar anuncios

Los anuncios intersticiales deben mostrarse durante las pausas naturales de una aplicación; por ejemplo, entre los diferentes niveles de un juego o cuando el usuario haya terminado una acción concreta. Para mostrar un anuncio intersticial, consulta la propiedad isReady de GADInterstitial para verificar que ha terminado de cargarse y, después, llama a presentFromRootViewController. Más abajo se muestra un ejemplo de cómo puedes hacerlo en uno de los métodos de acción de una propiedad UIViewController:

Swift

@IBAction func doSomething(_ sender: AnyObject) {
  ...
  if interstitial.isReady {
    interstitial.present(fromRootViewController: self)
  } else {
    print("Ad wasn't ready")
  }
}

Objective‑C

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

El mensaje "Cannot present interstitial. It is not ready" (No se puede mostrar el intersticial porque no está listo) indica que el anuncio intersticial todavía se está cargando o que se ha producido un error al hacerlo. Para evitar que aparezca esta advertencia, antes de llamar a isReady, verifica con el método presentFromRootViewController: si el anuncio intersticial está listo para mostrarse.

Usar GADInterstitialDelegate para recargar anuncios

GADInterstitial es un objeto de un solo uso. Eso significa que una vez que se muestra un intersticial, hasBeenUsed devuelve el valor true y el intersticial no se puede usar para cargar otro anuncio. Para solicitar otro anuncio intersticial, deberás crear otro objeto GADInterstitial. Si intentas reutilizar un objeto intersticial, aparecerá el mensaje "Request Error: Will not send request because interstitial object has been used" (Error en la solicitud: no se enviará la solicitud porque ya se ha utilizado el objeto intersticial).

Lo mejor para asignar otro intersticial es usar el método interstitialDidDismissScreen en GADInterstitialDelegate, para que el siguiente intersticial comience a cargarse en cuanto se cierre el anterior. Incluso puedes plantearte la posibilidad de desglosar la inicialización de dicho anuncio con su propio método auxiliar:

Swift

override func viewDidLoad() {
  super.viewDidLoad()
  interstitial = createAndLoadInterstitial()
}

func createAndLoadInterstitial() -> GADInterstitial {
  var interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
  interstitial.delegate = self
  interstitial.load(GADRequest())
  return interstitial
}

func interstitialDidDismissScreen(_ ad: GADInterstitial) {
  interstitial = createAndLoadInterstitial()
}

Objective‑C

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [self createAndLoadInterstitial];
}

- (GADInterstitial *)createAndLoadInterstitial {
  GADInterstitial *interstitial =
      [[GADInterstitial alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"];
  interstitial.delegate = self;
  [interstitial loadRequest:[GADRequest request]];
  return interstitial;
}

- (void)interstitialDidDismissScreen:(GADInterstitial *)interstitial {
  self.interstitial = [self createAndLoadInterstitial];
}

Si se precarga un anuncio intersticial inmediatamente después de que se cierre el anterior, este se mostrará en la aplicación durante la siguiente pausa lógica.

Eventos de anuncio

Mediante GADInterstitialDelegate, puedes procesar los eventos relacionados con el ciclo de vida, como cuando se cierra un anuncio o el usuario abandona la aplicación.

Registrarse para recibir eventos de intersticiales

Para recibir eventos de anuncios intersticiales, asigna a la propiedad delegate de GADInterstitial un objeto que implemente el protocolo GADInterstitialDelegate. Por lo general, la clase que implementa los anuncios intersticiales también actúa como clase delegada, en cuyo caso, a la propiedad delegate se le puede asignar el valor self:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADInterstitialDelegate {

  var interstitial: GADInterstitial!

  override func viewDidLoad() {
    super.viewDidLoad()
    interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
    interstitial.delegate = self
  }
}

Objective‑C

#import "GADInterstitial.h"
#import "GADInterstitialDelegate.h"

@interface ViewController () <GADInterstitialDelegate>

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [[GADInterstitial alloc] initWithAdUnitID:"ca-app-pub-3940256099942544/4411468910"];
  self.interstitial.delegate = self;
}

Implementar eventos de intersticiales

Todos los métodos de GADInterstitialDelegate son opcionales, por lo que 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 an ad request succeeded.
func interstitialDidReceiveAd(_ ad: GADInterstitial) {
  print("interstitialDidReceiveAd")
}

/// Tells the delegate an ad request failed.
func interstitial(_ ad: GADInterstitial, didFailToReceiveAdWithError error: GADRequestError) {
  print("interstitial:didFailToReceiveAdWithError: \(error.localizedDescription)")
}

/// Tells the delegate that an interstitial will be presented.
func interstitialWillPresentScreen(_ ad: GADInterstitial) {
  print("interstitialWillPresentScreen")
}

/// Tells the delegate the interstitial is to be animated off the screen.
func interstitialWillDismissScreen(_ ad: GADInterstitial) {
  print("interstitialWillDismissScreen")
}

/// Tells the delegate the interstitial had been animated off the screen.
func interstitialDidDismissScreen(_ ad: GADInterstitial) {
  print("interstitialDidDismissScreen")
}

/// Tells the delegate that a user click will open another app
/// (such as the App Store), backgrounding the current app.
func interstitialWillLeaveApplication(_ ad: GADInterstitial) {
  print("interstitialWillLeaveApplication")
}

Objective‑C

/// Tells the delegate an ad request succeeded.
- (void)interstitialDidReceiveAd:(GADInterstitial *)ad {
  NSLog(@"interstitialDidReceiveAd");
}

/// Tells the delegate an ad request failed.
- (void)interstitial:(GADInterstitial *)ad
    didFailToReceiveAdWithError:(GADRequestError *)error {
  NSLog(@"interstitial:didFailToReceiveAdWithError: %@", [error localizedDescription]);
}

/// Tells the delegate that an interstitial will be presented.
- (void)interstitialWillPresentScreen:(GADInterstitial *)ad {
  NSLog(@"interstitialWillPresentScreen");
}

/// Tells the delegate the interstitial is to be animated off the screen.
- (void)interstitialWillDismissScreen:(GADInterstitial *)ad {
  NSLog(@"interstitialWillDismissScreen");
}

/// Tells the delegate the interstitial had been animated off the screen.
- (void)interstitialDidDismissScreen:(GADInterstitial *)ad {
  NSLog(@"interstitialDidDismissScreen");
}

/// Tells the delegate that a user click will open another app
/// (such as the App Store), backgrounding the current app.
- (void)interstitialWillLeaveApplication:(GADInterstitial *)ad {
  NSLog(@"interstitialWillLeaveApplication");
}

Algunas prácticas recomendadas

Plantéate si los intersticiales son el tipo de anuncio más adecuado para tu aplicación.
Los anuncios intersticiales funcionan mejor en las aplicaciones con puntos de transición naturales. Por ejemplo, cuando se pueden mostrar al terminar una acción en la aplicación, como compartir una imagen o completar un nivel de un juego. En esos momentos, como el usuario espera que se produzca una interrupción, es fácil presentar un anuncio intersticial sin que su experiencia se vea afectada. Decide en qué puntos del flujo de trabajo de la aplicación se mostrarán anuncios intersticiales y analiza cómo crees que responderán los usuarios.
Mostrar un anuncio intersticial implica pausar la acción.
Hay distintos tipos de anuncios intersticiales, como los de texto, de imagen y de vídeo. Es importante que cuando la aplicación muestre un anuncio intersticial se suspenda el uso de algunos recursos para que el anuncio pueda aprovecharlos. Por ejemplo, cuando realices la llamada para mostrar un anuncio intersticial, pausa todo el audio que se esté reproduciendo en la aplicación. La reproducción se reanuda en el gestor de eventos interstitialDidDismissScreen, que se invocará cuando el usuario haya terminado de interactuar con el anuncio. Además, mientras se muestra el anuncio, es conveniente detener temporalmente cualquier tarea que consuma muchos recursos (como un bucle de juego). De esta forma, el usuario no se encontrará con gráficos lentos o que no respondan ni con vídeos entrecortados.
Define un tiempo de carga adecuado.
Evitar que el usuario tenga que esperar a que los anuncios intersticiales se carguen es igual de importante que mostrarlos en el momento adecuado. Para que la aplicación tenga un anuncio intersticial completamente cargado y listo cuando llegue el momento de mostrarlo, cárgalo por adelantado. Para ello, llama a loadRequest antes de llamar a presentFromRootViewController.
No satures al usuario con anuncios.
Aunque aumentar la frecuencia de los anuncios intersticiales en tu aplicación te parezca una excelente forma de incrementar los ingresos, también puede degradar la experiencia de usuario y provocar que disminuya el porcentaje de clics. Si interrumpes a los usuarios con demasiada frecuencia, no disfrutarán utilizando tu aplicación.
No uses el evento interstitialDidReceiveAd para mostrar intersticiales.
Hacerlo puede ser perjudicial para la experiencia de usuario. Es preferible tener el anuncio ya cargado antes de que llegue el momento de mostrarlo. A continuación, verifica el método isReady en GADInterstitial para averiguar si está listo para mostrarse.

Recursos adicionales

Ejemplos de GitHub

Tutoriales de vídeo de la serie Mobile Ads Garage

Casos de éxito

Pasos siguientes