Адаптер медиации получает сообщения и запросы от 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 о том, что объявление было отклонено. |