Implementacja adaptera reklam z nagrodą

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, GADVersionNumberale 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.