Cómo implementar un adaptador de anuncios recompensados

Un adaptador de mediación recibe mensajes y solicitudes del SDK de anuncios de Google para dispositivos móviles y se comunica con un SDK de red de terceros para completar esas solicitudes.

Esta guía está destinada a las redes de publicidad que buscan crear un adaptador de mediación de anuncios recompensados para la mediación de los anuncios de Google para dispositivos móviles. En los siguientes fragmentos de código, se usa un SDK de muestra con fines de demostración. Puedes encontrar una implementación completa de un adaptador compilado para este SDK de muestra en nuestro proyecto de MediacióniOS. En esta guía, se explica cómo compilar el adaptador.

Define el nombre de la clase del adaptador y los parámetros del servidor

Por lo general, las redes de publicidad que se median a través de la plataforma de mediación de AdMob requieren uno o más identificadores para identificar a un editor. Estos identificadores se representan como parámetros de servidor y se definen durante la configuración de una red de publicidad de terceros para su mediación en la IU de AdMob.

Antes de desarrollar un adaptador de mediación, debes proporcionar a Google tu nombre de clase de adaptador y otros parámetros necesarios para obtener acceso a tu red de publicidad.

Cumple con el protocolo GADMediationAdapter

El primer paso es hacer que tu clase de adaptador implemente el protocolo GADMediationAdapter:

#import <Foundation/Foundation.h>
#import <GoogleMobileAds/GoogleMobileAds.h>
#import <SampleAdSDK/SampleAdSDK.h>

@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end

Este cambio garantiza que tu clase implemente varios métodos que se analizan a continuación.

Denunciar clase extras

Si la red de terceros desea permitir que los publicadores pasen parámetros opcionales adicionales para una solicitud de anuncio, se debe mostrar la clase extras desde el método networkExtrasClass. Muestra Nil si el tercero no admite los elementos adicionales que proporcionó el publicador.

#import <GoogleMobileAds/GoogleMobileAds.h>

@interface SampleExtras : NSObject<GADAdNetworkExtras>

/// Use this to indicate if debug mode is on for logging.
@property(nonatomic) BOOL debugLogging;

/// Use this to indicate whether to mute audio for video ads.
@property(nonatomic) BOOL muteAudio;

@end
#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork
...
+ (Class<GADAdNetworkExtras>)networkExtrasClass {
  return [SampleExtras class];
}
...
@end

Números de versión del informe

El adaptador debe informar al SDK de anuncios de Google para dispositivos móviles tanto la versión del adaptador como la versión del SDK de terceros. Las versiones se informan mediante GADVersionNumber.

Los adaptadores de código abierto y de versiones de Google usan un esquema de versión de adaptador de 4 dígitos, pero GADVersionNumbersolo permite 3 dígitos. Para solucionar este problema, se recomienda combinar los últimos dos dígitos en la versión del parche, como se muestra a continuación:

#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork
...
+ (GADVersionNumber)adSDKVersion {
  NSString *versionString = SampleSDKVersion;
  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 = SampleAdapterVersion;
  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

Inicializa el adaptador

Cuando una app inicializa el SDK de anuncios de Google para dispositivos móviles, se invoca setUpWithConfiguration:completionHandler: en todos los adaptadores configurados para la app dentro de la IU de AdMob.

El argumento GADMediationServerConfiguration proporciona información sobre todas las posiciones configuradas para la app dentro de la IU de AdMob. Usa esta información para inicializar el SDK de tu red de publicidad. Una vez que se inicialice el SDK de la red de publicidad, invoca el argumento GADMediationAdapterSetUpCompletionBlock. Este bloque te permite informar una inicialización correcta o fallida al SDK de anuncios de Google para dispositivos móviles mediante la invocación del controlador de finalización con nil o un objeto NSError.

#import "SampleAdapter.h"

@implementation SampleAdapter
...
+ (void)setUpWithConfiguration:(GADMediationServerConfiguration *)configuration
             completionHandler:(GADMediationAdapterSetUpCompletionBlock)completionHandler {
  // Since the Sample SDK doesn't need to be initialized, the completion
  //handler is called directly here.
  completionHandler(nil);
}
...
@end

Cómo solicitar un anuncio recompensado

Cuando una app carga un anuncio recompensado con el SDK de anuncios de Google para dispositivos móviles, se invoca a loadRewardedAdForAdConfiguration:completionHandler: en el adaptador si se llega a tu red de publicidad en la cascada de mediación.

El GADRewardedLoadCompletionHandler te permite informar una carga de anuncios exitosa al SDK de anuncios de Google para dispositivos móviles, ya que proporciona una referencia a un objeto que cumple con el protocolo GADMediationRewardedAd, o una carga de anuncio fallida al proporcionar una referencia nil y un objeto NSError. La invocación del controlador de finalización de carga muestra un GADMediationRewardedAdEventDelegate que tu adaptador debe aferrarse durante el ciclo de vida del anuncio para notificar al SDK de los anuncios de Google para dispositivos móviles sobre cualquier evento posterior.

#import "SampleAdapter.h"

@interface SampleAdapter () <GADMediationRewardedAd> {
  /// Rewarded ads from Sample SDK.
  SampleRewardedAd *_rewardedAd;

  /// Handles any callback when the sample rewarded ad finishes loading.
  GADMediationRewardedLoadCompletionHandler _loadCompletionHandler;

  /// Delegate for receiving rewarded ad notifications.
  __weak id<GADMediationRewardedAdEventDelegate> _rewardedAdDelegate;
}
@end

@implementation SampleAdapter
...
- (void)loadRewardedAdForAdConfiguration:(GADMediationRewardedAdConfiguration *)adConfiguration
                       completionHandler:
                           (GADMediationRewardedLoadCompletionHandler)completionHandler {
  _loadCompletionHandler = completionHandler;

  NSString *adUnit = adConfiguration.credentials.settings[SampleSDKAdUnitIDKey];
  SampleExtras *extras = adConfiguration.extras;

  _rewardedAd = [[SampleRewardedAd alloc] initWithAdUnitID:adUnit];
  _rewardedAd.enableDebugLogging = extras.enableDebugLogging;

  /// Check the extras to see if the request should be customized.
  SampleAdRequest *request = [[SampleAdRequest alloc] init];
  request.mute = extras.muteAudio;

  /// Set the delegate on the rewarded ad to listen for callbacks from the Sample SDK.
  _rewardedAd.delegate = self;
  [_rewardedAd fetchAd:request];
}
...
@end

Retransmitir eventos de carga de anuncios

Es responsabilidad del adaptador escuchar las devoluciones de llamada del SDK de terceros y asignarlas a la devolución de llamada del SDK de anuncios de Google para dispositivos móviles correspondiente.

Invoca loadCompletionHandler con un anuncio o un error para informar el éxito o el fracaso de los eventos de carga de anuncios de terceros. Si se llama al controlador de finalización con un anuncio y sin error, se muestra un objeto delegado del evento de anuncio. Mantén una referencia a este delegado para que tu adaptador pueda retransmitir eventos de presentación más adelante.

- (void)rewardedAdDidReceiveAd:(nonnull SampleRewardedAd *)rewardedAd {
  _rewardedAdDelegate = _loadCompletionHandler(self, nil);
}

- (void)rewardedAdDidFailToLoadWithError:(SampleErrorCode)errorCode {
  _loadCompletionHandler(nil, [NSError errorWithDomain:kAdapterErrorDomain
                                                  code:GADErrorNoFill
                                              userInfo:nil]);
}

Muestra el anuncio

Cuando la app le solicita al SDK de anuncios de Google para dispositivos móviles que presente el anuncio recompensado, el SDK llama al método presentFromViewController: en la instancia de GADMediationRewardedAd proporcionada en la llamada al controlador de finalización de carga. Aquí debes presentar el anuncio recompensado:

- (void)presentFromViewController:(nonnull UIViewController *)viewController {
  if (!_rewardedAd.isReady) {
    NSError *error =
        [NSError errorWithDomain:kAdapterErrorDomain
                            code:0
                        userInfo:@{NSLocalizedDescriptionKey : @"Unable to display ad."}];
    [_rewardedAdDelegate didFailToPresentWithError:error];
    return;
  }
  [_rewardedAd presentFromRootViewController:viewController];
}

Informa eventos de anuncios al SDK de anuncios para dispositivos móviles

Después de mostrar el anuncio, el adaptador debe informar los eventos del ciclo de vida de la presentación de anuncios con el mismo delegado que se mostró en el momento de la carga correcta.

- (void)rewardedAdDidPresent:(nonnull SampleRewardedAd *)rewardedAd {
  [_rewardedAdDelegate willPresentFullScreenView];
  [_rewardedAdDelegate didStartVideo];
  [_rewardedAdDelegate reportImpression];
}

- (void)rewardedAdDidDismiss:(nonnull SampleRewardedAd *)rewardedAd {
  [_rewardedAdDelegate willDismissFullScreenView];
  [_rewardedAdDelegate didEndVideo];
  [_rewardedAdDelegate didDismissFullScreenView];
}
- (void)rewardedAd:(nonnull SampleRewardedAd *)rewardedAd userDidEarnReward:(NSUInteger)reward {
  GADAdReward *aReward =
      [[GADAdReward alloc] initWithRewardType:@"GADMediationAdapterSampleAdNetwork"
                                 rewardAmount:[NSDecimalNumber numberWithUnsignedInt:reward]];
  [_rewardedAdDelegate didRewardUserWithReward:aReward];
}

A continuación, se detallan los eventos de anuncios que se deben informar al SDK de anuncios de Google para dispositivos móviles:

Evento de anuncio Descripción
willPresentFullScreenView Le notifica al SDK de anuncios de Google para dispositivos móviles que se mostrará el anuncio.
didStartVideo Le notifica al SDK de anuncios de Google para dispositivos móviles que comenzó a reproducirse un anuncio recompensado.
reportImpression Le notifica al SDK de anuncios de Google para dispositivos móviles que se produjo una impresión en el anuncio.
didEndVideo Le notifica al SDK de anuncios de Google para dispositivos móviles que terminó de reproducirse el anuncio recompensado.
didRewardUserWithReward Le notifica al SDK de anuncios de Google para dispositivos móviles que el usuario obtuvo una recompensa.
reportClick Le notifica al SDK de anuncios de Google para dispositivos móviles que se hizo clic en el anuncio.
willDismissFullScreenView Le notifica al SDK de anuncios de Google para dispositivos móviles que se descartará el anuncio.
didDismissFullScreenView Le notifica al SDK de anuncios de Google para dispositivos móviles que se descartó el anuncio.