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 MediasiAndroid 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.

Mengimplementasikan Class Adaptor

Langkah pertama adalah menerapkan class abstrak Adapter:

...
import com.google.android.gms.ads.mediation.Adapter;
...

public class SampleAdapter extends Adapter {
 ...
}

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

Laporkan nomor versi

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

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

...
import com.google.android.gms.ads.VersionInfo;
...

public class SampleAdapter extends Adapter implements SampleRewardedAdListener {
  ...
  @Override
  public VersionInfo getVersionInfo() {
    String versionString = BuildConfig.VERSION_NAME;
    String[] splits = versionString.split("\\.");

    if (splits.length >= 4) {
      int major = Integer.parseInt(splits[0]);
      int minor = Integer.parseInt(splits[1]);
      int micro = Integer.parseInt(splits[2]) * 100 + Integer.parseInt(splits[3]);
      return new VersionInfo(major, minor, micro);
    }

    return new VersionInfo(0, 0, 0);
  }

  @Override
  public VersionInfo getSDKVersionInfo() {
    String versionString = SampleAdRequest.getSDKVersion();
    String[] splits = versionString.split("\\.");

    if (splits.length >= 3) {
      int major = Integer.parseInt(splits[0]);
      int minor = Integer.parseInt(splits[1]);
      int micro = Integer.parseInt(splits[2]);
      return new VersionInfo(major, minor, micro);
    }

    return new VersionInfo(0, 0, 0);
  }
  ...
}

Melakukan inisialisasi adaptor

Setelah aplikasi melakukan inisialisasi Google Mobile Ads SDK, initialize() akan dipanggil di semua adaptor yang dikonfigurasi untuk aplikasi dalam UI AdMob.

Argumen List<MediationConfiguration> memberikan informasi tentang semua penempatan yang dikonfigurasi untuk jaringan iklan Anda dalam UI AdMob. Gunakan informasi ini untuk melakukan inisialisasi SDK jaringan iklan. Setelah SDK jaringan iklan Anda diinisialisasi, laporkan inisialisasi yang berhasil atau gagal ke Google Mobile Ads SDK dengan memanggil metode onInitializationSucceeded() atau onInitializationFailed() pada InitializationCompleteCallbackargumen yang disediakan di panggilan initialize().

...
import com.google.android.gms.ads.mediation.InitializationCompleteCallback;
import com.google.android.gms.ads.mediation.MediationConfiguration;
...

public class SampleAdapter extends Adapter {
  ...
  @Override
  public void initialize(
      Context context,
      InitializationCompleteCallback initializationCompleteCallback,
      List<MediationConfiguration> mediationConfigurations) {
    if (context == null) {
      initializationCompleteCallback.onInitializationFailed(
          "Initialization Failed: Context is null.");
      return;
    }

    // The Sample SDK doesn't have an initialization method, so this example
    // immediately reports a success callback.
    initializationCompleteCallback.onInitializationSucceeded();
  }
  ...
}

Meminta iklan reward

Gunakan metode loadRewardedAd() untuk meminta iklan reward. Menyimpan referensi ke MediationAdLoadCallback, yang memungkinkan Anda melaporkan pemuatan iklan yang berhasil atau gagal ke Google Mobile Ads SDK.

Objek MediationRewardedAdCallback akan tersedia setelah onSuccess() dipanggil, yang nantinya akan Anda gunakan untuk menyampaikan peristiwa iklan lainnya seperti klik atau reward yang diberikan.

...
import com.google.ads.mediation.sample.sdk.SampleAdRequest;
import com.google.ads.mediation.sample.sdk.SampleRewardedAd;
import com.google.ads.mediation.sample.sdk.SampleRewardedAdListener;
import com.google.android.gms.ads.mediation.MediationAdLoadCallback;
import com.google.android.gms.ads.mediation.MediationRewardedAd;
import com.google.android.gms.ads.mediation.MediationRewardedAdCallback;
...

public class SampleAdapter extends Adapter, SampleRewardedAdListener
    implements MediationRewardedAd {
  ...

  /**
   * A MediationAdLoadCallback that handles any callback when a Sample rewarded
   * ad finishes loading.
   */
  private MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback> adLoadCallBack;

  /**
   * Represents a SampleRewardedAd.
   */
  private SampleRewardedAd sampleRewardedAd;

  /**
   * Used to forward rewarded video ad events to the Google Mobile Ads SDK..
   */
  private MediationRewardedAdCallback rewardedAdCallback;

  ...

  // Hold a reference to the MediationAdLoadCallback object to report ad load
  // events to the Google Mobile Ads SDK.
  @Override
  public void loadRewardedAd(
      MediationRewardedAdConfiguration mediationRewardedAdConfiguration,
      MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback>
          mediationAdLoadCallback) {
    adLoadCallBack = mediationAdLoadCallback;
    MediationRewardedAdConfiguration adConfiguration = mediationRewardedAdConfiguration;

    String adUnitId = adConfiguration.getServerParameters().getString(SAMPLE_AD_UNIT_KEY);

    sampleRewardedAd = new SampleRewardedAd(adUnitId);
    SampleAdRequest request = new SampleAdRequest();
    sampleRewardedAd.setListener(this);
    sampleRewardedAd.loadAd(request);
  }

  // Hold a reference to the MediationRewardedAdCallback object to report ad
  // lifecycle events to the Google Mobile Ads SDK.
  @Override
  public void onRewardedAdLoaded() {
    rewardedAdCallback = mediationAdLoadCallBack.onSuccess(this);
  }

  @Override
  public void onRewardedAdFailedToLoad(SampleErrorCode error) {
    mediationAdLoadCallBack.onFailure(error.toString());
  }
  ...
}

Menampilkan iklan

Google Mobile Ads SDK dapat memanggil metode showAd() adaptor Anda kapan saja setelah SDK diberi tahu tentang pemuatan iklan yang berhasil. Adaptor akan menampilkan iklan reward. Jika karena alasan apa pun iklan tidak dapat ditampilkan, panggil callback onAdFailedToShow().

public class SampleAdapter extends Adapter, SampleRewardedAdListener
    implements MediationRewardedAd {
  ...
  @Override
  public void showAd(Context context) {
    if (!(context instanceof Activity)) {
      rewardedAdCallback.onAdFailedToShow(
          "An activity context is required to show Sample rewarded ad.");
      return;
    }
    Activity activity = (Activity) context;

    if (!sampleRewardedAd.isAdAvailable()) {
      rewardedAdCallback.onAdFailedToShow("No ads to show.");
      return;
    }
    sampleRewardedAd.showAd(activity);
  }
  ...
}

Melaporkan peristiwa iklan ke Mobile Ads SDK

Setelah menampilkan iklan, adaptor harus melaporkan peristiwa siklus proses iklan sesuai dengan Google Mobile Ads SDK menggunakan objek MediationRewardedAdCallback yang diberikan pada waktu pemuatan iklan yang berhasil.

Biasanya, callback ini diteruskan dari metode callback yang diaktifkan oleh SDK jaringan iklan Anda. Contoh ini menerapkan callback SDK Sampel dan memetakannya ke callback yang tersedia di MediationRewardedAdCallback.

public class SampleAdapter extends Adapter, SampleRewardedAdListener
    implements MediationRewardedAd {
  ...
  @Override
  public void onAdRewarded(final String rewardType, final int amount) {
    RewardItem rewardItem =
        new RewardItem() {
          @Override
          public String getType() {
            return rewardType;
          }

          @Override
          public int getAmount() {
            return amount;
          }
        };
    rewardedAdCallback.onUserEarnedReward(rewardItem);
  }

  @Override
  public void onAdClicked() {
    rewardedAdCallback.reportAdClicked();
  }

  @Override
  public void onAdFullScreen() {
    rewardedAdCallback.onAdOpened();
    rewardedAdCallback.onVideoStart();
    rewardedAdCallback.reportAdImpression();
  }

  @Override
  public void onAdClosed() {
    rewardedAdCallback.onAdClosed();
  }

  @Override
  public void onAdCompleted() {
    rewardedAdCallback.onVideoComplete();
  }
  ...
}

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

Peristiwa iklan Deskripsi
onAdOpened() Memberi tahu Google Mobile Ads SDK bahwa iklan akan dibuka.
onVideoStart() Memberi tahu Google Mobile Ads SDK bahwa iklan reward mulai diputar.
reportAdImpression() Memberi tahu Google Mobile Ads SDK bahwa tayangan terjadi pada iklan.
onVideoComplete() Memberi tahu Google Mobile Ads SDK bahwa iklan reward selesai diputar.
onUserEarnedReward() Memberi tahu Google Mobile Ads SDK bahwa pengguna telah memperoleh reward.
reportAdClicked() Memberi tahu Google Mobile Ads SDK bahwa iklan telah diklik.
onAdClosed() Memberi tahu Google Mobile Ads SDK bahwa iklan telah ditutup.
onAdFailedToShow() Memberi tahu Google Mobile Ads SDK bahwa iklan gagal ditampilkan.