Implementare un adattatore annunci con premio

Un adattatore di mediazione riceve messaggi e richieste dall'SDK Google Mobile Ads e comunica con un SDK di rete di terze parti per soddisfare tali richieste.

Questa guida è rivolta alle reti pubblicitarie che vogliono creare un adattatore di mediazione degli annunci con premio per la mediazione degli annunci per dispositivi mobili di Google. Negli snippet di codice riportati di seguito viene utilizzato un SDK di esempio a scopo dimostrativo. Puoi trovare l'implementazione completa di un adattatore creato per questo SDK di esempio nel nostro progetto iOS Mediazione. Questa guida spiega come creare l'adattatore.

Definisci il nome della classe dell'adattatore e i parametri del server

Le reti pubblicitarie con mediazione tramite la piattaforma di mediazione AdMob in genere richiedono uno o più identificatori per identificare un publisher. Questi identificatori sono rappresentati come parametri del server e sono definiti durante la configurazione di una rete pubblicitaria di terze parti per la mediazione nell'interfaccia utente di AdMob.

Prima di sviluppare un adattatore di mediazione, devi fornire a Google il nome della classe dell'adattatore e gli altri parametri richiesti per poter accedere alla tua rete pubblicitaria.

Conforme al protocollo GADMediationAdapter

Il primo passaggio consiste nel fare in modo che la classe dell'adattatore implementi il protocollo GADMediationAdapter:

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

@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end

Questa modifica garantisce che il corso implementi diversi metodi illustrati di seguito.

Segnala corso extra

Se la rete di terze parti desidera consentire ai publisher di trasmettere parametri facoltativi aggiuntivi per una richiesta di annuncio, la classe extras deve essere restituita dal metodo networkExtrasClass. Restituisci Nil se la terza parte non supporta gli extra forniti dall'editore.

#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

Numeri di versione dei report

L'adattatore deve segnalare all'SDK Google Mobile Ads sia la versione dell'adattatore stesso sia la versione dell'SDK di terze parti. Le versioni vengono segnalate utilizzando GADVersionNumber.

Gli adattatori open source e con più versioni di Google utilizzano uno schema di versione dell'adattatore a quattro cifre, ma GADVersionNumber consentono solo 3 cifre. Per ovviare a questo problema, ti consigliamo di combinare le ultime due cifre nella versione della patch, come mostrato di seguito:

#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

Inizializza l'adattatore

Quando un'app inizializza l'SDK Google Mobile Ads, setUpWithConfiguration:completionHandler: viene richiamato su tutti gli adattatori configurati per l'app nella UI di AdMob.

L'argomento GADMediationServerConfiguration fornisce informazioni su tutti i posizionamenti configurati per l'app nell'interfaccia utente di AdMob. Utilizza queste informazioni per inizializzare l'SDK della rete pubblicitaria. Dopo aver inizializzato l'SDK della rete pubblicitaria, richiama l'argomento GADMediationAdapterSetUpCompletionBlock. Questo blocco ti consente di segnalare un'inizializzazione riuscita o non riuscita nell'SDK Google Mobile Ads richiamando il gestore di completamento con nil o un oggetto 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

Richiedere un annuncio con premio

Quando un'app carica un annuncio con premio con l'SDK Google Mobile Ads, l'elemento loadRewardedAdForAdConfiguration:completionHandler: viene richiamato nell'adattatore se la rete pubblicitaria viene raggiunta nella struttura a cascata della mediazione.

GADRewardedLoadCompletionHandler consente di segnalare un caricamento degli annunci riuscito all'SDK Google Mobile Ads fornendo un riferimento a un oggetto conforme al protocollo GADMediationRewardedAd oppure un caricamento degli annunci non riuscito fornendo un riferimento nil e un oggetto NSError. La chiamata del gestore di completamento del caricamento restituisce un GADMediationRewardedAdEventDelegate che l'adattatore deve mantenere per il ciclo di vita dell'annuncio per notificare all'SDK Google Mobile Ads qualsiasi evento successivo.

#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

Inoltrare eventi di carico degli annunci

È responsabilità dell'adattatore ascoltare i callback dell'SDK di terze parti e mapparli al callback appropriato dell'SDK Google Mobile Ads.

Segnala l'esito positivo o negativo degli eventi di caricamento degli annunci di terze parti Richiamando l'loadCompletionHandler con un annuncio o un errore. Se il gestore di completamento viene richiamato con un annuncio e non ci sono errori, viene restituito un oggetto delegato dell'evento dell'annuncio. Mantieni un riferimento a questo delegato in modo che l'adattatore possa inoltrare eventi di presentazione in un secondo momento.

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

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

Mostra l'annuncio

Quando l'app chiede all'SDK Google Mobile Ads di presentare l'annuncio con premio, l'SDK chiama il metodo presentFromViewController: sull'istanza di GADMediationRewardedAd fornita nella chiamata al gestore del completamento del caricamento. Qui dovresti presentare l'annuncio con premio:

- (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];
}

Segnalare gli eventi annuncio all'SDK Mobile Ads

Dopo aver visualizzato l'annuncio, l'adattatore deve registrare gli eventi del ciclo di vita della presentazione dell'annuncio utilizzando lo stesso delegato di eventi dell'annuncio restituito al momento del caricamento dell'annuncio.

- (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];
}

Di seguito sono riportati gli eventi annuncio che devono essere segnalati all'SDK Google Mobile Ads:

Evento annuncio Descrizione
willPresentFullScreenView Comunica all'SDK Google Mobile Ads che l'annuncio verrà visualizzato.
didStartVideo Comunica all'SDK Google Mobile Ads che la riproduzione di un annuncio con premio è iniziata.
reportImpression Comunica all'SDK Google Mobile Ads che si è verificata un'impressione dell'annuncio.
didEndVideo Comunica all'SDK Google Mobile Ads che la riproduzione dell'annuncio con premio è terminata.
didRewardUserWithReward Comunica all'SDK Google Mobile Ads che l'utente ha guadagnato un premio.
reportClick Comunica all'SDK Google Mobile Ads che è stato fatto clic sull'annuncio.
willDismissFullScreenView Comunica all'SDK Google Mobile Ads che l'annuncio verrà ignorato.
didDismissFullScreenView Comunica all'SDK Google Mobile Ads che l'annuncio è stato ignorato.