Pengembangan Adaptor Mediasi Jaringan Iklan

Panduan ini ditujukan untuk jaringan iklan yang ingin membuat adaptor mediasi. Jika Anda adalah penayang, lihat petunjuk mediasi penayang.

Adaptor mediasi adalah lapisan komunikasi antara jaringan iklan Anda dan Mediasi Google Mobile Ads. Adaptor menayangkan iklan dari jaringan iklan Anda sekaligus meneruskan peristiwa iklan yang relevan ke AdMob. Adaptor bertanggung jawab untuk menerapkan protokol GADMAdNetworkAdapter guna memastikannya memberikan kemampuan yang diperlukan.

Prasyarat

  • Xcode 15.3 atau yang lebih tinggi
  • Target deployment 8.0 atau yang lebih tinggi
  • Header tambahan dari folder Mediation Adapters pada download Google Mobile Ads iOS SDK

Jaringan iklan Anda harus memiliki hubungan yang berfungsi dengan Google untuk membuat adaptor mediasi.

Contoh Jaringan Iklan

Panduan ini menunjukkan cara membuat adaptor untuk Sample Ad Network. Sample Ad Network SDK berisi kelas yang mewakili kelas yang ditawarkan oleh sebagian besar jaringan iklan:

@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

Lihat penerapan SDK contoh lengkap untuk informasi lebih lanjut tentang class ini.

Konektor

Adaptor mediasi berinteraksi dengan Google Mobile Ads SDK menggunakan objek yang menerapkan protokol GADMAdNetworkConnector. Selanjutnya, kita akan menyebut objek ini sebagai konektor. Konektor mengekspos informasi yang diperlukan untuk permintaan iklan dan menyediakan cara untuk memanggil kembali mediasi untuk peristiwa iklan dan interaksi pengguna. Konektor diberikan ke adaptor mediasi pada saat inisialisasi. Siapkan adaptor Anda untuk menyimpan konektor dalam variabel instance:

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

Parameter server

Jaringan iklan Anda mungkin memerlukan ID untuk mengenali penayang. Sample Ad Network, misalnya, memerlukan unit iklan. Parameter server yang diperlukan ini disediakan ke adaptor melalui metode credentials, yang menampilkan NSDictionary ID dan nilai yang sesuai. Baris kode berikut mengambil parameter server yang bernama ad_unit untuk Sample Ad Network dari konektor:

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

Penyiapan jaringan mediasi

Jaringan iklan harus memberi tahu AdMob tentang parameter server yang diperlukan untuk jaringannya. Tindakan ini memungkinkan AdMob mengonfigurasi jaringan Anda di frontend.

Saat mengaktifkan jaringan untuk mediasi di frontend, AdMob mengharuskan Anda memasukkan nilai yang diperlukan untuk membuat instance adaptor. Screenshot di bawah menunjukkan bahwa Application Placement Identifier (APID) diperlukan untuk Millennial Media dan App ID diperlukan untuk InMobi.

Baca artikel ini untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi jaringan iklan mediasi.

Membuat permintaan iklan mediasi

Untuk permintaan banner mediasi, metode getBannerWithSize akan segera dipanggil setelah instance adaptor dibuat. Metode ini tidak menampilkan apa pun. Fungsi ini memberikan sinyal ke adaptor untuk memulai pengambilan iklan asinkron melalui jaringan. Adaptor Anda harus memproses callback untuk SDK Anda. Jika SDK Anda tidak mendukung ukuran iklan yang diberikan atau tidak mendukung iklan banner, panggil metode adapter:didFailAd: pada konektor.

Penerapan getBannerWithSize untuk Sample Ad Network akan terlihat seperti ini:

- (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");
}

Parameter penargetan tambahan

Konektor berisi beberapa informasi penargetan umum yang dapat Anda referensikan untuk penargetan iklan:

  • userKeywords
  • testMode
  • childDirectedTreatment

Tambahan mediasi

Tambahan mediasi memungkinkan jaringan iklan Anda mendukung parameter atau input penargetan tambahan yang tidak tercakup dalam parameter permintaan tambahan yang disediakan oleh konektor. Fungsi ini dapat disediakan melalui class yang menerapkan protokol GADAdNetworkExtras. Class SampleAdNetworkExtras ditampilkan di bawah ini sebagai contoh:

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

@end

Penayang harus meneruskan instance subclass GADAdNetworkExtras Anda saat membuat permintaan iklan. Instance subclass GADAdNetworkExtras ini dapat diakses melalui konektor. Berikut adalah cara menggunakan tambahan mediasi saat membuat permintaan iklan untuk jaringan Anda:

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

Untuk memastikan subclass GADAdNetworkExtras dapat diakses melalui konektor, terapkan networkExtrasClass dan tampilkan subclass GADAdNetworkExtras Anda:

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

Jika adaptor Anda tidak menggunakan tambahan mediasi, metode networkExtrasClass akan menampilkan Nil.

Memberi tahu mediasi

Adaptor Anda harus menerapkan pemroses iklan untuk jaringan Anda dan meneruskan callback peristiwa iklan yang relevan melalui konektor. Tabel di bawah menjelaskan kapan harus memanggil setiap metode delegasi:

Metode Waktu menelepon
adapter:didReceiveAdView: Permintaan banner berhasil.
adapter:didFailAd: Permintaan banner gagal.
adapterDidGetAdClick: Banner diklik.
adapterWillPresentFullScreenModal: Banner akan menampilkan overlay dalam aplikasi.
adapterWillDismissFullScreenModal: Overlay dalam aplikasi akan ditutup.
adapterDidDismissFullScreenModal: Overlay dalam aplikasi telah ditutup.
adapterWillLeaveApplication: Aplikasi akan ditempatkan di latar belakang atau dihentikan karena pengguna mengklik iklan yang akan meluncurkan aplikasi lain.

Contoh berikut menerapkan antarmuka SampleBannerAdDelegate dari Sample Ad Network untuk meneruskan pesan error dan status:

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

Meluncurkan overlay dalam aplikasi versus aplikasi eksternal

Ketika banner diklik, iklan dapat membuka overlay layar penuh atau aplikasi eksternal (seperti Safari atau app store). Callback konektor yang akan dipanggil dalam dua kasus ini berbeda.

Jika klik banner membuka overlay layar penuh, panggil adapterWillPresentFullScreenModal: saat menampilkan overlay. Saat overlay ditutup, panggil adapterWillDismissFullScreenModal: dan adapterDidDismissFullScreenModal:.

Jika klik banner (atau klik overlay layar penuh) menyebabkan pengguna keluar dari aplikasi, panggil callback adapterWillLeaveApplication:.

Anda sekarang memiliki adaptor mediasi yang berfungsi untuk banner. Untuk referensi, implementasi lengkap SampleAdapter dapat ditemukan di GitHub.

Menerapkan adaptor interstisial

Penerapan adaptor untuk iklan interstisial mirip dengan iklan banner. Metode getInterstitial dipanggil segera setelah adaptor dibuat instance-nya. Metode ini tidak menampilkan apa pun. Adaptor diharapkan akan memulai pengambilan iklan asinkron melalui jaringan. Buat adaptor Anda bertindak sebagai delegasi bagi SDK untuk memproses callback. Jika SDK Anda tidak mendukung iklan interstisial, panggil metode adapter:didFailAd: konektor sebagai berikut:

- (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");
}

Sama seperti MediationBannerAdapter, Anda dapat menerima identifikasi penayang dan informasi penargetan iklan dari konektor.

Memberi tahu mediasi

Adaptor Anda harus menerapkan delegasi iklan untuk jaringan Anda dan meneruskan callback peristiwa iklan yang relevan melalui konektor. Tabel di bawah menjelaskan kapan harus memanggil setiap metode delegasi:

Metode Waktu menelepon
adapterDidReceiveInterstitial: Permintaan interstisial berhasil.
adapter:didFailInterstitial: Permintaan interstisial gagal.
adapterDidGetAdClick: Interstisial diklik.
adapterWillPresentInterstitial: Interstisial akan ditampilkan.
adapterWillDismissInterstitial: Interstisial akan ditutup.
adapterDidDismissInterstitial: Interstisial telah ditutup.
adapterWillLeaveApplication: Aplikasi akan ditempatkan di latar belakang atau dihentikan karena pengguna mengklik iklan yang akan meluncurkan aplikasi lain.

Contoh berikut menerapkan antarmuka SampleInterstitialAdDelegate Sample Ad Network untuk meneruskan pesan error dan status:

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

Menayangkan interstisial

Setelah adaptor memanggil adapterDidReceiveInterstitial, buat menunggu untuk menampilkan interstisial hingga presentInterstitialFromRootViewController dipanggil. Developer aplikasi memutuskan waktu untuk menampilkan interstisial, yang mungkin beberapa menit setelah diterima.

Berikut adalah penerapan presentInterstitialFromRootViewController: untuk Sample Ad Network:

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

Adaptor mediasi Anda siap menangani iklan interstisial. Untuk referensi, implementasi lengkap SampleAdapter dapat ditemukan di GitHub.

FAQ

Haruskah saya menyertakan adaptor sebagai bagian dari pustaka SDK atau sebagai pustaka terpisah?
Sebaiknya sertakan adaptor sebagai bagian dari library SDK Anda, sehingga developer hanya perlu mereferensikan satu library untuk memasukkan jaringan Anda.
Apa yang harus saya lakukan jika adaptor saya hanya mendukung iklan banner?

Jika adaptor Anda hanya mendukung banner, minta adaptor tersebut meneruskan peristiwa error ke mediasi untuk permintaan interstisial:

- (void)getInterstitial {
  NSDictionary *errorInfo = @{ NSLocalizedDescriptionKey : @"Some error" };
  NSError *error = [NSError errorWithDomain:GADErrorDomain
                                       code:GADErrorInvalidRequest
                                   userInfo:errorInfo];
  [self.connector adapter:self didFailInterstitial:error];
  return;
}
Apa yang harus saya lakukan jika adaptor saya hanya mendukung iklan interstisial?

Jika adaptor Anda hanya mendukung interstisial, adaptor harus meneruskan peristiwa error ke mediasi untuk permintaan banner:

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