Eventos personalizados de anuncios bonificados

Esta guía está dirigida a los editores que quieran utilizar la mediación de AdMob para mostrar anuncios bonificados que procedan de una red que no se admita directamente en la interfaz de .

Los eventos personalizados de anuncios bonificados te permiten crear adaptadores de mediación propios para mostrar anuncios bonificados de redes publicitarias de terceros. En esta guía, abordaremos cómo crear un evento personalizado para solicitar anuncios con un SDK de ejemplo que hemos desarrollado. Puedes encontrar el código fuente completo de este SDK en GitHub.

Requisitos previos

Para poder integrar eventos personalizados, debes incorporar el formato de anuncio bonificado. Si necesitas información sobre cómo integrar este formato, consulta la guía Anuncios bonificados.

Crear un evento personalizado

Para definir un evento personalizado, primero debes crearlo en la interfaz de AdMob. Encontrarás instrucciones sobre cómo hacerlo en Añadir un evento personalizado.

Una vez que se ha definido, el adaptador de eventos personalizados apunta a una clase dentro de tu aplicación que implementa el protocolo GADMediationAdapter para publicar un anuncio bonificado. El evento personalizado también mostrará un parámetro de servidor que se transferirá al adaptador del anuncio bonificado.

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

En la captura de pantalla se muestran las siguientes entradas:

Nombre de clase
El nombre completo de la clase que implementa el adaptador de eventos personalizados.
Etiqueta
El nombre único que define la fuente del anuncio.
Parámetro
Argumento de cadena opcional transferido al adaptador de eventos personalizados.

Implementar el evento personalizado

Un evento personalizado es una clase que implementa el protocolo GADMediationAdapter para publicar anuncios de terceros. En los siguientes pasos se explica cómo implementar un evento personalizado para solicitar y mostrar anuncios bonificados de la red publicitaria de ejemplo.

Implementar GADMediationAdapter

El primer paso para crear un evento personalizado es implementar el protocolo GADMediationAdapter, tal como lo hace la clase GADMediationAdapterSampleAdNetwork en este ejemplo:

#import <Foundation/Foundation.h>

@import GoogleMobileAds;
@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end

Informar de la clase de los extras

Si el evento personalizado admite extras para especificar otros parámetros de las solicitudes de anuncio, el método networkExtrasClass debe devolver la clase extras. Devuelve el valor Nil si el evento personalizado no admite extras proporcionados por editores.

#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork
...
+ (nullable Class<GADAdNetworkExtras>)networkExtrasClass {
  return Nil;
}
...
@end

Informar de los números de versión

Todos los eventos personalizados deben proporcionar al SDK de anuncios de Google para móviles su número de versión y el del SDK de terceros con el que interactúan. Las versiones se indican con GADVersionNumber:

#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork
...
+ (GADVersionNumber)adSDKVersion {
  NSString *versionString = @"1.0.0";
  NSArray *versionComponents = [versionString componentsSeparatedByString:@"."];
  GADVersionNumber version = {0};
  if (versionComponents.count == 3) {
    version.majorVersion = [versionComponents[0] integerValue];
    version.minorVersion = [versionComponents[1] integerValue];
    version.patchVersion = [versionComponents[2] integerValue];
  }
  return version;
}

+ (GADVersionNumber)version {
  NSString *versionString = @"1.0.0.0";
  NSArray *versionComponents = [versionString componentsSeparatedByString:@"."];
  GADVersionNumber version = {0};
  if (versionComponents.count == 4) {
    version.majorVersion = [versionComponents[0] integerValue];
    version.minorVersion = [versionComponents[1] integerValue];

    // Adapter versions have 2 patch versions. Multiply the first patch by 100.
    version.patchVersion = [versionComponents[2] integerValue] * 100
      + [versionComponents[3] integerValue];
  }
  return version;
}
...
@end

Solicitar un anuncio bonificado

Las solicitudes que hace tu aplicación para cargar anuncios bonificados invocan el método loadRewardedAdForAdConfiguration:completionHandler: del evento personalizado.

Informa al SDK de anuncios de Google para móviles de las cargas de anuncio que se han realizado con éxito. Para ello, invoca el elemento completionHandler que se ha facilitado con una referencia al objeto que implementa GADMediationRewardedAd. Esta invocación devuelve un objeto GADMediationRewardedAdEventDelegate. Los eventos personalizados deben conservar la referencia a este objeto para informar al SDK de anuncios de Google para móviles de los eventos de ciclo de vida de los anuncios. Este proceso se describe detalladamente en la sección Mostrar anuncios.

Para informar de un error de carga, invoca el elemento completionHandler que se ha facilitado con un objeto NSError.

A continuación se muestra un ejemplo de implementación de loadRewardedAdForAdConfiguration:completionHandler::

#import "GADMediationAdapterSampleAdNetwork.h"

@interface GADMediationAdapterSampleAdNetwork () <GADMediationRewardedAd> {
  /// Reward-based video ads from Sample SDK.
  SampleRewardBasedVideo *_rewardBasedVideoAd;
}
@property(nonatomic, weak, nullable) id<GADMediationRewardedAdEventDelegate> delegate;
@end
@implementation GADMediationAdapterSampleAdNetwork
...
- (void)loadRewardedAdForAdConfiguration:(GADMediationRewardedAdConfiguration *)adConfiguration
                       completionHandler:(GADRewardedLoadCompletionHandler)completionHandler {
  // Look for the "parameter" key to fetch the parameter you defined in the AdMob UI.
  NSString *adUnit = adConfiguration.credentials.settings[@"parameter"];
  SampleAdRequest *request = [[SampleAdRequest alloc] init];
  [SampleAdNetwork loadAdWithRequest:request
                   completionHandler:^(SampleRewardBasedVideo *ad ,NSError *error) {
    if (error) {
      completionHandler(nil, error);
      return;
    }
    _rewardBasedVideoAd = ad;
    self.delegate = completionHandler(self, nil);
  }];
}
...
@end

Mostrar anuncios

Cuando la aplicación pide al SDK de anuncios de Google para móviles que muestre el anuncio bonificado, el SDK llama al método presentFromViewController: en la instancia de GADMediationRewardedAd. Implementa este método para mostrar el anuncio bonificado.

- (void)presentFromViewController:(nonnull UIViewController *)viewController {
  if ([_rewardBasedVideoAd checkAdAvailability]) {
    // The reward based video ad is available, present the ad.
    [_rewardBasedVideoAd presentFromRootViewController:viewController];
  } else {
    NSError *error =
      [NSError errorWithDomain:@"GADMediationAdapterSampleAdNetwork"
                          code:0
                      userInfo:@{NSLocalizedDescriptionKey : @"Unable to display ad."}];
    [self.delegate didFailToPresentWithError:error];
  }
}

Informar de los eventos de anuncio

Después de mostrar un anuncio, el evento personalizado debe informar al SDK de anuncios de Google para móviles sobre los eventos de ciclo de vida relacionados con dicho anuncio según corresponda, por medio del objeto GADMediationRewardedAdEventDelegate que se proporciona cuando el anuncio se carga correctamente.

- (void)rewardBasedVideoAdDidOpen:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delegate willPresentFullScreenView];
  [self.delegate reportImpression];
}

- (void)rewardBasedVideoAdDidStartPlaying:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delegate didStartVideo];
}

- (void)rewardBasedVideoAdDidStopPlaying:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delegate didEndVideo];
}

- (void)rewardBasedVideoAdDidClose:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delegate willDismissFullScreenView];
}

- (void)rewardBasedVideoAdDidReceiveAdClick:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delegate reportClick];
}

- (void)rewardedAd:(nonnull SampleRewardedAd *)rewardedAd userDidEarnReward:(NSUInteger)reward {
  GADAdReward *aReward =
      [[GADAdReward alloc] initWithRewardType:@""
                                 rewardAmount:[NSDecimalNumber numberWithUnsignedInt:reward]];
  [self.delegate didRewardUserWithReward:aReward];
}
}

Estos son los eventos de anuncio que deben comunicarse al SDK de anuncios de Google para móviles:

Evento de anuncio Descripción
willPresentFullScreenView Informa al SDK de anuncios de Google para móviles de que el anuncio se mostrará.
didStartVideo Informa al SDK de anuncios de Google para móviles de que el anuncio bonificado ha empezado a reproducirse.
reportImpression Informa al SDK de anuncios de Google para móviles de que se ha mostrado una impresión del anuncio.
didEndVideo Informa al SDK de anuncios de Google para móviles de que el anuncio bonificado ha terminado de reproducirse.
didRewardUserWithReward Informa al SDK de anuncios de Google para móviles de que el usuario ha obtenido una bonificación.
reportClick Informa al SDK de anuncios de Google para móviles de que se ha hecho clic en el anuncio.
willDismissFullScreenView Informa al SDK de anuncios de Google para móviles de que el anuncio se cerrará.