Eventos personalizados de anuncios intersticiales

Requisito previo

Para poder crear eventos personalizados, primero debes integrar el formato de anuncio intersticial en tu aplicación.

Además, es recomendable que leas primero la documentación sobre cómo hacer una AdRequest y cómo funciona la mediación,

así como monetizar tu aplicación con redes publicitarias que no sean directamente compatibles con la mediación. Un evento personalizado se implementa mediante el protocolo GADCustomEventInterstitial.

Red publicitaria de ejemplo

En esta guía se explica cómo publicar anuncios de banner e intersticiales desde la red publicitaria de ejemplo mediante la clase de evento personalizado SampleCustomEventInterstital. El SDK de la red publicitaria de ejemplo es ficticio y se ha desarrollado para ilustrar el proceso real de implementación de un evento personalizado. EL SDK contiene clases representativas de las que ofrecen la mayoría de las redes publicitarias. Para obtener más información, consulta la implementación completa del SDK de ejemplo.

Anuncios intersticiales

Método Cuándo llamarlo
customEventInterstitial:DidReceiveAd: La solicitud de intersticial se ha realizado correctamente.
customEventInterstitial:didFailAd: Se ha producido un error al realizar la solicitud de intersticial.
customEventInterstitialWillPresent: Se mostrará el intersticial, presentando una vista modal de pantalla completa.
customEventInterstitialWillDismiss: El intersticial cerrará una vista modal de pantalla completa.
customEventInterstitialDidDismiss: El intersticial ha cerrado una vista modal de pantalla completa.
customEventInterstitialWillLeaveApplication: El intersticial ha provocado que el usuario salga de la aplicación.
customEventInterstitialWasClicked: Se ha hecho clic en el intersticial.

Para obtener más información, consulta la implementación de ejemplo de un banner de evento personalizado.

Evento de intersticial personalizado

Los eventos de intersticial personalizados se implementan de forma similar a los eventos de banner personalizados, con la principal diferencia de que la clase de los primeros debe seguir el protocolo GADCustomEventInterstitial en lugar de GADCustomEventBanner.

Definir un evento personalizado

Los eventos personalizados se deben definir en la UI de AdMob. En el artículo Añadir un evento personalizado encontrarás instrucciones sobre cómo desplazarte por la UI.

En esta captura de pantalla se muestran algunos ejemplos de ajustes de eventos personalizados:

La tabla que aparece a continuación te servirá de orientación cuando vayas a rellenar estos parámetros.

Nombre de clase

Escribe el nombre completo de la clase que implementa el evento personalizado.

Si el lenguaje con el que has implementado tu clase es Swift, debes añadir al nombre de la clase un prefijo que indique el módulo de la aplicación o del framework (por ejemplo, appName.className).

Si el proyecto tiene varios destinos o no se llama igual que el destino seleccionado, debes indicar el nombre del destino en cuestión. Con el nombre de destino, el aspecto sería el siguiente: appName_targetName.className. Además, recuerda que tienes que sustituir todos los caracteres no alfanuméricos, como los guiones, por guiones bajos.

Para obtener más información, consulta este ejemplo.

Etiqueta Introduce un nombre descriptivo para el evento.
Parámetro Si quieres transferir un argumento al evento personalizado, introduce la cadena correspondiente.

Solicitar un intersticial

En las solicitudes de intersticiales de los eventos personalizados, se realiza una llamada al método requestInterstitialAdWithParameter:label:request: inmediatamente después de que se cree una instancia de la clase de evento personalizado. Este método no devuelve nada, ya que se presupone que el evento personalizado obtendrá el anuncio de forma asíncrona a través de la red.

El evento personalizado debe actuar como delegado del SDK para recibir las retrollamadas. Los parámetros serverParameter y serverLabel se corresponden con los campos de parámetros y etiquetas definidos al crear un evento personalizado en la UI de AdMob.

A continuación se muestra un ejemplo de implementación de requestInterstitialAdWithParameter:label:request: mediante la red publicitaria de ejemplo:

Swift

func requestInterstitialAdWithParameter(serverParameter: String!,
    label serverLabel: String!, request: GADCustomEventRequest!) {
  interstitial = SampleInterstitial()
  interstitial.delegate = self
  interstitial.adUnit = serverParameter
  let adRequest = SampleAdRequest()
  adRequest.testMode = request.isTesting
  adRequest.keywords = request.userKeywords
  interstitial.fetchAd(adRequest)
}

Objective‑C

- (void)requestInterstitialAdWithParameter:(NSString *)serverParameter
                                     label:(NSString *)serverLabel
                                   request:(GADCustomEventRequest *)request {
  self.interstitial = [[SampleInterstitial alloc] init];
  self.interstitial.delegate = self;
  self.interstitial.adUnit = serverParameter;
  SampleAdRequest *adRequest = [[SampleAdRequest alloc] init];
  adRequest.testMode = request.isTesting;
  adRequest.keywords = request.userKeywords;
  [self.interstitial fetchAd:adRequest];
}

El protocolo de eventos personalizados GADCustomEventInterstitial requiere que implementes el método presentFromRootViewController:. Cuando solicitas al SDK de anuncios de Google para móviles que muestre el intersticial, la mediación invoca dicho método de la siguiente manera:

Swift

func presentFromRootViewController(rootViewController: UIViewController!) {
  if interstitial.interstitialLoaded {
    interstitial.show()
  }
}

Objective‑C

- (void)presentFromRootViewController:(UIViewController *)rootViewController {
  if ([self.interstitial isInterstitialLoaded]) {
    [self.interstitial show];
  }
}

Enviar parámetros adicionales de la red publicitaria en las solicitudes de eventos personalizados

Para enviar parámetros adicionales de la red publicitaria junto con la solicitud que debe gestionar el evento personalizado, tienes que utilizar la función GADRequest registerAdNetworkExtras:. Debes crear una instancia de GADCustomEventExtras (que se ajuste al protocolo GADAdNetworkExtras) para que se rellene una propiedad GADCustomEventRequest.additionalParameters. Para transferir los parámetros adicionales, realiza una llamada al método GADCustomEventExtras setExtras:forLabel: y transfiere los parámetros como un diccionario y la etiqueta del evento personalizado que hayas definido en la UI de AdMob.

En el siguiente fragmento de código se muestra cómo transferir un parámetro SampleExtra de la etiqueta SampleCustomEvent que hemos definido anteriormente:

Swift

let request = GADRequest()
let extras = GADCustomEventExtras()
extras.setExtras(["SampleExtra": true], forLabel: "SampleCustomEvent")
request.register(extras)

Objective‑C

GADRequest *request = [GADRequest request];
GADCustomEventExtras *extras = [[GADCustomEventExtras alloc] init];
[extras setExtras:@{@"SampleExtra": @(YES)} forLabel:@"SampleCustomEvent"];
[request registerAdNetworkExtras:extras];

Si no registras una instancia de GADCustomEventExtras para una solicitud de evento personalizado, el valor de la propiedad additionalParameters de GADCustomEventRequest será nil.

Notificar a la mediación de AdMob

Al igual que con el evento de banner personalizado, debes implementar el procesador de anuncios de tu red para enviar mensajes de vuelta a la mediación. En el siguiente ejemplo se muestra la implementación de la interfaz SampleInterstitialAdDelegate de la red publicitaria de ejemplo:

Swift

/// Type property for Sample Ad Network custom event error domain.
static let customEventErrorDomain = "com.google.CustomEvent"

// Sent when an interstitial ad has loaded.
func interstitialDidLoad(interstitial: SampleInterstitial!) {
  delegate.customEventInterstitialDidReceiveAd(self)
}

// Sent when interstitial ad has failed to load.
func interstitial(interstitial: SampleInterstitial!,
    didFailToLoadAdWithErrorCode errorCode: SampleErrorCode) {
  let nsError = NSError(domain: SampleCustomEventInterstitial.customEventErrorDomain,
      code: errorCode.rawValue, userInfo: nil)
  delegate.customEventInterstitial(self, didFailAd: nsError)
}

// Sent when an interstitial is about to be shown.
func interstitialWillPresentScreen(interstitial: SampleInterstitial!) {
  delegate.customEventInterstitialWillPresent(self)
}

// Sent when an interstitial is about to be dismissed.
func interstitialWillDismissScreen(interstitial: SampleInterstitial!) {
  delegate.customEventInterstitialWillDismiss(self)
}

// Sent when an interstitial has been dismissed.
func interstitialDidDismissScreen(interstitial: SampleInterstitial!) {
  delegate.customEventInterstitialDidDismiss(self)
}

// Sent when an interstitial is clicked and an external application is launched.
func interstitialWillLeaveApplication(interstitial: SampleInterstitial!) {
  delegate.customEventInterstitialWasClicked(self)
  delegate.customEventInterstitialWillLeaveApplication(self)
}

Objective‑C

/// Constant for Sample Ad Network custom event error domain.
static NSString *const customEventErrorDomain = @"com.google.CustomEvent";

// Sent when an interstitial ad has loaded.
- (void)interstitialDidLoad:(SampleInterstitial *)interstitial {
  [self.delegate customEventInterstitialDidReceiveAd:self];
}

// Sent when an interstitial ad has failed to load.
- (void)interstitial:(SampleInterstitial *)interstitial
    didFailToLoadAdWithErrorCode:(SampleErrorCode)errorCode {
  NSError *error = [NSError errorWithDomain:customEventErrorDomain
                                       code:errorCode
                                   userInfo:nil];
  [self.delegate customEventInterstitial:self didFailAd:error];
}

// Sent when an interstitial is about to be shown.
- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial {
  [self.delegate customEventInterstitialWillPresent:self];
}

// Sent when an interstitial is about to be dismissed.
- (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial {
  [self.delegate customEventInterstitialWillDismiss:self];
}

// Sent when an interstitial has been dismissed.
- (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial {
  [self.delegate customEventInterstitialDidDismiss:self];
}

// Sent when an interstitial is clicked and an external application is launched.
- (void)interstitialWillLeaveApplication:(SampleInterstitial *)interstitial {
  [self.delegate customEventInterstitialWasClicked:self];
  [self.delegate customEventInterstitialWillLeaveApplication:self];
}

El envío de mensajes a la mediación permite que prosiga el flujo de mediación.

Para obtener más información, consulta este ejemplo de implementación de un evento intersticial personalizado.