Внедрение адаптера рекламы с вознаграждением

Адаптер медиации получает сообщения и запросы от Google Mobile Ads SDK и взаимодействует со сторонним сетевым SDK для выполнения этих запросов.

Это руководство предназначено для рекламных сетей, желающих создать адаптер посредничества рекламы с вознаграждением для Google Mobile Ads Mediation. Пример SDK используется в приведенных ниже фрагментах кода в демонстрационных целях. Полную реализацию адаптера , созданного для этого примера SDK, можно найти в нашем проекте медиацииiOS . В этом руководстве объясняется, как собрать адаптер.

Определите имя класса адаптера и параметры сервера.

Рекламным сетям, работающим через посредническую платформу AdMob, обычно требуется один или несколько идентификаторов для идентификации издателя. Эти идентификаторы представлены как параметры сервера и определяются при настройке сторонней рекламной сети для посредничества в пользовательском интерфейсе AdMob .

Прежде чем разрабатывать адаптер медиации, вы должны предоставить Google имя класса адаптера и другие необходимые параметры, чтобы получить доступ к вашей рекламной сети.

Соответствует протоколу GADMediationAdapter.

Первый шаг — заставить класс адаптера реализовать протокол GADMediationAdapter :

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

@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end

Это изменение гарантирует, что ваш класс реализует несколько методов, обсуждаемых ниже.

Сообщить о дополнительном классе

Если сторонняя сеть желает разрешить издателям передавать дополнительные необязательные параметры для запроса объявления, класс extras должен быть возвращен из метода networkExtrasClass . Возвращайте Nil если третья сторона не поддерживает дополнительные возможности, предоставленные издателем.

#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

Номера версий отчета

Адаптер должен сообщать Google Mobile Ads SDK как версию самого адаптера, так и версию стороннего SDK. Версии сообщаются с помощью GADVersionNumber.

Адаптеры Google с открытым исходным кодом и версии с открытым исходным кодом используют схему версии адаптера из 4 цифр, но GADVersionNumberдопускает только 3 цифры. Чтобы обойти эту проблему, рекомендуется объединить последние две цифры в версию патча, как показано ниже:

#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

Инициализируйте адаптер

Когда приложение инициализирует Google Mobile Ads SDK, setUpWithConfiguration:completionHandler: вызывается на всех адаптерах, настроенных для приложения в пользовательском интерфейсе AdMob.

Аргумент GADMediationServerConfiguration предоставляет информацию обо всех местах размещения, настроенных для приложения в пользовательском интерфейсе AdMob. Используйте эту информацию для инициализации SDK вашей рекламной сети. После инициализации SDK вашей рекламной сети вызовите аргумент GADMediationAdapterSetUpCompletionBlock . Этот блок позволяет сообщить об успешной или неудачной инициализации в Google Mobile Ads SDK, вызвав обработчик завершения с nil или объектом 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

Запросить рекламу с вознаграждением

Когда приложение загружает объявление с вознаграждением с помощью Google Mobile Ads SDK, в адаптере вызывается loadRewardedAdForAdConfiguration:completionHandler: если ваша рекламная сеть доступна в каскаде медиации.

GADRewardedLoadCompletionHandler позволяет сообщить об успешной загрузке объявления в Google Mobile Ads SDK, предоставив ссылку на объект, соответствующий протоколу GADMediationRewardedAd , или о неудачной загрузке объявления, предоставив nil ссылку и объект NSError . Вызов обработчика завершения загрузки возвращает GADMediationRewardedAdEventDelegate , который ваш адаптер должен удерживать в течение жизненного цикла объявления, чтобы уведомлять Google Mobile Ads SDK о любых последующих событиях.

#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

Ретрансляция событий загрузки рекламы

В обязанности адаптера входит прослушивание обратных вызовов стороннего SDK и сопоставление их с соответствующим обратным вызовом Google Mobile Ads SDK.

Сообщайте об успехе или неудаче событий загрузки сторонней рекламы, вызывая loadCompletionHandler с объявлением или ошибкой. Если обработчик завершения вызывается с объявлением и без ошибок, возвращается объект делегата события объявления. Сохраните ссылку на этого делегата, чтобы ваш адаптер мог ретранслировать события презентации позже.

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

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

Показать объявление

Когда приложение запрашивает Google Mobile Ads SDK представить объявление с вознаграждением, SDK вызывает метод presentFromViewController: для экземпляра GADMediationRewardedAd , предоставленного при вызове обработчика завершения загрузки. Здесь вы должны представить вознагражденное объявление:

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

Сообщайте о рекламных событиях в Mobile Ads SDK

После отображения объявления адаптер должен сообщать о событиях жизненного цикла представления объявления, используя тот же делегат события объявления, который возвращается во время успешной загрузки объявления.

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

Рекламные события, о которых следует сообщать в Google Mobile Ads SDK, подробно описаны ниже:

Рекламное событие Описание
будетPresentFullScreenView Уведомляет Google Mobile Ads SDK о том, что объявление будет показано.
сделалСтартВидео Уведомляет Google Mobile Ads SDK о начале воспроизведения объявления с вознаграждением.
отчет о показе Уведомляет Google Mobile Ads SDK о показе объявления.
сделалКонецВидео Уведомляет Google Mobile Ads SDK о завершении воспроизведения объявления с вознаграждением.
DidRewardUserWithReward Уведомляет Google Mobile Ads SDK о том, что пользователь получил вознаграждение.
сообщитьНажмите Уведомляет Google Mobile Ads SDK о клике по объявлению.
WillDismissFullScreenView Уведомляет Google Mobile Ads SDK о том, что объявление будет отклонено.
сделалОтклонитьFullScreenView Уведомляет Google Mobile Ads SDK о том, что объявление было отклонено.