Implémenter un adaptateur d'annonce avec récompense

Un adaptateur de médiation reçoit des messages et des requêtes du SDK Google Mobile Ads et communique avec un SDK de réseau tiers afin de répondre à ces requêtes.

Ce guide est destiné aux réseaux publicitaires qui souhaitent créer un adaptateur de médiation pour les annonces avec récompense pour la médiation Google Mobile Ads. Un exemple de SDK est utilisé dans les extraits de code ci-dessous à des fins de démonstration. Vous trouverez une implémentation complète d'un adaptateur conçu pour cet exemple de SDK dans notre projet de médiationiOS. Ce guide explique comment créer l'adaptateur.

Définir le nom de la classe de l'adaptateur et les paramètres du serveur

Les réseaux publicitaires utilisés par la plate-forme de médiation AdMob nécessitent généralement un ou plusieurs identifiants pour identifier un éditeur. Ces identifiants sont représentés en tant que paramètres de serveur et sont définis lors de la configuration d'un réseau publicitaire tiers pour la médiation dans l'UI AdMob.

Avant de développer un adaptateur de médiation, vous devez fournir à Google le nom de votre classe d'adaptateur et les autres paramètres requis afin d'obtenir l'accès à votre réseau publicitaire.

Respecter le protocole GADMediationAdapter

La première étape consiste à faire en sorte que votre classe d'adaptateur implémente le protocole GADMediationAdapter:

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

@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end

Cette modification garantit que votre classe implémente plusieurs méthodes décrites ci-dessous.

Classe Signaler des extras

Si le réseau tiers souhaite permettre aux éditeurs de transmettre des paramètres facultatifs supplémentaires pour une demande d'annonce, la classe extras doit être renvoyée par la méthode networkExtrasClass. Renvoie Nil si le tiers n'accepte pas les extras fournis par l'éditeur.

#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

Numéros de version des rapports

L'adaptateur doit signaler au SDK Google Mobile Ads à la fois la version de l'adaptateur lui-même et la version du SDK tiers. Les versions sont signalées à l'aide de GADVersionNumber.

Les adaptateurs Open Source et versionnés de Google utilisent un schéma de version d'adaptateur à quatre chiffres, mais GADVersionNumbern'accepte que trois chiffres. Pour contourner ce problème, il est recommandé de combiner les deux derniers chiffres dans la version du correctif, comme indiqué ci-dessous:

#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

Initialiser l'adaptateur

Lorsqu'une application initialise le SDK Google Mobile Ads, setUpWithConfiguration:completionHandler: est appelé sur tous les adaptateurs configurés pour l'application dans l'interface utilisateur AdMob.

L'argument GADMediationServerConfiguration fournit des informations sur tous les emplacements configurés pour l'application dans l'interface utilisateur AdMob. Utilisez ces informations pour initialiser le SDK de votre réseau publicitaire. Une fois votre SDK de réseau publicitaire initialisé, appelez l'argument GADMediationAdapterSetUpCompletionBlock. Ce bloc vous permet de signaler une initialisation réussie ou échouée au SDK Google Mobile Ads en appelant le gestionnaire d'achèvement avec nil ou un objet 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

Demander une annonce avec récompense

Lorsqu'une application charge une annonce avec récompense à l'aide du SDK Google Mobile Ads, loadRewardedAdForAdConfiguration:completionHandler: est appelé sur l'adaptateur si votre réseau publicitaire est accessible dans la cascade de la médiation.

GADRewardedLoadCompletionHandler vous permet de signaler un chargement d'annonce réussi au SDK Google Mobile Ads en fournissant une référence à un objet conforme au protocole GADMediationRewardedAd, ou un échec du chargement d'annonce en fournissant une référence nil et un objet NSError. L'appel du gestionnaire d'achèvement du chargement renvoie un GADMediationRewardedAdEventDelegate que votre adaptateur doit conserver pendant le cycle de vie de l'annonce afin d'informer le SDK Google Mobile Ads de tout événement ultérieur.

#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

Événements de chargement d'annonces Relay

Il incombe à l'adaptateur d'écouter les rappels de SDK tiers et de les mapper au rappel approprié du SDK Google Mobile Ads.

Signalez la réussite ou l'échec d'événements de chargement d'annonces tiers en appelant loadCompletionHandler avec une annonce ou une erreur. Si le gestionnaire d'achèvement est appelé avec une annonce et sans erreur, un objet délégué d'événement d'annonce est renvoyé. Conservez une référence à ce délégué afin que votre adaptateur puisse relayer les événements de présentation par la suite.

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

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

Diffuser l'annonce

Lorsque l'application demande au SDK Google Mobile Ads de présenter l'annonce avec récompense, le SDK appelle la méthode presentFromViewController: sur l'instance de GADMediationRewardedAd fournie dans l'appel du gestionnaire d'achèvement du chargement. Ici, vous devez présenter l'annonce avec récompense:

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

Signaler les événements d'annonce au SDK Mobile Ads

Après avoir affiché l'annonce, l'adaptateur doit signaler les événements du cycle de vie de la présentation de l'annonce à l'aide du même délégué d'événement d'annonce renvoyé au moment du chargement réussi de l'annonce.

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

Les événements d'annonce qui doivent être signalés au SDK Google Mobile Ads sont détaillés ci-dessous:

Événement d'annonce Description
willPresentFullScreenView Notifie le SDK Google Mobile Ads que l'annonce sera diffusée.
didStartVideo Notifie le SDK Google Mobile Ads qu'une annonce avec récompense a commencé à être diffusée.
reportImpression Notifie le SDK Google Mobile Ads qu'une impression s'est produite sur l'annonce.
didEndVideo Notifie le SDK Google Mobile Ads que la lecture de l'annonce avec récompense est terminée.
didRewardUserWithReward Notifie au SDK Google Mobile Ads que l'utilisateur a gagné une récompense.
reportClick Notifie le SDK Google Mobile Ads qu'un clic a été effectué sur l'annonce.
willDismissFullScreenView Notifie le SDK Google Mobile Ads que l'annonce va être ignorée.
didDismissFullScreenView Notifie le SDK Google Mobile Ads que l'annonce a été ignorée.