Ödüllü Reklam Bağdaştırıcısı Uygulama

Uyumlulaştırma bağdaştırıcısı, Google Mobile Ads SDK'sından mesajları ve istekleri alır ve bu istekleri karşılamak için üçüncü taraf ağ SDK'sı ile iletişim kurar.

Bu kılavuz, Google Mobil Reklam Uyumlulaştırması için ödüllü reklam uyumlulaştırma bağdaştırıcısı oluşturmak isteyen reklam ağları için hazırlanmıştır. Aşağıdaki kod snippet'lerinde gösterim amacıyla bir Örnek SDK kullanılmıştır. Bu örnek SDK için derlenen bir bağdaştırıcının eksiksiz bir uygulamasını iOS Uyumlulaştırma projemizde bulabilirsiniz. Bu kılavuzda, adaptörün nasıl oluşturulacağı açıklanmaktadır.

Bağdaştırıcı sınıfı adını ve sunucu parametrelerini tanımlayın

AdMob uyumlulaştırma platformu aracılığıyla uyumlulaştırılan reklam ağları, bir yayıncıyı tanımlamak için genellikle bir veya daha fazla tanımlayıcıya ihtiyaç duyar. Bu tanımlayıcılar sunucu parametreleri olarak temsil edilir ve AdMob kullanıcı arayüzünde uyumlulaştırma için üçüncü taraf reklam ağı yapılandırılırken tanımlanır.

Bir uyumlulaştırma bağdaştırıcısı geliştirmeden önce, reklam ağınıza erişmek için bağdaştırıcı sınıfı adınızı ve diğer gerekli parametreleri Google'a sağlamanız gerekir.

GADMediationAdapter protokolüyle uyumlu

İlk adım, bağdaştırıcı sınıfınızın GADMediationAdapter protokolünü uygulamasını sağlamaktır:

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

@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end

Bu değişiklik, sınıfınızın aşağıda açıklanan çeşitli yöntemleri uygulamasını sağlar.

Ekstra sınıfı bildir

Üçüncü taraf ağ, yayıncıların bir reklam isteği için isteğe bağlı ek parametreler iletmesine izin vermek isterse networkExtrasClass yönteminden extras sınıfı döndürülmelidir. Üçüncü taraf, yayıncı tarafından sağlanan ekstra öğeleri desteklemiyorsa Nil değerini döndürür.

#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

Rapor sürüm numaraları

Bağdaştırıcı, Google Mobile Ads SDK'sına hem bağdaştırıcının hem de üçüncü taraf SDK'nın sürümünü bildirmelidir. Sürümler GADVersionNumberkullanılarak raporlanır.

Google'ın açık kaynak ve sürümlü bağdaştırıcıları, 4 haneli bir bağdaştırıcı sürümü şeması kullanır ancak GADVersionNumberyalnızca 3 haneli değerlere izin verir. Bu sorunu çözmek için son iki basamağı aşağıda gösterildiği gibi yama sürümünde birleştirmeniz önerilir:

#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

Adaptörü başlatma

Bir uygulama Google Mobile Ads SDK'sını başlattığında, AdMob kullanıcı arayüzünde uygulama için yapılandırılmış tüm bağdaştırıcılarda setUpWithConfiguration:completionHandler: çağrılır.

GADMediationServerConfiguration bağımsız değişkeni, AdMob kullanıcı arayüzünde uygulama için yapılandırılmış tüm yerleşimler hakkında bilgi sağlar. Bu bilgileri kullanarak reklam ağı SDK'nızı başlatın. Reklam ağı SDK'nız başlatıldıktan sonra GADMediationAdapterSetUpCompletionBlock bağımsız değişkenini çağırın. Bu blok, tamamlama işleyicisini nil veya bir NSError nesnesiyle çağırarak Google Mobile Ads SDK'sına başarılı ya da başarısız bir başlatma bildirebilir.

#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

Ödüllü reklam isteme

Bir uygulama Google Mobile Ads SDK'sı ile ödüllü reklam yüklediğinde, reklam ağınıza uyumlulaştırma şelalesinde ulaşılırsa bağdaştırıcıda loadRewardedAdForAdConfiguration:completionHandler: çağrılır.

GADRewardedLoadCompletionHandler, GADMediationRewardedAd protokolüne uygun bir nesneye referans sağlayarak veya bir nil referansı ve NSError nesnesi sağlayarak başarısız bir reklam yüklemesi sağlayarak Google Mobile Ads SDK'sına başarılı bir reklam yüklemesi raporlamanızı sağlar. Yükleme tamamlama işleyicisinin çağrılması, bağdaştırıcınızın sonraki herhangi bir etkinliği Google Mobile Ads SDK'sına bildirmek için reklamın yaşam döngüsü boyunca tutması gereken bir GADMediationRewardedAdEventDelegate döndürür.

#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

Reklam yükleme etkinliklerini aktarma

Üçüncü taraf SDK geri çağırmalarını dinlemek ve bunları uygun Google Mobile Ads SDK geri çağırmasıyla eşlemek bağdaştırıcının sorumluluğundadır.

loadCompletionHandler öğesini bir reklam veya hatayla çağırarak üçüncü taraf reklam yükleme etkinliklerinin başarılı veya başarısız olduğunu bildirin. Tamamlama işleyicisi bir reklamla çağrılırsa ve hata yoksa bir reklam etkinliği yetki nesnesi döndürülür. Bağdaştırıcınızın daha sonra sunu etkinliklerini iletebilmesi için bu yetki verilmiş kullanıcıya bir referans verin.

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

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

Reklamı göster

Uygulama Google Mobile Ads SDK'sından ödüllü reklamı sunmasını istediğinde SDK, yükleme tamamlama işleyicisine yapılan çağrıda sağlanan GADMediationRewardedAd örneğinde presentFromViewController: yöntemini çağırır. Burada ödüllü reklamı sunmanız gerekir:

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

Reklam etkinliklerini Mobile Ads SDK'sına bildirme

Bağdaştırıcı, reklamı görüntüledikten sonra başarılı reklam yükleme zamanında döndürülen reklam etkinliği temsilcisini kullanarak reklam sunumu yaşam döngüsü olaylarını raporlamalıdır.

- (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'sına bildirilmesi gereken reklam etkinlikleri aşağıda açıklanmıştır:

Reklam etkinliği Açıklama
willPresentFullScreenView Google Mobile Ads SDK'sına reklamın görüntüleneceğini bildirir.
didStartVideo Google Mobile Ads SDK'sına bir ödüllü reklamın oynatılmaya başladığını bildirir.
reportImpression Google Mobile Ads SDK'sına reklamda bir gösterim oluştuğunu bildirir.
didEndVideo Google Mobile Ads SDK'sına ödüllü reklamın oynatıldığını bildirir.
didRewardUserWithReward Google Mobile Ads SDK'sına kullanıcının ödül kazandığını bildirir.
reportClick Google Mobile Ads SDK'sına reklamın tıklandığını bildirir.
willDismissFullScreenView Google Mobile Ads SDK'sına reklamın kapatılacağını bildirir.
didDismissFullScreenView Google Mobile Ads SDK'sına reklamın kapatıldığını bildirir.