คู่มือนี้มีไว้สําหรับเครือข่ายโฆษณาที่ต้องการสร้างอะแดปเตอร์สื่อกลาง หากคุณเป็นผู้เผยแพร่โฆษณา โปรดดู วิธีการเป็นสื่อกลางของผู้เผยแพร่โฆษณา
อะแดปเตอร์เครือข่ายโฆษณาคือชั้นของการสื่อสารระหว่างเครือข่ายโฆษณาของคุณกับสื่อกลางโฆษณาในอุปกรณ์เคลื่อนที่ของ Google
อะแดปเตอร์มีหน้าที่รับผิดชอบในการติดตั้งใช้งาน
MediationBannerAdapter
เพื่อรองรับโฆษณาแบนเนอร์ และ
MediationInterstitialAdapter
เพื่อรองรับโฆษณาคั่นระหว่างหน้า และยังต้องเรียกใช้การเรียกกลับใน
MediationBannerListener
และ
MediationInterstitialListener
ในเวลาที่เหมาะสมเพื่อแจ้งสื่อกลางโฆษณาในอุปกรณ์เคลื่อนที่ของ Google เกี่ยวกับเหตุการณ์เหล่านี้ ซึ่งสามารถส่งต่อไปยังนักพัฒนาแอปได้เช่นกัน
ตัวอย่างเครือข่ายโฆษณา
คู่มือนี้สาธิตวิธีสร้างอะแดปเตอร์สำหรับเครือข่ายโฆษณาตัวอย่าง เครือข่ายโฆษณาตัวอย่างประกอบด้วยคลาสต่อไปนี้ซึ่งเป็นตัวแทนของคลาสที่ให้บริการโดยเครือข่ายโฆษณาส่วนใหญ่
class SampleAdView {
public SampleAdView(Context context);
public void setSize(SampleAdSize size);
public void setAdUnit(String sampleAdUnit);
public void setAdListener(SampleAdListener listener);
public void fetchAd(SampleAdRequest request);
public void destroy();
}
class SampleAdSize {
public SampleAdSize(int width, int height);
public int getWidth();
public int getHeight();
}
class SampleAdRequest {
public SampleAdRequest();
public void setKeywords(Set<String> keywords);
public void setTestMode(boolean useTesting);
}
class SampleAdListener {
public void onAdFetchSucceeded();
public void onAdFetchFailed(SampleErrorCode code);
public void onAdFullScreen();
public void onAdClosed();
}
enum SampleErrorCode {
UNKNOWN,
BAD_REQUEST,
NETWORK_ERROR,
NO_INVENTORY
}
class SampleInterstitial {
public SampleInterstitial(Context context);
public void setAdUnit(String sampleAdUnit);
public void setAdListener(SampleAdListener listener);
public void fetchAd(SampleAdRequest request);
public void show();
public void destroy();
}
ดูข้อมูลเพิ่มเติมเกี่ยวกับคลาสเหล่านี้ได้ที่การใช้งาน SDK ที่สมบูรณ์
ใช้อะแดปเตอร์แบนเนอร์
หากต้องการใช้อะแดปเตอร์ที่รองรับโฆษณาแบนเนอร์ ให้สร้างคลาสที่ใช้งาน MediationBannerAdapter
public class SampleAdapter implements MediationBannerAdapter {
@Override
public void requestBannerAd(
Context context,
MediationBannerListener listener,
Bundle serverParameters,
AdSize adSize,
MediationAdRequest mediationAdRequest,
Bundle mediationExtras) {}
@Override
public View getBannerView() {}
@Override
public void onDestroy() {}
@Override
public void onPause() {}
@Override
public void onResume() {}
}
ก่อนที่จะลงลึกในการติดตั้งใช้งาน MediationBannerAdapter
เรามาพูดถึงพารามิเตอร์ของเซิร์ฟเวอร์ ส่วนเสริมสื่อกลาง และวิธีส่งค่าเหล่านี้ไปยังอะแดปเตอร์กัน
พารามิเตอร์เซิร์ฟเวอร์
เครือข่ายโฆษณาอาจต้องใช้ตัวระบุบางอย่างเพื่อระบุผู้เผยแพร่โฆษณา ตัวอย่างเช่น เครือข่ายโฆษณาตัวอย่างต้องใช้เพียงหน่วยโฆษณา 1 หน่วย เป็นต้น พารามิเตอร์ที่จำเป็นเหล่านี้จะมีอยู่ในแพ็กเกจ serverParameters
ภายใน requestBannerAd()
ระหว่างการพัฒนา คุณจะสันนิษฐานได้ว่าจะมีการป้อนข้อมูลคีย์ที่คุณต้องการในแพ็กเกจแล้ว ดังนี้
private static final String SAMPLE_AD_UNIT_KEY = "ad_unit";
@Override
public void requestBannerAd(
Context context,
MediationBannerListener listener,
Bundle serverParameters,
AdSize adSize,
MediationAdRequest mediationAdRequest,
Bundle mediationExtras) {
String adUnit = serverParameters.getString(SAMPLE_AD_UNIT_KEY);
...
}
AdMob จะส่งแบบสอบถามให้คุณเพื่อสอบถามเกี่ยวกับพารามิเตอร์ของเซิร์ฟเวอร์ที่คุณจำเป็นต้องใช้จากผู้เผยแพร่โฆษณาเพื่อขอและแสดงโฆษณา AdMob จะใช้อินพุตนั้น ในการกำหนดค่าเครือข่ายใน UI ของ AdMob ภาพหน้าจอด้านล่างแสดงให้เห็นว่า APID จำเป็นต้องมีสำหรับ Millennial Media และรหัสแอปสำหรับ InMobi
AdMob จะใช้ข้อมูลนี้เพื่อสร้างแพ็กเกจ serverParameters
เมื่อยืนยันอะแดปเตอร์
ดูข้อมูลเพิ่มเติมว่าผู้เผยแพร่โฆษณาจะกำหนดค่าเครือข่ายโฆษณาสื่อกลางอย่างไรได้จากบทความนี้
พารามิเตอร์การกำหนดเป้าหมายเพิ่มเติม
MediationAdRequest
ประกอบด้วยข้อมูลการกําหนดเป้าหมายทั่วไปบางส่วนที่คุณใช้เพื่อการกำหนดเป้าหมายโฆษณาได้ เช่น
ส่วนเสริมสำหรับสื่อกลาง
หากเครือข่ายโฆษณารองรับข้อมูลการกำหนดเป้าหมายที่ MediationAdRequest
ไม่ได้ให้ไว้ นักพัฒนาแอปสามารถส่งแพ็กเกจ mediationExtras
ไปยังเครือข่ายของคุณโดยเฉพาะได้
สื่อกลางจะแสดงตัวอย่าง
วิธีส่งส่วนเสริมสื่อกลาง
คุณสามารถระบุคลาสเครื่องมือสร้างแพ็กเกจในอะแดปเตอร์เพื่อให้นักพัฒนาแอปเลือกส่งข้อมูลนี้ได้ง่ายขึ้น สมมติว่าเครือข่ายของคุณสนับสนุน การส่งมูลค่ารายได้ คุณสามารถเพิ่มคลาสเครื่องมือสร้างในอะแดปเตอร์ที่กำหนดรายได้ ดังนี้
public static final class BundleBuilder {
private int income;
public BundleBuilder setIncome(int income) {
this.income = income;
return this;
}
public Bundle build() {
Bundle bundle = new Bundle();
bundle.putInt("income", income);
return bundle;
}
}
คลาสนี้มี API ที่ชัดเจนเพื่อให้นักพัฒนาซอฟต์แวร์สร้างแพ็กเกจสำหรับเครือข่ายของคุณ ดังนี้
Bundle sampleAdapterBundle =
new SampleAdapter.BundleBuilder().setIncome(100000).build();
requestBannerAd()
ตอนนี้คุณได้รู้จักพารามิเตอร์เซิร์ฟเวอร์และส่วนขยายสื่อกลางแล้ว
เราสามารถใช้พารามิเตอร์ดังกล่าวเพื่อสร้าง MediationBannerAdapter
ได้
ระบบจะเรียกใช้เมธอด requestBannerAd()
ทันทีหลังจากที่สร้างอินสแตนซ์อะแดปเตอร์แล้ว ซึ่งเป็นส่วนที่คุณควรสร้างมุมมองโฆษณาและส่งคำขอโฆษณาแบนเนอร์
การติดตั้งใช้งาน requestBannerAd()
สำหรับเครือข่ายโฆษณาตัวอย่างจะมีลักษณะดังนี้
public class SampleAdMobAdapter implements MediationBannerAdapter {
private static final String SAMPLE_AD_UNIT_KEY = "ad_unit";
private SampleAdView sampleAdView;
@Override
public void requestBannerAd(
Context context, // May be an application context.
MediationBannerListener listener,
Bundle serverParameters,
AdSize adSize,
MediationAdRequest mediationAdRequest,
Bundle mediationExtras) {
sampleAdView = new SampleAdView(context);
if (serverParameters.containsKey(SAMPLE_AD_UNIT_KEY)) {
sampleAdView.setAdUnit(serverParameters.getString(SAMPLE_AD_UNIT_KEY));
} else {
listener.onAdFailedToLoad(this, AdRequest.ERROR_CODE_INVALID_REQUEST);
}
sampleAdView.setSize(
new SampleAdSize(adSize.getWidth(),adSize.getHeight()));
sampleAdView.setAdListener(
new SampleBannerEventForwarder(listener, this));
SampleAdRequest request = new SampleAdRequest();
request.setTestMode(mediationAdRequest.isTesting());
request.setKeywords(mediationAdRequest.getKeywords());
sampleAdView.fetchAd(request);
}
}
อย่าคิดไปเองว่าพารามิเตอร์บริบทเป็นประเภท Activity
สื่อกลางโฆษณาในอุปกรณ์เคลื่อนที่ของ Google อาจส่งต่อบริบทแอปพลิเคชันไปยังอะแดปเตอร์ ทั้งนี้ขึ้นอยู่กับการติดตั้งใช้งานของผู้เผยแพร่โฆษณา หากอะแดปเตอร์จัดการบริบทแอปพลิเคชันไม่ได้ ขอแนะนำให้เรียกใช้ onAdFailedToLoad()
ที่มีรหัสข้อผิดพลาด AdRequest.ERROR_CODE_INVALID_REQUEST
โค้ดเรียกกลับ MediationBannerListener
คุณควรบันทึก MediationBannerListener
ที่ให้ไว้ใน requestBannerAd()
เพื่อให้ส่งต่อเหตุการณ์โฆษณากลับไปยังสื่อกลางโฆษณาในอุปกรณ์เคลื่อนที่ของ Google ได้ การเรียกกลับแต่ละรายการจะต้องเรียกใช้ในเวลาที่เหมาะสมในวงจรของโฆษณา
วิธีการ | เวลาที่จะโทร |
---|---|
onAdLoaded() |
ส่งคำขอแบนเนอร์สำเร็จแล้ว |
onAdFailedToLoad() |
คำขอแบนเนอร์ล้มเหลว |
onAdClicked() |
คลิกแบนเนอร์แล้ว |
onAdOpened() |
แบนเนอร์จะแสดงผลในมุมมองเต็มหน้าจอ |
onAdClosed() |
ผู้ใช้กลับไปที่แอปหลังจากคลิกแบนเนอร์ |
onAdLeftApplication() |
แบนเนอร์ทำให้ผู้ใช้ออกจากแอป |
อะแดปเตอร์เครือข่ายโฆษณาตัวอย่างจะสร้างคลาสชื่อ SampleBannerEventForwarder
เพื่อจัดการการส่งต่อเหตุการณ์ ดังนี้
public class SampleBannerEventForwarder extends SampleAdListener {
private MediationBannerListener mediationListener;
private SampleAdapter adapter;
public SampleBannerEventForwarder(
MediationBannerListener listener, SampleAdapter adapter) {
this.mediationListener = listener;
this.adapter = adapter;
}
@Override
public void onAdFetchSucceeded() {
mediationListener.onAdLoaded(adapter);
}
@Override
public void onAdFetchFailed(SampleErrorCode errorCode) {
switch(errorCode) {
case UNKNOWN:
mediationListener.onAdFailedToLoad(adapter, AdRequest.ERROR_CODE_INTERNAL_ERROR);
break;
case BAD_REQUEST:
mediationListener.onAdFailedToLoad(adapter, AdRequest.ERROR_CODE_INVALID_REQUEST);
break;
case NETWORK_ERROR:
mediationListener.onAdFailedToLoad(adapter, AdRequest.ERROR_CODE_NETWORK_ERROR);
break;
case NO_INVENTORY:
mediationListener.onAdFailedToLoad(adapter, AdRequest.ERROR_CODE_NO_FILL);
break;
}
}
@Override
public void onAdFullScreen() {
mediationListener.onAdClicked(adapter);
mediationListener.onAdOpened(adapter);
mediationListener.onAdLeftApplication(adapter);
}
@Override
public void onAdClosed() {
mediationListener.onAdClosed(adapter);
}
}
สังเกตวิธีที่อะแดปเตอร์เครือข่ายโฆษณาตัวอย่างส่ง onAdClicked
, onAdOpened
และ onAdLeftApplication
ในโค้ดเรียกกลับเดียวกัน แม้ว่าการเรียกกลับสำหรับเครือข่ายของคุณอาจไม่ตรงกับการเรียกกลับที่โฆษณาบนอุปกรณ์เคลื่อนที่ของ Google กำหนดไว้ แต่อะแดปเตอร์จะต้องรับผิดชอบในการแมปที่สมเหตุสมผล
getBannerView
เมื่อคุณเรียกใช้
MediationBannerListener.onAdLoaded()
สื่อกลางจะเรียกใช้
getBannerView()
เพื่อให้มุมมองแบนเนอร์ของเครือข่ายโฆษณาแสดงบนหน้าจอ
เพียงแค่แสดงมุมมองแบนเนอร์ที่คุณสร้างขึ้นใน requestBannerAd()
:
@Override
public View getBannerView() {
return sampleAdView;
}
เหตุการณ์ในวงจรกิจกรรม
สื่อกลางจะแจ้งอะแดปเตอร์เกี่ยวกับเหตุการณ์กิจกรรม onPause()
และ onResume()
หากนักพัฒนาแอปแจ้งสื่อกลางเกี่ยวกับเหตุการณ์ดังกล่าว ดำเนินการหยุดแบนเนอร์ชั่วคราวและกลับมาใช้งานต่อตามขั้นตอนต่อไปนี้
@Override
public void onPause() {
}
@Override
public void onResume() {
}
เครือข่ายโฆษณาตัวอย่างจะไม่รวมการหยุดชั่วคราวหรือการโทรต่อ ดังนั้นจึงมีการติดตั้งใช้งานที่ว่างเปล่า
สื่อกลางจะพยายามเรียกใช้ onDestroy()
เมื่ออะแดปเตอร์กำลังจะทำลาย ดำเนินการทำความสะอาดที่จำเป็นที่นี่
@Override
public void onDestroy() {
if (sampleAdView != null) {
sampleAdView.destroy();
}
}
แบนเนอร์อัจฉริยะ
SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google รองรับขนาดโฆษณาแบนเนอร์อัจฉริยะ ซึ่งมีความกว้างเต็ม และความสูงเปลี่ยนแปลงได้โดยขึ้นอยู่กับขนาดของอุปกรณ์
หากต้องการได้ขนาดโฆษณาของแบนเนอร์อัจฉริยะอย่างถูกต้อง อะแดปเตอร์ของคุณควรใช้ adSize.getWidthInPixels(context)
แทนความกว้าง และใช้ adSize.getHeightInPixels(context)
แทน adSize.getHeight()
เพื่อหาความสูง จากนั้นค่าควรหารด้วยความหนาแน่นของอุปกรณ์ ดังนี้
int widthInPixels = adSize.getWidthInPixels(context);
int heightInPixels = adSize.getHeightInPixels(context);
DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
int widthInDp = Math.round(widthInPixels / displayMetrics.density);
int heightInDp = Math.round(heightInPixels / displayMetrics.density);
จากนั้นคุณจะใช้ widthInDp
และ heightInDp
เป็นขนาดเมื่อสร้างคำขอโฆษณาได้
เท่านี้ก็เรียบร้อย ตอนนี้คุณมีอะแดปเตอร์สื่อกลางสำหรับแบนเนอร์ที่ใช้งานได้แล้ว เพื่อเป็นข้อมูลอ้างอิง คุณสามารถดูการติดตั้งใช้งาน SampleAdapter โดยสมบูรณ์ได้ที่นี่
ใช้อะแดปเตอร์คั่นระหว่างหน้า
การใช้งานอะแดปเตอร์สำหรับโฆษณาคั่นระหว่างหน้าจะคล้ายกับโฆษณาแบนเนอร์
หากต้องการใช้อะแดปเตอร์ที่รองรับโฆษณาคั่นระหว่างหน้า ให้สร้างคลาสที่มีการใช้งาน MediationInterstitialAdapter
โดยทำดังนี้
public class SampleAdapter implements MediationInterstitialAdapter {
@Override
public void requestInterstitialAd(
Context context,
MediationInterstitialListener listener,
Bundle serverParameters,
MediationAdRequest mediationAdRequest,
Bundle mediationExtras) {}
@Override
public View showInterstitial() {}
@Override
public void onDestroy() {}
@Override
public void onPause() {}
@Override
public void onResume() {}
}
หากอะแดปเตอร์ของคุณรองรับแบนเนอร์ด้วย คุณสามารถใช้คลาสอะแดปเตอร์เดียวกันเพื่อใช้งานอินเทอร์เฟซทั้ง 2 แบบ
มาทำความคุ้นเคยกับพารามิเตอร์เซิร์ฟเวอร์และส่วนเสริมของสื่อกลางก่อนเริ่มใช้งาน MediationInterstitialAdapter
พารามิเตอร์เซิร์ฟเวอร์ (โฆษณาคั่นระหว่างหน้า)
ดูส่วนพารามิเตอร์เซิร์ฟเวอร์แบนเนอร์
พารามิเตอร์การกำหนดเป้าหมายเพิ่มเติม (โฆษณาคั่นระหว่างหน้า)
ดูส่วนพารามิเตอร์การกำหนดเป้าหมายเพิ่มเติมของแบนเนอร์
ส่วนเสริมสื่อกลาง (โฆษณาคั่นระหว่างหน้า)
ดูส่วนส่วนเสริมสื่อกลางแบนเนอร์
requestInterstitialAd
ระบบจะเรียกใช้เมธอด requestInterstitialAd()
ทันทีหลังจากที่สร้างอินสแตนซ์อะแดปเตอร์แล้ว ซึ่งเป็นขั้นตอนที่คุณควรสร้างโฆษณาคั่นระหว่างหน้าและส่งคำขอโฆษณาคั่นระหว่างหน้า
การใช้ requestInterstitialAd()
สำหรับเครือข่ายโฆษณาตัวอย่างจะมีลักษณะดังนี้
public class SampleAdapter implements MediationBannerAdapter {
private static final String SAMPLE_AD_UNIT_KEY = "ad_unit";
private SampleInterstitial sampleInterstitial;
@Override
public void requestInterstitialAd(
Context context, // May be an application context.
MediationInterstitialListener listener,
Bundle serverParameters,
MediationAdRequest mediationAdRequest,
Bundle mediationExtras) {
sampleInterstitial = new SampleInterstitial(context);
if (serverParameters.containsKey(SAMPLE_AD_UNIT_KEY)) {
sampleInterstitial.setAdUnit(serverParameters.getString(SAMPLE_AD_UNIT_KEY));
} else {
listener.onAdFailedToLoad(this, AdRequest.ERROR_CODE_INVALID_REQUEST);
}
sampleInterstitial.setAdListener(
new SampleInterstitialEventForwarder(listener, this));
// Make an ad request.
SampleAdRequest request = new SampleAdRequest();
request.setTestMode(mediationAdRequest.isTesting());
request.setKeywords(mediationAdRequest.getKeywords());
sampleInterstitial.fetchAd(request);
}
}
อย่าคิดไปเองว่าพารามิเตอร์บริบทเป็นประเภท "กิจกรรม" สื่อกลางโฆษณาในอุปกรณ์เคลื่อนที่ของ Google จะส่งต่อบริบทที่นักพัฒนาแอปส่งให้ และอาจส่งต่อบริบทของแอปพลิเคชันได้ หากอะแดปเตอร์จัดการบริบทแอปพลิเคชันไม่ได้ ขอแนะนำให้เรียกใช้ onAdFailedToLoad
ที่มีรหัสข้อผิดพลาด AdRequest.ERROR_CODE_INVALID_REQUEST
โค้ดเรียกกลับ MediationInterstitialListener
คุณควรบันทึก MediationInterstitialListener
ที่คุณได้รับใน requestInterstitialAd
เพื่อให้ส่งต่อเหตุการณ์โฆษณากลับไปยังสื่อกลางโฆษณาในอุปกรณ์เคลื่อนที่ของ Google ได้
ต้องมีการเรียกใช้โค้ดเรียกกลับแต่ละรายการในเวลาที่เหมาะสมในวงจรของโฆษณา
วิธีการ | เวลาที่จะโทร |
---|---|
onAdLoaded | ส่งคำขอคั่นระหว่างหน้าสำเร็จแล้ว |
onAdFailedToLoad | ส่งคำขอคั่นระหว่างหน้าไม่สำเร็จ |
onAdOpened | กำลังแสดงโฆษณาคั่นระหว่างหน้า |
onAdClosed | โฆษณาคั่นระหว่างหน้าปิดอยู่ |
onAdLeftApplication | โฆษณาคั่นระหว่างหน้าจะทำให้ผู้ใช้ออกจากแอป |
showInterstitial
เมื่อเรียกใช้
MediationInterstitialListener.onAdLoaded()
คุณควรรอแสดงโฆษณาคั่นระหว่างหน้าจนกว่าจะมีการเรียก showInterstitial()
นักพัฒนาแอปเป็นผู้ตัดสินใจว่าจะแสดงโฆษณาคั่นระหว่างหน้าเมื่อใด ซึ่งอาจใช้เวลาหลายนาทีหลังจากที่มีการขอโฆษณา
การติดตั้งใช้งานสำหรับ showInterstitial()
ค่อนข้างตรงไปตรงมา เพียงแสดงออบเจ็กต์คั่นระหว่างหน้า
@Override
public void showInterstitial() {
sampleInterstitial.show();
}
เหตุการณ์ในวงจรกิจกรรม (โฆษณาคั่นระหว่างหน้า)
โปรดดูส่วนเหตุการณ์ในวงจรกิจกรรมแบนเนอร์
หลังจากใช้เหตุการณ์ในวงจรกิจกรรม อะแดปเตอร์สื่อกลางก็พร้อมที่จะจัดการโฆษณาคั่นระหว่างหน้าแล้ว เพื่อเป็นข้อมูลอ้างอิง คุณสามารถดูการติดตั้งใช้งาน SampleAdapter ที่สมบูรณ์ได้ที่นี่
คำถามที่พบบ่อย
- ฉันจะทำอย่างไรถ้าอะแดปเตอร์รองรับเฉพาะโฆษณาแบนเนอร์หรือโฆษณาคั่นระหว่างหน้า แต่ไม่ใช่ทั้ง 2 อย่าง
-
หากอะแดปเตอร์รองรับเฉพาะแบนเนอร์ คุณแค่ต้องใช้อินเทอร์เฟซ
MediationBannerAdapter
เท่านั้น หากอะแดปเตอร์รองรับเฉพาะโฆษณาคั่นระหว่างหน้า คุณก็แค่ใช้อินเทอร์เฟซMediationInterstitialAdapter
เท่านั้น