Reklam Ağı Uyumlulaştırma Bağdaştırıcısı Geliştirme

Bu kılavuz, uyumlulaştırma bağdaştırıcısı oluşturmak isteyen reklam ağları için hazırlanmıştır. Yayıncıysanız yayıncı uyumlulaştırma talimatlarını inceleyin.

Uyumlulaştırma bağdaştırıcısı, reklam ağınız ile Google Mobil Reklamlar Uyumlulaştırması arasındaki iletişim katmanıdır. Bağdaştırıcılar, alakalı reklam etkinliklerini AdMob'a yönlendirirken reklam ağınızdan reklam yayınlar. Bağdaştırıcı, gerekli özellikleri sağladığından emin olmak için GADMAdNetworkAdapter protokolünü uygulamaktan sorumludur.

Ön koşullar

  • Xcode 15.3 veya üstü
  • 8.0 veya daha yüksek dağıtım hedefi
  • Google Mobile Ads iOS SDK'sını indirme işleminin Uyumlulaştırma Bağdaştırıcıları klasöründen ek başlıklar

Uyumlulaştırma bağdaştırıcısı oluşturmak için reklam ağınızın Google ile sağlam bir iş ilişkisine sahip olması gerekir.

Örnek Reklam Ağı

Bu kılavuzda, Örnek Reklam Ağı için bağdaştırıcının nasıl oluşturulacağı gösterilmektedir. Örnek Reklam Ağı SDK'sı, çoğu reklam ağının sunduğu sınıfları temsil eden sınıfları içerir:

@interface SampleBanner : UILabel

@property(nonatomic, copy) NSString *adUnit;
@property(nonatomic, weak) id<SampleBannerAdDelegate> delegate;
- (void)fetchAd:(SampleAdRequest *)request;

@end

typedef NS_ENUM(NSInteger, SampleErrorCode) {
  SampleErrorCodeBadRequest = 0,
  SampleErrorCodeUnknown = 1,
  SampleErrorCodeNetworkError = 2,
  SampleErrorCodeNoInventory = 3,
};

@interface SampleAdRequest : NSObject

@property(nonatomic, assign) BOOL testMode;
@property(nonatomic, copy) NSArray *keywords;

@end

@interface SampleInterstitial : NSObject

@property(nonatomic, copy) NSString *adUnit;
@property(nonatomic, weak) id<SampleInterstitialAdDelegate> delegate;
@property(nonatomic, assign, getter=isInterstitialLoaded) BOOL interstitialLoaded;
- (void)fetchAd:(SampleAdRequest *)request;
- (void)show;

@end

@protocol SampleBannerAdDelegate
- (void)bannerDidLoad:(SampleBanner *)banner;
- (void)banner:(SampleBanner *)banner didFailToLoadAdWithError:(SampleErrorCode)error;
- (void)bannerWillLeaveApplication:(SampleBanner *)banner;

@end

@protocol SampleInterstitialAdDelegate<NSObject>
- (void)interstitialDidLoad:(SampleInterstitial *)interstitial;
- (void)interstitial:(SampleInterstitial *)interstitial
    didFailToLoadAdWithError:(SampleErrorCode)error;
- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial;
- (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial;
- (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial;
- (void)interstitialWillLeaveApplication:(SampleInterstitial *)interstitial;

@end

Bu sınıflar hakkında daha fazla bilgi için tam örnek SDK uygulamasını inceleyin.

Bağlayıcı

Uyumlulaştırma bağdaştırıcıları, GADMAdNetworkConnector protokolünü uygulayan bir nesne kullanarak Google Mobile Ads SDK'sı ile etkileşim kurar. Bundan sonra, bu nesneyi bağlayıcı olarak adlandıracağız. Bağlayıcı, reklam istekleri için gerekli bilgileri açığa çıkarır ve reklam etkinlikleri ile kullanıcı etkileşimleri için uyumlulaştırmayı geri çağırma olanağı sunar. Bağlayıcı, başlatma sırasında uyumlulaştırma bağdaştırıcılarına sağlanır. Bağdaştırıcınızı, bağlayıcıyı bir örnek değişkeninde depolayacak şekilde ayarlayın:

- (id)initWithGADMAdNetworkConnector:(id<GADMAdNetworkConnector>)c {
  if ((self = [super init])) {
    _connector = c;
  }
  return self;
}

Sunucu parametreleri

Reklam ağınız, bir yayıncıyı tanımlamak için muhtemelen tanımlayıcılara ihtiyaç duyar. Örneğin, Örnek Reklam Ağı için bir reklam birimi gerekir. Bu gerekli sunucu parametreleri, bağdaştırıcıya credentials yöntemi aracılığıyla sağlanır. Bu yöntem, NSDictionary tanımlayıcı ve ilgili değerleri döndürür. Aşağıdaki kod satırı, bağlayıcıdan Örnek Reklam Ağı için ad_unit adlı sunucu parametresini alır:

self.interstitialAd.adUnit = [[self.connector credentials] objectForKey:@"ad_unit"];

Uyumlulaştırma ağı kurulumu

Reklam ağları, ağları için gerekli sunucu parametrelerini AdMob'a bildirmelidir. Böylece AdMob, ağınızı kullanıcı arabiriminde yapılandırabilir.

Kullanıcı arabiriminde uyumlulaştırma için ağınızı etkinleştirirken, AdMob bağdaştırıcınızı örneklendirmek için gerekli değerleri girmenizi gerektirir. Aşağıdaki ekran görüntüsünde, Millennial Media için bir Uygulama Yerleşimi Tanımlayıcısı (APID) ve InMobi için bir Uygulama Kimliği gerekli olduğu gösterilmektedir.

Uyumlulaştırma reklam ağlarını yapılandırma hakkında daha fazla bilgi için bu makaleye göz atın.

Uyumlulaştırma reklam isteğinde bulunma

Uyumlulaştırma banner istekleri için getBannerWithSize yöntemi, bağdaştırıcı örneklendikten hemen sonra çağrılır. Bu yöntem hiçbir şey döndürmez. Ağ üzerinden eşzamansız bir reklam getirme işlemi başlatması için bağdaştırıcıya sinyal gönderir. Bağdaştırıcınızın SDK'nıza ilişkin geri çağırmaları dinlemesini sağlayın. SDK'nız belirtilen reklam boyutunu desteklemiyor veya banner reklamları desteklemiyorsa bağlayıcıda adapter:didFailAd: yöntemini çağırın.

Örnek Reklam Ağı için getBannerWithSize uygulaması şöyle görünür:

- (void)getBannerWithSize:(GADAdSize)adSize {
  //The adapter should fail immediately if the adSize is not supported
  if (!GADAdSizeEqualToSize(adSize, GADAdSizeBanner) &&
      !GADAdSizeEqualToSize(adSize, GADAdSizeMediumRectangle) &&
      !GADAdSizeEqualToSize(adSize, GADAdSizeFullBanner) &&
      !GADAdSizeEqualToSize(adSize, GADAdSizeLeaderboard)) {
    NSString *errorDesc =
        [NSString stringWithFormat:@"Invalid ad type %@, not going to get ad.",
                                   NSStringFromGADAdSize(adSize)];
    NSDictionary *errorInfo = [NSDictionary
        dictionaryWithObjectsAndKeys:errorDesc, NSLocalizedDescriptionKey, nil];
    NSError *error = [NSError errorWithDomain:GADErrorDomain
                                         code:GADErrorMediationInvalidAdSize
                                     userInfo:errorInfo];
    [self.connector adapter:self didFailAd:error];
    return;
  }
  self.bannerAd = [[SampleBanner alloc]
      initWithFrame:CGRectMake(0, 0, adSize.size.width, adSize.size.height)];

  self.bannerAd.delegate = self;
  self.bannerAd.adUnit = [[self.connector credentials] objectForKey:@"ad_unit"];

  // Setup request parameters.
  SampleAdRequest *request = [[SampleAdRequest alloc] init];
  request.testMode = self.connector.testMode;
  request.keywords = self.connector.userKeywords;
  [self.bannerAd fetchAd:request];
  NSLog(@"Requesting banner from Sample Ad Network");
}

Ek hedefleme parametreleri

Bağlayıcı, reklam hedefleme için başvurabileceğiniz bazı yaygın hedefleme bilgilerini içerir:

  • userKeywords
  • testMode
  • childDirectedTreatment

Uyumlulaştırma ekstraları

Uyumlulaştırma ekstraları, reklam ağınızın, bağlayıcı tarafından sağlanan ek istek parametreleri tarafından kapsanmayan ek hedefleme parametrelerini veya girişleri desteklemesine olanak tanır. Bu işlev, GADAdNetworkExtras protokolünü uygulayan bir sınıf aracılığıyla sağlanabilir. Aşağıda örnek olarak SampleAdNetworkExtras sınıfı gösterilmektedir:

@interface SampleAdNetworkExtras : NSObject <GADAdNetworkExtras>
/// Should ad volume audio be muted.
@property(nonatomic, assign) BOOL muteAudio;

@end

Yayıncılar, reklam isteği yaparken GADAdNetworkExtras alt sınıfınızın bir örneğini iletmelidir. GADAdNetworkExtras alt sınıfınızın bu örneğine bağlayıcı üzerinden erişilebilir. Aşağıda, ağınız için bir reklam isteği oluştururken uyumlulaştırma ek özelliklerini nasıl kullanabileceğiniz açıklanmıştır:

SampleAdRequest *request = [[SampleAdRequest alloc] init];
SampleAdNetworkExtras *myAdNetworkExtras = [self.connector networkExtras];
request.muteAudio = myAdNetworkExtras.muteAudio;
[self.bannerAd fetchAd:request];

GADAdNetworkExtras alt sınıfınıza bağlayıcı üzerinden erişilebilmesini sağlamak için networkExtrasClass politikasını uygulayın ve GADAdNetworkExtras alt sınıfınızı döndürün:

+ (Class<GADAdNetworkExtras>)networkExtrasClass {
  return [SampleAdNetworkExtras class];
}

Bağdaştırıcınız uyumlulaştırma ekstralarını kullanmıyorsa networkExtrasClass yöntemi Nil değerini döndürür.

Uyumlulaştırma bildirimi

Bağdaştırıcınızın, ağınız için reklam işleyiciyi uygulamasını ve ilgili reklam etkinliği geri çağırmalarını bağlayıcı üzerinden yönlendirmesini sağlayın. Aşağıdaki tabloda, her bir yetkilendirme yönteminin ne zaman çağrılacağı açıklanmaktadır:

Yöntem Arama zamanı
adapter:didReceiveAdView: Banner isteği başarılı oldu.
adapter:didFailAd: Banner isteği başarısız oldu.
adapterDidGetAdClick: Banner tıklandı.
adapterWillPresentFullScreenModal: Banner'da uygulama içi yer paylaşımı gösterilir.
adapterWillDismissFullScreenModal: Uygulama içi yer paylaşımı kapatılacak.
adapterDidDismissFullScreenModal: Uygulama içi yer paylaşımı kapatıldı.
adapterWillLeaveApplication: Uygulama, kullanıcı başka bir uygulamayı başlatacak bir reklamı tıkladığı için arka plana yerleştirilir veya sonlandırılır.

Aşağıdaki örnekte, hata ve durum mesajlarını yönlendirmek için Örnek Reklam Ağı'ndan SampleBannerAdDelegate arayüzü uygulanmaktadır:

- (void)bannerDidLoad:(SampleBanner *)banner {
  [self.connector adapter:self didReceiveAdView:banner];
}

- (void)banner:(SampleBanner *)banner didFailWithError:(SampleErrorCode)error {
  [self.connector adapter:self
                didFailAd:[NSError errorWithDomain:@"Ad request failed"
                                              code:error
                                          userInfo:nil]];
}

- (void)bannerWillLeaveApplication:(SampleBanner *)banner {
  [self.connector adapterDidGetAdClick:self];
  [self.connector adapterWillLeaveApplication:self];
}

Uygulama içi yer paylaşımı veya harici uygulama başlatma

Bir banner tıklandığında, reklam tam ekran yer paylaşımı veya harici bir uygulama (Safari veya uygulama mağazası gibi) açabilir. Bu iki durumda çağrılacak bağlayıcı geri çağırma işlemleri farklıdır.

Bir banner tıklaması tam ekran yer paylaşımı açarsa yer paylaşımını gösterirken adapterWillPresentFullScreenModal: numaralı telefonu çağırın. Yer paylaşımı kapatıldığında hem adapterWillDismissFullScreenModal: hem de adapterDidDismissFullScreenModal: yöntemini çağırın.

Bir banner tıklaması (veya tam ekran yer paylaşımı tıklaması) kullanıcının uygulamadan ayrılmasına neden olursa adapterWillLeaveApplication: geri çağırmasını çağırın.

Artık banner'lar için çalışan bir uyumlulaştırma bağdaştırıcınız vardır. Referans olması açısından, SampleAdapter öğesinin tam olarak uygulanması GitHub'da bulunabilir.

Geçiş reklamı bağdaştırıcısı uygulama

Geçiş reklamları için bağdaştırıcı uygulaması banner reklamlara benzer. getInterstitial yöntemi, bağdaştırıcı başlatıldıktan hemen sonra çağrılır. Bu yöntem hiçbir şey döndürmez. Bağdaştırıcının ağ üzerinden eşzamansız bir reklam getirmesi başlatması beklenir. Bağdaştırıcınızın, geri çağırmaları dinlemek için SDK'nıza temsilci olarak davranmasını sağlayın. SDK'nız geçiş reklamlarını desteklemiyorsa bağlayıcının adapter:didFailAd: yöntemini aşağıdaki gibi çağırın:

- (void)getInterstitial {
  self.interstitialAd = [[SampleInterstitial alloc] init];
  self.interstitialAd.delegate = self;
  self.interstitialAd.adUnit =
      [[self.connector credentials] objectForKey:@"ad_unit"];

  SampleAdRequest *request = [[SampleAdRequest alloc] init];
  // Setup request parameters.
  request.testMode = self.connector.testMode;
  request.keywords = self.connector.userKeywords;

  [self.interstitialAd fetchAd:request];
  NSLog(@"Requesting interstitial from Sample Ad Network");
}

MediationBannerAdapter'da olduğu gibi, bağlayıcıdan yayıncı kimliği ve reklam hedefleme bilgileri alabilirsiniz.

Uyumlulaştırma bildirimi

Bağdaştırıcınızın, ağınız için reklam yetkisini uygulamasını ve ilgili reklam etkinliği geri çağırmalarını bağlayıcı üzerinden yönlendirmesini sağlayın. Aşağıdaki tabloda, her bir yetkilendirme yönteminin ne zaman çağrılacağı açıklanmaktadır:

Yöntem Arama zamanı
adapterDidReceiveInterstitial: Geçiş reklamı isteği başarılı oldu.
adapter:didFailInterstitial: Geçiş reklamı isteği başarısız oldu.
adapterDidGetAdClick: Geçiş reklamı tıklandı.
adapterWillPresentInterstitial: Geçiş reklamı gösterilir.
adapterWillDismissInterstitial: Geçiş reklamı kapatılır.
adapterDidDismissInterstitial: Geçiş reklamı kapatıldı.
adapterWillLeaveApplication: Kullanıcı başka bir uygulamayı başlatacak bir reklamı tıkladığı için uygulama arka plana alınır veya sonlandırılır.

Aşağıdaki örnekte, hata ve durum mesajlarını yönlendirmek için Örnek Reklam Ağı'nın SampleInterstitialAdDelegate arayüzü kullanılmaktadır:

- (void)interstitialDidLoad:(SampleInterstitial *)interstitial {
  [self.connector adapterDidReceiveInterstitial:self];
}

- (void)interstitial:(SampleInterstitial *)interstitial
    didFailWithError:(SampleErrorCode)error {
  [self.connector adapter:self
      didFailInterstitial:[NSError errorWithDomain:@"Ad request failed"
                                              code:error
                                          userInfo:nil]];
}

- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial {
  [self.connector adapterWillPresentInterstitial:self];
}

- (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial {
  [self.connector adapterWillDismissInterstitial:self];
}

- (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial {
  [self.connector adapterDidDismissInterstitial:self];
}

Geçiş reklamı sunma

Bağdaştırıcı adapterDidReceiveInterstitial işlevini çağırdıktan sonra, presentInterstitialFromRootViewController çağrılana kadar geçiş reklamının gösterilmesini bekleyin. Uygulama geliştirici, geçiş reklamının ne zaman gösterileceğine karar verir. Bu, geçişin alınmasından birkaç dakika sonra olabilir.

Aşağıda, Örnek Reklam Ağı için presentInterstitialFromRootViewController: uygulaması gösterilmektedir:

- (void)presentInterstitialFromRootViewController:
    (UIViewController *)rootViewController {
  if ([self.interstitialAd isLoaded]) {
    [self.interstitialAd show];
  }
}

Uyumlulaştırma bağdaştırıcınız geçiş reklamlarını işlemeye hazır. Referans olması için SampleAdapter öğesinin eksiksiz uygulamasını GitHub'da bulabilirsiniz.

SSS

Bağdaştırıcıyı SDK kitaplığımın bir parçası olarak mı yoksa ayrı bir kitaplık olarak mı eklemeliyim?
Bağdaştırıcıyı SDK kitaplığınızın bir parçası olarak eklemenizi öneririz. Böylece geliştiriciler, ağınızı dahil etmek için yalnızca bir kitaplığa başvurmak zorunda kalır.
Adaptörüm yalnızca banner reklamları destekliyorsa ne yapmalıyım?

Bağdaştırıcınız yalnızca banner'ları destekliyorsa geçiş reklamı istekleri için uyumlulaştırmaya bir hata olayı yönlendirmesini sağlayın:

- (void)getInterstitial {
  NSDictionary *errorInfo = @{ NSLocalizedDescriptionKey : @"Some error" };
  NSError *error = [NSError errorWithDomain:GADErrorDomain
                                       code:GADErrorInvalidRequest
                                   userInfo:errorInfo];
  [self.connector adapter:self didFailInterstitial:error];
  return;
}
Adaptörüm yalnızca geçiş reklamlarını destekliyorsa ne yapmalıyım?

Bağdaştırıcınız yalnızca geçiş reklamlarını destekliyorsa banner istekleri için uyumlulaştırmaya bir hata olayı yönlendirmesini sağlayın:

- (void)getBannerWithSize:(GADAdSize)adSize {
  NSDictionary *errorInfo = @{ NSLocalizedDescriptionKey : @"Some error" };
  NSError *error =
      [NSError errorWithDomain:GADErrorDomain
                          code:GADErrorInvalidRequest
                      userInfo:errorInfo];
  [self.connector adapter:self didFailAd:error];
  return;
}