การใช้อะแดปเตอร์โฆษณาที่มีการให้รางวัล

อะแดปเตอร์สื่อกลางจะได้รับข้อความและคำขอจาก SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google และสื่อสารกับ SDK เครือข่ายของบุคคลที่สามเพื่อดำเนินการตามคำขอเหล่านั้น

คู่มือนี้มีไว้สำหรับเครือข่ายโฆษณาที่ต้องการสร้างอะแดปเตอร์สื่อกลางโฆษณาที่มีการให้รางวัลสำหรับสื่อกลางโฆษณาบนอุปกรณ์เคลื่อนที่ของ Google SDK ตัวอย่างจะใช้ในข้อมูลโค้ดด้านล่างเพื่อวัตถุประสงค์ในการสาธิต คุณสามารถดูการใช้งานอะแดปเตอร์อย่างสมบูรณ์ที่สร้างขึ้นสำหรับ SDK ตัวอย่างนี้ได้ในโปรเจ็กต์Androidสื่อกลาง คู่มือนี้จะอธิบายวิธีสร้างอะแดปเตอร์

กำหนดชื่อคลาสอะแดปเตอร์และพารามิเตอร์เซิร์ฟเวอร์

โดยทั่วไปแล้ว เครือข่ายโฆษณาที่ใช้สื่อกลางผ่านแพลตฟอร์มสื่อกลาง AdMob จะต้องใช้ตัวระบุอย่างน้อย 1 ตัวเพื่อระบุผู้เผยแพร่โฆษณา ตัวระบุเหล่านี้จะแสดงเป็นพารามิเตอร์ของเซิร์ฟเวอร์และได้รับการกำหนดเมื่อกำหนดค่าเครือข่ายโฆษณาบุคคลที่สามสำหรับสื่อกลางใน UI ของ AdMob

ก่อนที่จะพัฒนาอะแดปเตอร์สื่อกลาง คุณต้องแจ้งชื่อคลาสอะแดปเตอร์และพารามิเตอร์ที่จำเป็นอื่นๆ แก่ Google เพื่อให้มีสิทธิ์เข้าถึงเครือข่ายโฆษณา

ติดตั้งใช้งานคลาสอะแดปเตอร์

ขั้นตอนแรกคือการใช้คลาสนามธรรมอะแดปเตอร์ ดังนี้

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

public class SampleAdapter extends Adapter {
 ...
}

การเปลี่ยนแปลงนี้ช่วยให้ชั้นเรียนของคุณใช้วิธีการต่างๆ ที่อธิบายไว้ด้านล่าง

รายงานหมายเลขเวอร์ชัน

อะแดปเตอร์ต้องรายงานไปยัง Google Mobile Ads SDK ทั้งเวอร์ชันของตัวอะแดปเตอร์และเวอร์ชันของ SDK ของบุคคลที่สาม ระบบจะรายงานเวอร์ชันโดยใช้ VersionInfo

อะแดปเตอร์แบบโอเพนซอร์สและที่มีการกำหนดเวอร์ชันของ Google ใช้รูปแบบเวอร์ชันอะแดปเตอร์ 4 หลัก แต่ VersionInfo อนุญาตให้ใช้ได้เพียง 3 หลักเท่านั้น เพื่อแก้ไขปัญหานี้ ขอแนะนำให้รวมตัวเลข 2 หลักสุดท้ายไว้ในเวอร์ชันแพตช์ตามที่แสดงด้านล่าง

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

เริ่มต้นอะแดปเตอร์

ระหว่างที่แอปเริ่มต้น SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google จะมีการเรียกใช้ initialize() ในอะแดปเตอร์ทั้งหมดที่กำหนดค่าไว้สำหรับแอปภายใน UI ของ AdMob

อาร์กิวเมนต์ List<MediationConfiguration> จะให้ข้อมูลเกี่ยวกับตำแหน่งทั้งหมดที่กำหนดค่าไว้สำหรับเครือข่ายโฆษณาของคุณภายใน UI ของ AdMob ใช้ข้อมูลนี้เพื่อเริ่มต้น SDK เครือข่ายโฆษณาของคุณ เมื่อเริ่มต้น SDK เครือข่ายโฆษณาแล้ว ให้รายงานการเริ่มต้นที่สำเร็จหรือล้มเหลวไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google โดยเรียกใช้เมธอด onInitializationSucceeded() หรือ onInitializationFailed() ในอาร์กิวเมนต์InitializationCompleteCallbackที่ระบุไว้ในการเรียก 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();
  }
  ...
}

ขอโฆษณาที่มีการให้รางวัล

ใช้เมธอด loadRewardedAd() เพื่อขอโฆษณาที่มีการให้รางวัล เก็บการอ้างอิงไปยัง MediationAdLoadCallback ซึ่งให้คุณรายงานการโหลดโฆษณาที่สําเร็จหรือล้มเหลวไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ได้

ออบเจ็กต์ MediationRewardedAdCallback จะพร้อมใช้งานเมื่อมีการเรียกใช้ onSuccess() ซึ่งคุณจะใช้ในภายหลังเพื่อส่งต่อเหตุการณ์โฆษณาอื่นๆ เช่น การคลิกหรือรางวัลที่ได้รับ

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

แสดงโฆษณา

SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google อาจเรียกเมธอด showAd() ของอะแดปเตอร์ได้ทุกเมื่อหลังจากที่ SDK ได้รับแจ้งว่ามีการโหลดโฆษณาสำเร็จ อะแดปเตอร์ควรจะแสดง โฆษณาที่มีการให้รางวัล หากโฆษณาไม่แสดงไม่ว่าจะด้วยเหตุผลใดก็ตาม ให้โทรหา 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);
  }
  ...
}

รายงานเหตุการณ์โฆษณาไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่

หลังจากแสดงโฆษณาแล้ว อะแดปเตอร์ควรรายงานเหตุการณ์ในวงจรโฆษณาตามความเหมาะสมกับ SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google โดยใช้ออบเจ็กต์MediationRewardedAdCallbackที่ให้ไว้เมื่อโหลดโฆษณาสำเร็จ

โดยปกติแล้ว โค้ดเรียกกลับเหล่านี้จะส่งต่อจากเมธอดโค้ดเรียกกลับที่ SDK เครือข่ายโฆษณาเริ่มทำงาน ตัวอย่างนี้ใช้โค้ดเรียกกลับของ SDK ตัวอย่างและแมปกับโค้ดเรียกกลับที่มีอยู่ใน 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();
  }
  ...
}

รายละเอียดเหตุการณ์โฆษณาที่ควรรายงานไปยัง Google Mobile Ads SDK มีดังนี้

เหตุการณ์โฆษณา คำอธิบาย
onAdOpened() แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาจะเปิดขึ้น
onVideoStart() แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาที่มีการให้รางวัลเริ่มเล่น
reportAdImpression() แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่ามีการแสดงผลเกิดขึ้นในโฆษณา
onVideoComplete() แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาที่มีการให้รางวัลเล่นเสร็จแล้ว
onUserEarnedReward() แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าผู้ใช้ได้รับรางวัลแล้ว
reportAdClicked() แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่ามีการคลิกโฆษณา
onAdClosed() แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าปิดโฆษณาดังกล่าวแล้ว
onAdFailedToShow() แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาแสดงไม่สำเร็จ