Menerapkan Adaptor Iklan Reward

Adaptor mediasi menerima pesan dan permintaan dari Google Mobile Ads SDK dan berkomunikasi dengan SDK jaringan pihak ketiga untuk memenuhi permintaan tersebut.

Panduan ini ditujukan bagi jaringan iklan yang ingin membuat adaptor mediasi iklan reward untuk Mediasi Google Mobile Ads. SDK Sampel digunakan dalam cuplikan kode di bawah untuk tujuan demonstrasi. Anda dapat menemukan penerapan lengkap adaptor yang dibuat untuk SDK contoh ini dalam project MediasiiOS kami. Panduan ini menjelaskan cara membuat adaptor.

Menentukan nama class adaptor dan parameter server

Jaringan iklan yang dimediasi melalui platform mediasi AdMob biasanya memerlukan satu atau beberapa ID untuk mengidentifikasi penayang. ID ini ditampilkan sebagai parameter server dan ditentukan saat mengonfigurasi jaringan iklan pihak ketiga untuk mediasi pada UI AdMob.

Sebelum mengembangkan adaptor mediasi, Anda harus memberi Google nama class adaptor dan parameter lain yang diperlukan untuk mendapatkan akses ke jaringan iklan Anda.

Sesuai dengan protokol GADMediationAdapter

Langkah pertama adalah membuat class adaptor Anda mengimplementasikan protokol GADMediationAdapter:

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

@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end

Perubahan ini memastikan class Anda mengimplementasikan beberapa metode yang dibahas di bawah ini.

Melaporkan kelas tambahan

Jika jaringan pihak ketiga ingin mengizinkan penayang meneruskan parameter opsional tambahan untuk permintaan iklan, class extras harus ditampilkan dari metode networkExtrasClass. Tampilkan Nil jika pihak ketiga tidak mendukung tambahan yang diberikan penayang.

#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

Laporkan nomor versi

Adaptor harus melaporkan versi adaptor itu sendiri dan versi SDK pihak ketiga ke Google Mobile Ads SDK. Versi dilaporkan menggunakan GADVersionNumber.

Adaptor open source dan berversi Google menggunakan skema versi adaptor 4 digit, tetapi GADVersionNumber hanya mengizinkan 3 digit. Untuk mengatasi hal ini, sebaiknya gabungkan dua digit terakhir ke dalam versi patch, seperti ditunjukkan di bawah:

#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

Melakukan inisialisasi adaptor

Saat aplikasi melakukan inisialisasi Google Mobile Ads SDK, setUpWithConfiguration:completionHandler: dipanggil di semua adaptor yang dikonfigurasi untuk aplikasi dalam UI AdMob.

Argumen GADMediationServerConfiguration memberikan informasi tentang semua penempatan yang dikonfigurasi untuk aplikasi dalam UI AdMob. Gunakan informasi ini untuk menginisialisasi SDK jaringan iklan Anda. Setelah SDK jaringan iklan diinisialisasi, panggil argumen GADMediationAdapterSetUpCompletionBlock. Pemblokiran ini memungkinkan Anda melaporkan inisialisasi yang berhasil atau gagal ke Google Mobile Ads SDK dengan memanggil pengendali penyelesaian dengan objek nil atau 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

Meminta iklan reward

Saat aplikasi memuat iklan reward dengan Google Mobile Ads SDK, loadRewardedAdForAdConfiguration:completionHandler: dipanggil di adaptor jika jaringan iklan Anda dijangkau di waterfall mediasi.

GADRewardedLoadCompletionHandler memungkinkan Anda melaporkan pemuatan iklan yang berhasil ke Google Mobile Ads SDK dengan memberikan referensi ke objek yang sesuai dengan protokol GADMediationRewardedAd, atau pemuatan iklan yang gagal dengan memberikan referensi nil dan objek NSError. Pemanggilan pengendali penyelesaian beban akan menampilkan GADMediationRewardedAdEventDelegate yang harus dipertahankan oleh adaptor Anda selama siklus proses iklan untuk memberi tahu Google Mobile Ads SDK tentang peristiwa berikutnya.

#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

Peristiwa pemuatan iklan relai

Adaptor bertanggung jawab untuk memproses callback SDK pihak ketiga dan memetakannya ke callback Google Mobile Ads SDK yang sesuai.

Laporkan keberhasilan atau kegagalan peristiwa pemuatan iklan pihak ketiga dengan memanggil loadCompletionHandler bersama iklan atau error. Jika pengendali penyelesaian dipanggil dengan iklan dan tidak ada error, objek delegasi peristiwa iklan akan ditampilkan. Simpan referensi ke delegasi ini agar adaptor Anda dapat menyampaikan peristiwa presentasi nanti.

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

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

Menampilkan iklan

Saat aplikasi meminta Google Mobile Ads SDK untuk menampilkan iklan reward, SDK akan memanggil metode presentFromViewController: pada instance GADMediationRewardedAd yang diberikan dalam panggilan ke pengendali penyelesaian pemuatan. Di sini, Anda harus menampilkan iklan reward:

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

Melaporkan peristiwa iklan ke Mobile Ads SDK

Setelah menampilkan iklan, adaptor harus melaporkan peristiwa siklus proses presentasi iklan menggunakan delegasi peristiwa iklan yang sama yang ditampilkan pada waktu pemuatan iklan yang berhasil.

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

Peristiwa iklan yang harus dilaporkan ke Google Mobile Ads SDK dijelaskan di bawah:

Peristiwa iklan Deskripsi
willPresentFullScreenView Memberi tahu Google Mobile Ads SDK bahwa iklan akan ditampilkan.
didStartVideo Memberi tahu Google Mobile Ads SDK bahwa iklan reward mulai diputar.
reportImpression Memberi tahu Google Mobile Ads SDK bahwa tayangan terjadi pada iklan.
didEndVideo Memberi tahu Google Mobile Ads SDK bahwa iklan reward selesai diputar.
didRewardUserWithReward Memberi tahu Google Mobile Ads SDK bahwa pengguna telah memperoleh reward.
reportClick Memberi tahu Google Mobile Ads SDK bahwa iklan telah diklik.
willDismissFullScreenView Memberi tahu Google Mobile Ads SDK bahwa iklan akan ditutup.
didDismissFullScreenView Memberi tahu Google Mobile Ads SDK bahwa iklan telah ditutup.