Adapter zapośredniczenia odbiera komunikaty i żądania z pakietu SDK do reklam mobilnych Google i komunikuje się z pakietem SDK sieci zewnętrznej, aby zrealizować te żądania.
Ten przewodnik jest przeznaczony dla sieci reklamowych, które chcą utworzyć adapter zapośredniczenia reklam z nagrodą na potrzeby zapośredniczenia reklam mobilnych Google. We fragmentach kodu poniżej w celach pokazowych wykorzystano przykładowy pakiet SDK. Pełną implementację adaptera utworzonego na potrzeby tego przykładowego pakietu SDK znajdziesz w naszym projekcie iOSZapośredniczenie. Ten przewodnik wyjaśnia, jak stworzyć przejściówkę.
Zdefiniuj nazwę klasy adaptera i parametry serwera
Sieci reklamowe zapośredniczone przez platformę zapośredniczenia AdMob zwykle wymagają co najmniej jednego identyfikatora do identyfikacji wydawcy. Identyfikatory te są reprezentowane jako parametry serwera i definiowane podczas konfigurowania zewnętrznej sieci reklamowej na potrzeby zapośredniczenia w interfejsie AdMob.
Przed utworzeniem adaptera zapośredniczenia musisz przekazać Google nazwę klasy adaptera i inne parametry wymagane do uzyskania dostępu do Twojej sieci reklamowej.
Zgodność z protokołem GADMediationAdapter
Pierwszym krokiem jest zaimplementowanie w klasie adaptera protokołu GADMediationAdapter
:
#import <Foundation/Foundation.h>
#import <GoogleMobileAds/GoogleMobileAds.h>
#import <SampleAdSDK/SampleAdSDK.h>
@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end
Dzięki tej zmianie klasa wdroży kilka metod opisanych poniżej.
Zgłoś zajęcia dodatkowe
Jeśli sieć zewnętrzna chce zezwolić wydawcom na przekazywanie dodatkowych parametrów opcjonalnych w żądaniu reklamy, klasa extras
musi zostać zwrócona przez metodę networkExtrasClass
. Jeśli firma zewnętrzna nie obsługuje dodatków przez wydawcę, zwraca wartość 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
Zgłoś numery wersji
Adapter musi zgłaszać do pakietu SDK do reklam mobilnych Google zarówno wersję samego adaptera, jak i wersję tego pakietu SDK firmy zewnętrznej. Wersje są zgłaszane za pomocą funkcji GADVersionNumber
.
Przejściówki Google typu open source i wersjonowane używają 4-cyfrowego schematu wersji adaptera, GADVersionNumber
ale dozwolone są tylko 3 cyfry. Aby obejść ten problem, zalecamy połączenie ostatnich 2 cyfr w wersji poprawki w ten sposób:
#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
Zainicjuj adapter
Gdy aplikacja zainicjuje pakiet SDK do reklam mobilnych Google, przy wszystkich adapterach skonfigurowanych na potrzeby aplikacji w interfejsie AdMob wywoływane jest polecenie setUpWithConfiguration:completionHandler:
.
Argument GADMediationServerConfiguration
dostarcza informacji o wszystkich miejscach docelowych skonfigurowanych na potrzeby aplikacji w interfejsie AdMob. Użyj tych informacji do zainicjowania pakietu SDK sieci reklamowej. Po zainicjowaniu pakietu SDK sieci reklamowej wywołaj argument GADMediationAdapterSetUpCompletionBlock
. Blokada ta umożliwia raportowanie udanego lub nieudanego zainicjowania pakietu SDK do reklam mobilnych Google przez wywołanie modułu obsługi ukończenia za pomocą obiektu nil
lub 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
Wysyłanie żądania reklamy z nagrodą
Gdy aplikacja wczytuje reklamę z nagrodą za pomocą pakietu SDK do reklam mobilnych Google, w adapterze wywoływany jest loadRewardedAdForAdConfiguration:completionHandler:
, jeśli Twoja sieć reklamowa dochodzi do kaskady zapośredniczenia.
Pole GADRewardedLoadCompletionHandler
umożliwia zgłaszanie w pakiecie SDK do reklam mobilnych Google udanego wczytania reklamy przez podanie odniesienia do obiektu zgodnego z protokołem GADMediationRewardedAd
lub nieudane wczytanie reklamy – przez podanie odniesienia nil
i obiektu NSError
. Wywołanie modułu obsługi ukończenia wczytywania zwraca element GADMediationRewardedAdEventDelegate
, którego adapter powinien się przytrzymywać przez cały cykl życia reklamy, aby powiadamiać pakiet SDK do reklam mobilnych Google o każdym kolejnym zdarzeniu.
#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
Przekaż zdarzenia wczytywania reklamy
Za wzięcie udziału w wywołaniach zwrotnych pakietu SDK zewnętrznego źródła reklam i mapowanie ich do odpowiedniego wywołania zwrotnego pakietu SDK do reklam mobilnych Google odpowiada adapter.
Możesz zgłaszać powodzenie lub niepowodzenie zdarzeń wczytywania reklamy firmy zewnętrznej, wywołując metodę loadCompletionHandler
z reklamą lub błędem. Jeśli moduł obsługi ukończenia zostanie wywołany z reklamą i nie wystąpi błąd, zwracany jest obiekt delegata zdarzenia reklamowego. Zachowaj odwołanie do tego delegata, aby adapter mógł później przekazywać zdarzenia prezentacji.
- (void)rewardedAdDidReceiveAd:(nonnull SampleRewardedAd *)rewardedAd {
_rewardedAdDelegate = _loadCompletionHandler(self, nil);
}
- (void)rewardedAdDidFailToLoadWithError:(SampleErrorCode)errorCode {
_loadCompletionHandler(nil, [NSError errorWithDomain:kAdapterErrorDomain
code:GADErrorNoFill
userInfo:nil]);
}
Wyświetl reklamę
Gdy aplikacja prosi pakiet SDK do reklam mobilnych Google o wyświetlenie reklamy z nagrodą, pakiet SDK wywołuje metodę presentFromViewController:
w wystąpieniu GADMediationRewardedAd
podanym w wywołaniu modułu obsługi ukończenia wczytywania. Oto Twoja reklama z nagrodą:
- (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];
}
Raportowanie zdarzeń reklamowych do pakietu SDK do reklam mobilnych
Po wyświetleniu reklamy adapter powinien raportować zdarzenia cyklu życia prezentacji reklam za pomocą tego samego delegata zdarzenia reklamowego, który został zwrócony w momencie wczytywania reklamy.
- (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];
}
Poniżej znajdziesz szczegółowe informacje o zdarzeniach reklamowych, które powinny być raportowane do pakietu SDK do reklam mobilnych Google:
Zdarzenie dotyczące reklamy | Opis |
---|---|
willPresentFullScreenView | Powiadomienie pakietu SDK do reklam mobilnych Google o wyświetleniu reklamy. |
didStartVideo | Powiadomienie pakietu SDK do reklam mobilnych Google o rozpoczęciu odtwarzania reklamy z nagrodą. |
reportImpression | Powiadomienie pakietu SDK do reklam mobilnych Google o tym, że reklama została wyświetlona. |
didEndVideo | Powiadomienie pakietu SDK do reklam mobilnych Google o zakończeniu odtwarzania reklamy z nagrodą. |
didRewardUserWithReward | Powiadomienie pakietu SDK do reklam mobilnych Google o nagrodzie dla użytkownika. |
reportClick | Informuje pakiet SDK do reklam mobilnych Google o kliknięciu reklamy. |
willDismissFullScreenView | Powiadomienie pakietu SDK do reklam mobilnych Google, że reklama zostanie zamknięta. |
didDismissFullScreenView | Powiadomienie pakietu SDK do reklam mobilnych Google o zamknięciu reklamy. |