Triển khai Bộ chuyển đổi quảng cáo có tặng thưởng

Bộ chuyển đổi dàn xếp sẽ nhận các thông báo và yêu cầu từ SDK quảng cáo trên thiết bị di động của Google, đồng thời giao tiếp với SDK mạng của bên thứ ba để đáp ứng các yêu cầu đó.

Hướng dẫn này dành cho các mạng quảng cáo đang tìm cách tạo một bộ chuyển đổi dàn xếp quảng cáo có tặng thưởng cho tính năng Dàn xếp quảng cáo trên thiết bị di động của Google. Chúng tôi sử dụng SDK mẫu trong các đoạn mã dưới đây cho mục đích minh hoạ. Bạn có thể tìm thấy hoạt động triển khai đầy đủ của một bộ chuyển đổi được tạo cho SDK mẫu này trong dự án Dàn xếpAndroid của chúng tôi. Hướng dẫn này giải thích cách tạo bộ chuyển đổi.

Xác định tên lớp bộ chuyển đổi và tham số máy chủ

Những mạng quảng cáo được dàn xếp thông qua nền tảng dàn xếp AdMob thường yêu cầu một hoặc nhiều giá trị nhận dạng để nhận dạng một nhà xuất bản. Các giá trị nhận dạng này được biểu thị dưới dạng thông số máy chủ và được xác định khi định cấu hình mạng quảng cáo bên thứ ba cho hoạt động dàn xếp trong giao diện người dùng AdMob.

Trước khi phát triển bộ chuyển đổi dàn xếp, bạn phải cung cấp cho Google tên lớp của bộ chuyển đổi đó và các thông số bắt buộc khác để có quyền truy cập vào mạng quảng cáo của bạn.

Triển khai Lớp chuyển đổi

Bước đầu tiên là triển khai lớp trừu tượng Adapter (Bộ chuyển đổi):

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

public class SampleAdapter extends Adapter {
 ...
}

Thay đổi này đảm bảo rằng lớp của bạn triển khai một số phương thức được thảo luận dưới đây.

Số phiên bản báo cáo

Bộ chuyển đổi đó phải báo cáo cho SDK quảng cáo trên thiết bị di động của Google cả phiên bản của chính bộ chuyển đổi đó và phiên bản SDK của bên thứ ba. Các phiên bản được báo cáo bằng VersionInfo.

Bộ chuyển đổi nguồn mở và được tạo phiên bản của Google sử dụng lược đồ phiên bản bộ chuyển đổi 4 chữ số, nhưng VersionInfo chỉ cho phép 3 chữ số. Để giải quyết vấn đề này, bạn nên kết hợp 2 chữ số cuối vào phiên bản bản vá, như thể hiện dưới đây:

...
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);
  }
  ...
}

Khởi chạy bộ chuyển đổi

Khi một ứng dụng khởi chạy SDK Quảng cáo của Google trên thiết bị di động, initialize() sẽ được gọi trên tất cả các bộ chuyển đổi đã thiết lập cho ứng dụng đó trong giao diện người dùng AdMob.

Đối số List<MediationConfiguration> cung cấp thông tin về tất cả các vị trí được định cấu hình cho mạng quảng cáo của bạn trong giao diện người dùng AdMob. Hãy sử dụng thông tin này để khởi chạy SDK mạng quảng cáo của bạn. Sau khi SDK mạng quảng cáo được khởi chạy, hãy báo cáo việc khởi chạy thành công hoặc không thành công cho SDK Quảng cáo trên thiết bị di động của Google bằng cách gọi phương thức onInitializationSucceeded() hoặc onInitializationFailed() trên InitializationCompleteCallbackđối số đã cung cấp trong lệnh gọi 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();
  }
  ...
}

Yêu cầu quảng cáo có tặng thưởng

Sử dụng phương thức loadRewardedAd() để yêu cầu quảng cáo có tặng thưởng. Giữ một tệp tham chiếu đến MediationAdLoadCallback, cho phép bạn báo cáo một lượt tải quảng cáo thành công hoặc không thành công cho SDK quảng cáo trên thiết bị di động của Google.

Đối tượng MediationRewardedAdCallback sẽ có sẵn sau khi gọi onSuccess(). Sau đó, bạn sẽ sử dụng đối tượng này để chuyển tiếp các sự kiện quảng cáo khác như lượt nhấp hoặc phần thưởng được cấp.

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

Hiển thị quảng cáo

SDK quảng cáo trên thiết bị di động của Google có thể gọi phương thức showAd() của bộ chuyển đổi bất cứ lúc nào sau khi SDK được thông báo về việc tải quảng cáo thành công. Bộ chuyển đổi sẽ hiển thị quảng cáo có tặng thưởng. Nếu quảng cáo không thể hiển thị vì bất kỳ lý do nào, hãy thực hiện lệnh gọi lại 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);
  }
  ...
}

Báo cáo sự kiện quảng cáo cho SDK quảng cáo trên thiết bị di động

Sau khi hiển thị quảng cáo, bộ chuyển đổi sẽ báo cáo các sự kiện trong vòng đời quảng cáo phù hợp với SDK quảng cáo trên thiết bị di động của Google bằng cách sử dụng đối tượngMediationRewardedAdCallback được cung cấp tại thời điểm tải quảng cáo thành công.

Thông thường, các lệnh gọi lại này được chuyển tiếp từ các phương thức gọi lại do SDK mạng quảng cáo kích hoạt. Ví dụ này triển khai các lệnh gọi lại SDK mẫu và liên kết các lệnh gọi lại này với các lệnh gọi lại có trên 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();
  }
  ...
}

Dưới đây là thông tin chi tiết về các sự kiện quảng cáo cần được báo cáo cho SDK quảng cáo trên thiết bị di động của Google:

Sự kiện quảng cáo Nội dung mô tả
onAdOpened() Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng quảng cáo sẽ được mở.
onVideoStart() Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng quảng cáo có tặng thưởng đã bắt đầu phát.
reportAdImpression() Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng đã có một lượt hiển thị trên quảng cáo.
onVideoComplete() Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng quảng cáo có tặng thưởng đã phát xong.
onUserEarnedReward() Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng người dùng đã được thưởng.
reportAdClicked() Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng đã có lượt nhấp vào quảng cáo.
onAdClosed() Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng quảng cáo đã bị đóng.
onAdFailedToShow() Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng quảng cáo không hiển thị.