อะแดปเตอร์สื่อกลางจะได้รับข้อความและคำขอจาก 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 ว่าโฆษณาแสดงไม่สำเร็จ |