Adapter für Anzeigen mit Prämie implementieren

Ein Vermittlungsadapter empfängt Nachrichten und Anfragen vom Google Mobile Ads SDK und kommuniziert mit dem SDK eines Drittanbieter-Werbenetzwerks, um diese Anfragen zu verarbeiten.

Dieser Leitfaden richtet sich an Werbenetzwerke, die einen Adapter für Anzeigen mit Prämie für die Google-Vermittlung für mobile Anzeigen erstellen möchten. Zu Demonstrationszwecken wird in den Code-Snippets unten ein Beispiel-SDK verwendet. Eine vollständige Implementierung eines Adapters, der für dieses Beispiel-SDK erstellt wurde, finden Sie in unserem iOS-Vermittlungsprojekt. In dieser Anleitung wird erläutert, wie Sie den Adapter erstellen.

Name der Adapterklasse und Serverparameter definieren

Werbenetzwerke, die über die AdMob-Vermittlungsplattform vermittelt werden, benötigen in der Regel eine oder mehrere Kennungen, um einen Publisher zu identifizieren. Diese Kennungen werden als Serverparameter dargestellt und definiert, wenn ein Drittanbieter-Werbenetzwerk für die Vermittlung in der AdMob-UI konfiguriert wird.

Bevor Sie einen Vermittlungsadapter entwickeln, müssen Sie Google den Namen Ihrer Adapterklasse und andere erforderliche Parameter mitteilen, um Zugriff auf Ihr Werbenetzwerk zu erhalten.

Entspricht dem GADMediationAdapter-Protokoll

Als Erstes muss Ihre Adapterklasse das GADMediationAdapter-Protokoll implementieren:

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

@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end

Diese Änderung stellt sicher, dass Ihre Klasse mehrere der unten beschriebenen Methoden implementiert.

Extras-Klasse melden

Wenn das Drittanbieternetzwerk Publishern erlauben möchte, zusätzliche optionale Parameter für eine Anzeigenanfrage zu übergeben, muss die extras-Klasse von der networkExtrasClass-Methode zurückgegeben werden. Gibt Nil zurück, wenn der Drittanbieter die vom Publisher bereitgestellten Extras nicht unterstützt.

#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

Versionsnummern von Berichten

Der Adapter muss sowohl die Version des Adapters als auch die Version des Drittanbieter-SDK an das Google Mobile Ads SDK senden. Versionen werden mit GADVersionNumbergemeldet.

Die Open-Source- und versionierten Adapter von Google verwenden ein vierstelliges Adapterversionsschema, GADVersionNumberunterstützt jedoch nur drei Ziffern. Zur Umgehung dieses Problems empfiehlt es sich, die letzten beiden Ziffern wie unten dargestellt in der Patchversion zu kombinieren:

#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

Adapter initialisieren

Wenn eine App das Google Mobile Ads SDK initialisiert, wird setUpWithConfiguration:completionHandler: für alle Adapter aufgerufen, die in der AdMob-Benutzeroberfläche für die App konfiguriert wurden.

Das Argument GADMediationServerConfiguration liefert Informationen zu allen Placements, die in der AdMob-Benutzeroberfläche für die App konfiguriert wurden. Verwenden Sie diese Informationen, um Ihr Werbenetzwerk-SDK zu initialisieren. Sobald das Werbenetzwerk-SDK initialisiert ist, rufen Sie das Argument GADMediationAdapterSetUpCompletionBlock auf. Mit diesem Block können Sie eine erfolgreiche oder fehlgeschlagene Initialisierung an das Google Mobile Ads SDK melden. Dazu rufen Sie den Abschluss-Handler mit nil oder einem NSError-Objekt auf.

#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

Anzeige mit Prämie anfordern

Wenn eine App eine Anzeige mit Prämie mit dem Google Mobile Ads SDK lädt, wird loadRewardedAdForAdConfiguration:completionHandler: über den Adapter aufgerufen, sofern Ihr Werbenetzwerk in der Vermittlungsabfolge erreicht wird.

Mit GADRewardedLoadCompletionHandler können Sie ein erfolgreiches Laden der Anzeige an das Google Mobile Ads SDK melden, indem Sie einen Verweis auf ein Objekt angeben, das dem GADMediationRewardedAd-Protokoll entspricht, oder ein Fehler beim Laden der Anzeige, indem Sie eine nil-Referenz und ein NSError-Objekt angeben. Durch den Aufruf des Handlers für den Ladeabschluss wird ein GADMediationRewardedAdEventDelegate zurückgegeben, das der Adapter für den gesamten Lebenszyklus der Anzeige beibehalten sollte, um das Google Mobile Ads SDK über nachfolgende Ereignisse zu informieren.

#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

Ladeereignisse für Anzeigen weiterleiten

Es liegt in der Verantwortung des Adapters, auf Drittanbieter-SDK-Callbacks zu warten und sie dem entsprechenden Google Mobile Ads SDK-Callback zuzuordnen.

Wenn Sie den Erfolg oder Misserfolg von Anzeigenladeereignissen von Drittanbietern melden möchten, rufen Sie loadCompletionHandler mit einer Anzeige oder einem Fehler auf. Wenn der Abschluss-Handler mit einer Anzeige und ohne Fehler aufgerufen wird, wird ein Delegatobjekt für das Anzeigenereignis zurückgegeben. Verweisen Sie auf diesen Delegat, damit Ihr Adapter später Präsentationsereignisse weiterleiten kann.

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

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

Anzeige einblenden

Wenn die App das Google Mobile Ads SDK auffordert, die Anzeige mit Prämie zu präsentieren, ruft das SDK die Methode presentFromViewController: für die Instanz von GADMediationRewardedAd auf, die im Aufruf an den Handler für den Ladeabschluss enthalten ist. Hier sollten Sie die Anzeige mit Prämie präsentieren:

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

Anzeigenereignisse an das Mobile Ads SDK melden

Nach der Auslieferung der Anzeige sollte über den Adapter der Lebenszyklus der Anzeigenpräsentation mit demselben Delegaten gemeldet werden, der bei erfolgreicher Ladezeit zurückgegeben wird.

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

Im Folgenden sind die Anzeigenereignisse aufgeführt, die an das Google Mobile Ads SDK gemeldet werden sollten:

Anzeigenereignis Beschreibung
willPresentFullScreenView Informiert das Google Mobile Ads SDK darüber, dass die Anzeige ausgeliefert wird.
didStartVideo Informiert das Google Mobile Ads SDK darüber, dass die Wiedergabe einer Anzeige mit Prämie gestartet wurde.
reportImpression Informiert das Google Mobile Ads SDK darüber, dass eine Impression bei der Anzeige aufgetreten ist.
didEndVideo Informiert das Google Mobile Ads SDK darüber, dass die Anzeige mit Prämie vollständig wiedergegeben wurde.
didRewardUserWithReward Informiert das Google Mobile Ads SDK darüber, dass der Nutzer eine Prämie erhalten hat.
reportClick Informiert das Google Mobile Ads SDK darüber, dass auf die Anzeige geklickt wurde
willDismissFullScreenView Informiert das Google Mobile Ads SDK darüber, dass die Anzeige geschlossen wird.
didDismissFullScreenView Informiert das Google Mobile Ads SDK darüber, dass die Anzeige geschlossen wurde