ข้อกำหนดเบื้องต้น
ทําการตั้งค่าเหตุการณ์ที่กําหนดเองให้เสร็จสมบูรณ์
ขอโฆษณาเนทีฟ
เมื่อระบบเข้าถึงรายการโฆษณาของเหตุการณ์ที่กําหนดเองในเชนสื่อกลางตามลำดับขั้น
มีการเรียกใช้เมธอด loadNativeAd()
ในชื่อชั้นเรียนที่คุณระบุเมื่อ
การสร้างฟิลด์ที่กำหนดเอง
กิจกรรม ในกรณีนี้
เมธอดนั้นอยู่ใน SampleCustomEvent
ซึ่งจะเรียกใช้
เมธอด loadNativeAd()
ใน SampleNativeCustomEventLoader
หากต้องการขอโฆษณาเนทีฟ ให้สร้างหรือแก้ไขคลาสที่ขยาย Adapter
เพื่อติดตั้งใช้งาน loadNativeAd()
หากมีคลาสที่ขยาย Adapter
อยู่แล้ว ให้ติดตั้งใช้งาน loadNativeAd()
ในนั้น นอกจากนี้ ให้สร้างคลาสใหม่เพื่อติดตั้งใช้งาน
UnifiedNativeAdMapper
ในตัวอย่างเหตุการณ์ที่กำหนดเอง
SampleCustomEvent
ขยายคลาส Adapter
จากนั้นมอบสิทธิ์ไปยัง
SampleNativeCustomEventLoader
Java
package com.google.ads.mediation.sample.customevent; import com.google.android.gms.ads.mediation.Adapter; import com.google.android.gms.ads.mediation.MediationAdConfiguration; import com.google.android.gms.ads.mediation.MediationAdLoadCallback; import com.google.android.gms.ads.mediation.MediationNativeAdCallback; ... public class SampleCustomEvent extends Adapter { private SampleNativeCustomEventLoader nativeLoader; @Override public void loadNativeAd( @NonNull MediationNativeAdConfiguration adConfiguration, @NonNull MediationAdLoadCallback<UnifiedNativeAdMapper, MediationNativeAdCallback> callback) { nativeLoader = new SampleNativeCustomEventLoader(adConfiguration, callback); nativeLoader.loadAd(); } }
SampleNativeCustomEventLoader
รับผิดชอบงานต่อไปนี้
กำลังโหลดโฆษณาเนทีฟ
กำลังนำชั้นเรียน
UnifiedNativeAdMapper
ไปใช้การรับและการรายงาน Callback ของเหตุการณ์โฆษณาไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google
พารามิเตอร์ที่ไม่บังคับซึ่งกําหนดไว้ใน UI ของ AdMob จะรวมอยู่ในการกําหนดค่าโฆษณา พารามิเตอร์นี้สามารถเข้าถึงได้
adConfiguration.getServerParameters().getString(MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD)
ปกติแล้วพารามิเตอร์นี้จะเป็นตัวระบุหน่วยโฆษณาที่ SDK เครือข่ายโฆษณา
ต้องการเมื่อเริ่มต้นออบเจ็กต์โฆษณา
Java
package com.google.ads.mediation.sample.customevent; import com.google.android.gms.ads.mediation.Adapter; import com.google.android.gms.ads.mediation.MediationNativeAdConfiguration; import com.google.android.gms.ads.mediation.MediationAdLoadCallback; import com.google.android.gms.ads.mediation.MediationNativeAdCallback; ... public class SampleNativeCustomEventLoader extends SampleNativeAdListener { /** Configuration for requesting the native ad from the third-party network. */ private final MediationNativeAdConfiguration mediationNativeAdConfiguration; /** Callback that fires on loading success or failure. */ private final MediationAdLoadCallback<UnifiedNativeAdMapper, MediationNativeAdCallback> mediationAdLoadCallback; /** Callback for native ad events. */ private MediationNativeAdCallback nativeAdCallback; /** Constructor */ public SampleNativeCustomEventLoader( @NonNull MediationNativeAdConfiguration mediationNativeAdConfiguration, @NonNull MediationAdLoadCallback<MediationNativeAd, MediationNativeAdCallback> mediationAdLoadCallback) { this.mediationNativeAdConfiguration = mediationNativeAdConfiguration; this.mediationAdLoadCallback = mediationAdLoadCallback; } /** Loads the native ad from the third-party ad network. */ public void loadAd() { // Create one of the Sample SDK's ad loaders to request ads. Log.i("NativeCustomEvent", "Begin loading native ad."); SampleNativeAdLoader loader = new SampleNativeAdLoader(mediationNativeAdConfiguration.getContext()); // All custom events have a server parameter named "parameter" that returns // back the parameter entered into the UI when defining the custom event. String serverParameter = mediationNativeAdConfiguration .getServerParameters() .getString(MediationConfiguration .CUSTOM_EVENT_SERVER_PARAMETER_FIELD); Log.d("NativeCustomEvent", "Received server parameter."); loader.setAdUnit(serverParameter); // Create a native request to give to the SampleNativeAdLoader. SampleNativeAdRequest request = new SampleNativeAdRequest(); NativeAdOptions options = mediationNativeAdConfiguration.getNativeAdOptions(); if (options != null) { // If the NativeAdOptions' shouldReturnUrlsForImageAssets is true, the adapter should // send just the URLs for the images. request.setShouldDownloadImages(!options.shouldReturnUrlsForImageAssets()); request.setShouldDownloadMultipleImages(options.shouldRequestMultipleImages()); switch (options.getMediaAspectRatio()) { case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_LANDSCAPE: request.setPreferredImageOrientation(SampleNativeAdRequest.IMAGE_ORIENTATION_LANDSCAPE); break; case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_PORTRAIT: request.setPreferredImageOrientation(SampleNativeAdRequest.IMAGE_ORIENTATION_PORTRAIT); break; case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_SQUARE: case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_ANY: case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_UNKNOWN: default: request.setPreferredImageOrientation(SampleNativeAdRequest.IMAGE_ORIENTATION_ANY); } } loader.setNativeAdListener(this); // Begin a request. Log.i("NativeCustomEvent", "Start fetching native ad."); loader.fetchAd(request); } }
ขึ้นอยู่กับว่าระบบดึงข้อมูลโฆษณาสำเร็จหรือพบข้อผิดพลาด
จะเรียก
onSuccess()
หรือ
onFailure()
onSuccess()
เรียกโดยส่งอินสแตนซ์ของคลาสที่ implements
MediationNativeAd
โดยปกติแล้ว วิธีการเหล่านี้จะใช้ภายใน Callback จาก
SDK ของบุคคลที่สามที่อะแดปเตอร์ของคุณใช้ สำหรับตัวอย่างนี้ SDK ตัวอย่าง
มี SampleAdListener
ที่มี Callback ที่เกี่ยวข้อง:
Java
@Override public void onNativeAdFetched(SampleNativeAd ad) { SampleUnifiedNativeAdMapper mapper = new SampleUnifiedNativeAdMapper(ad); mediationNativeAdCallback = mediationAdLoadCallback.onSuccess(mapper); } @Override public void onAdFetchFailed(SampleErrorCode errorCode) { mediationAdLoadCallback.onFailure(SampleCustomEventError.createSampleSdkError(errorCode)); }
แมปโฆษณาเนทีฟ
SDK แต่ละรายการมีรูปแบบโฆษณาเนทีฟเป็นของตัวเอง ตัวอย่างเช่น รายการหนึ่งอาจแสดงผลออบเจ็กต์ที่มีฟิลด์ "ชื่อ" ขณะที่อีกรายการหนึ่งอาจมี "บรรทัดแรก" นอกจากนี้ วิธีการที่ใช้ติดตามการแสดงผลและการประมวลผล จำนวนคลิกอาจแตกต่างกันไปในแต่ละ SDK
UnifiedNativeAdMapper
มีหน้าที่รับผิดชอบในการพิสูจน์ความแตกต่างเหล่านี้และ
ปรับออบเจ็กต์โฆษณาเนทีฟของ SDK ที่ใช้สื่อกลางให้ตรงกับอินเทอร์เฟซที่คาดว่า
Google Mobile Ads SDK เหตุการณ์ที่กำหนดเองควรขยายคลาสนี้เพื่อสร้าง
ที่เจาะจงเกี่ยวกับ SDK สื่อกลางของตน ต่อไปนี้เป็นตัวอย่างผู้ทำแผนที่โฆษณาจาก
ตัวอย่างโปรเจ็กต์เหตุการณ์ที่กำหนดเองของเรา
Java
package com.google.ads.mediation.sample.customevent; import com.google.android.gms.ads.mediation.UnifiedNativeAdMapper; import com.google.android.gms.ads.nativead.NativeAd; ... public class SampleUnifiedNativeAdMapper extends UnifiedNativeAdMapper { private final SampleNativeAd sampleAd; public SampleUnifiedNativeAdMapper(SampleNativeAd ad) { sampleAd = ad; setHeadline(sampleAd.getHeadline()); setBody(sampleAd.getBody()); setCallToAction(sampleAd.getCallToAction()); setStarRating(sampleAd.getStarRating()); setStore(sampleAd.getStoreName()); setIcon( new SampleNativeMappedImage( ad.getIcon(), ad.getIconUri(), SampleCustomEvent.SAMPLE_SDK_IMAGE_SCALE)); setAdvertiser(ad.getAdvertiser()); List<NativeAd.Image> imagesList = new ArrayList<NativeAd.Image>(); imagesList.add(new SampleNativeMappedImage(ad.getImage(), ad.getImageUri(), SampleCustomEvent.SAMPLE_SDK_IMAGE_SCALE)); setImages(imagesList); if (sampleAd.getPrice() != null) { NumberFormat formatter = NumberFormat.getCurrencyInstance(); String priceString = formatter.format(sampleAd.getPrice()); setPrice(priceString); } Bundle extras = new Bundle(); extras.putString(SampleCustomEvent.DEGREE_OF_AWESOMENESS, ad.getDegreeOfAwesomeness()); this.setExtras(extras); setOverrideClickHandling(false); setOverrideImpressionRecording(false); setAdChoicesContent(sampleAd.getInformationIcon()); } @Override public void recordImpression() { sampleAd.recordImpression(); } @Override public void handleClick(View view) { sampleAd.handleClick(view); } // The Sample SDK doesn't do its own impression/click tracking, instead relies on its // publishers calling the recordImpression and handleClick methods on its native ad object. So // there's no need to pass a reference to the View being used to display the native ad. If // your mediated network does need a reference to the view, the following method can be used // to provide one. @Override public void trackViews(View containerView, Map<String, View> clickableAssetViews, Map<String, View> nonClickableAssetViews) { super.trackViews(containerView, clickableAssetViews, nonClickableAssetViews); // If your ad network SDK does its own impression tracking, here is where you can track the // top level native ad view and its individual asset views. } @Override public void untrackView(View view) { super.untrackView(view); // Here you would remove any trackers from the View added in trackView. } }
ตอนนี้เราจะมาดูโค้ดตัวสร้างอย่างละเอียดกัน
ระงับการอ้างอิงไปยังออบเจ็กต์โฆษณาเนทีฟที่ใช้สื่อกลาง
เครื่องมือสร้างยอมรับพารามิเตอร์ SampleNativeAd
ซึ่งเป็นคลาสโฆษณาเนทีฟที่ใช้
SDK ตัวอย่างสำหรับโฆษณาเนทีฟ โปรแกรมแมปต้องมีข้อมูลอ้างอิงถึงโฆษณาสื่อกลางเพื่อให้ส่งเหตุการณ์การคลิกและการแสดงผลได้ SampleNativeAd
จะเก็บไว้เป็นตัวแปรภายใน
ตั้งค่าพร็อพเพอร์ตี้ของชิ้นงานที่แมป
เครื่องมือสร้างใช้ออบเจ็กต์ SampleNativeAd
เพื่อสร้างเนื้อหาใน
UnifiedNativeAdMapper
ข้อมูลโค้ดนี้จะรับข้อมูลราคาของโฆษณาที่ใช้สื่อกลาง และใช้เพื่อตั้งค่า ราคา:
Java
if (sampleAd.getPrice() != null) { NumberFormat formatter = NumberFormat.getCurrencyInstance(); String priceString = formatter.format(sampleAd.getPrice()); setPrice(priceString); }
ในตัวอย่างนี้ โฆษณาที่ใช้สื่อกลางจะจัดเก็บราคาเป็น double
ขณะที่
AdMob ใช้ String
สําหรับชิ้นงานเดียวกัน โปรแกรมแมปมีหน้าที่รับผิดชอบในการจัดการ Conversion ประเภทเหล่านี้
ชิ้นงานรูปภาพแผนที่
การแมปชิ้นงานรูปภาพจะซับซ้อนกว่าประเภทข้อมูลการแมป เช่น
double
หรือ String
ระบบอาจดาวน์โหลดรูปภาพโดยอัตโนมัติหรือแสดงผลเป็นค่า URL มาตราส่วนพิกเซลต่อ DPI ของอุปกรณ์แต่ละเครื่องก็อาจแตกต่างกันไป
SDK โฆษณาบนอุปกรณ์เคลื่อนที่ของ Google มีฟังก์ชัน
NativeAd.Image
ชั้นเรียน คุณควรสร้างคลาสย่อยของ NativeAd.Image
เมื่อแมปชิ้นงานรูปภาพด้วย เช่นเดียวกับที่คุณต้องสร้างคลาสย่อยของ UnifiedNativeAdMapper
เพื่อแมปโฆษณาเนทีฟที่สื่อกลาง
ตัวอย่างคลาส SampleNativeMappedImage
ของเหตุการณ์ที่กําหนดเองมีดังนี้
Java
public class SampleNativeMappedImage extends NativeAd.Image { private Drawable drawable; private Uri imageUri; private double scale; public SampleNativeMappedImage(Drawable drawable, Uri imageUri, double scale) { this.drawable = drawable; this.imageUri = imageUri; this.scale = scale; } @Override public Drawable getDrawable() { return drawable; } @Override public Uri getUri() { return imageUri; } @Override public double getScale() { return scale; } }
SampleNativeAdMapper
ใช้คลาสรูปภาพที่แมปในบรรทัดนี้เพื่อตั้งค่าชิ้นงานรูปภาพไอคอนของโปรแกรมแมป
Java
setIcon(new SampleNativeMappedImage(ad.getAppIcon(), ad.getAppIconUri(), SampleCustomEvent.SAMPLE_SDK_IMAGE_SCALE));
เพิ่มช่องลงในแพ็กเกจเพิ่มเติม
SDK ที่ใช้สื่อกลางบางรายการจะมีเนื้อหาเพิ่มเติมนอกเหนือจากใน
รูปแบบโฆษณาเนทีฟของ AdMob คลาส UnifiedNativeAdMapper
มีเมธอด setExtras()
ที่ใช้ส่งชิ้นงานเหล่านี้ไปยังผู้เผยแพร่โฆษณา SampleNativeAdMapper
ใช้ประโยชน์จากสิ่งนี้สำหรับ SDK ตัวอย่าง
"ระดับความสุดยอด" เนื้อหา:
Java
Bundle extras = new Bundle(); extras.putString(SampleCustomEvent.DEGREE_OF_AWESOMENESS, ad.getDegreeOfAwesomeness()); this.setExtras(extras);
ผู้เผยแพร่โฆษณาสามารถดึงข้อมูลได้โดยใช้getExtras()
วิธีของNativeAd
คลาส
ตัวเลือกโฆษณาอื่นๆ
เหตุการณ์ที่กําหนดเองมีหน้าที่แสดงไอคอนตัวเลือกโฆษณาอื่นๆ โดยใช้เมธอด setAdChoicesContent()
ใน UnifiedNativeAdMapper
นี่คือตัวอย่างข้อมูลจาก
SampleNativeAdMapper
แสดงวิธีระบุไอคอนตัวเลือกโฆษณาอื่นๆ:
Java
public SampleNativeAdMapper(SampleNativeAd ad) { ... setAdChoicesContent(sampleAd.getInformationIcon()); }
เหตุการณ์การแสดงผลและการคลิก
ทั้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google และ SDK ที่ใช้สื่อกลางจำเป็นต้องทราบเมื่อ การแสดงผลหรือการคลิกเกิดขึ้น แต่มี SDK เพียง 1 รายการเท่านั้นที่ต้องติดตามเหตุการณ์เหล่านี้ เหตุการณ์ที่กําหนดเองใช้ได้ 2 วิธี โดยขึ้นอยู่กับว่า SDK ที่สื่อกลางรองรับการติดตามการแสดงผลและการคลิกด้วยตนเองหรือไม่
ติดตามการคลิกและการแสดงผลด้วย SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google
หาก SDK ที่ใช้สื่อกลางไม่ดำเนินการแสดงผลและการติดตามการคลิกของตนเอง แต่
Google Mobile Ads SDK เป็นวิธีบันทึกการคลิกและการแสดงผล
ติดตามเหตุการณ์เหล่านี้และแจ้งให้อะแดปเตอร์ทราบ คลาส UnifiedNativeAdMapper
มีเมธอด 2 รายการ ได้แก่ recordImpression()
และ handleClick()
ซึ่งเหตุการณ์ที่กําหนดเองสามารถนําไปใช้เพื่อเรียกใช้เมธอดที่สอดคล้องกันในออบเจ็กต์โฆษณาเนทีฟที่สื่อกลาง
Java
@Override public void recordImpression() { sampleAd.recordImpression(); } @Override public void handleClick(View view) { sampleAd.handleClick(view); }
เนื่องจาก SampleNativeAdMapper
มีการอ้างอิงถึงออบเจ็กต์โฆษณาเนทีฟของ Sample SDK จึงสามารถเรียกใช้เมธอดที่เหมาะสมบนออบเจ็กต์ดังกล่าวเพื่อรายงานการคลิกหรือการแสดงผล โปรดทราบว่าเมธอด handleClick()
จะใช้พารามิเตอร์เดียว ซึ่งเป็นออบเจ็กต์ View
ที่สอดคล้องกับชิ้นงานโฆษณาเนทีฟซึ่งได้รับการคลิก
ติดตามการคลิกและการแสดงผลด้วย SDK แบบสื่อกลาง
SDK ที่สื่อกลางบางรายการอาจต้องการติดตามการคลิกและการแสดงผลด้วยตนเอง ในกรณีนี้ คุณควรลบล้างการติดตามคลิกและการแสดงผลเริ่มต้นโดยเรียกใช้ 2 รายการต่อไปนี้ในเครื่องมือสร้างของ UnifiedNativeAdMapper
Java
setOverrideClickHandling(true); setOverrideImpressionRecording(true);
เหตุการณ์ที่กําหนดเองซึ่งลบล้างการติดตามการคลิกและการแสดงผลจําเป็นต้องรายงานเหตุการณ์ onAdClicked()
และ onAdImpression()
ไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google
SDK ที่ใช้สื่อกลางอาจต้องมีสิทธิ์เข้าถึง
ข้อมูลพร็อพเพอร์ตี้เพื่อเปิดใช้การติดตาม เหตุการณ์ที่กําหนดเองควรลบล้างวิธี trackViews()
และใช้เพื่อส่งมุมมองของโฆษณาเนทีฟไปยัง SDK แบบสื่อกลางเพื่อติดตาม SDK ตัวอย่างจากโปรเจ็กต์ตัวอย่างเหตุการณ์ที่กําหนดเอง (ซึ่งนําข้อมูลโค้ดของคู่มือนี้มา) ไม่ได้ใช้แนวทางนี้ แต่หากใช้ โค้ดเหตุการณ์ที่กําหนดเองจะมีลักษณะดังนี้
Java
@Override public void trackViews(View containerView, Map<String, View> clickableAssetViews, Map<String, View> nonClickableAssetViews) { sampleAd.setNativeAdViewForTracking(containerView); }
หาก SDK ที่ใช้สื่อกลางรองรับการติดตามเนื้อหาแต่ละรายการ ก็จะดูข้อมูลภายในได้
clickableAssetViews
เพื่อดูว่าข้อมูลพร็อพเพอร์ตี้ใดที่ควรทำให้คลิกได้ การแมปนี้ใช้ชื่อชิ้นงานใน NativeAdAssetNames
เป็นคีย์ UnifiedNativeAdMapper
มีเมธอด untrackView()
ที่สอดคล้องกันซึ่งเหตุการณ์ที่กําหนดเองสามารถลบล้างได้เพื่อยกเลิกการอ้างอิงถึงมุมมองและยกเลิกการเชื่อมโยงกับออบเจ็กต์โฆษณาเนทีฟ
ส่งต่อเหตุการณ์สื่อกลางไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google
คุณดูการเรียกกลับทั้งหมดที่สื่อกลางรองรับได้ในเอกสาร MediationNativeAdCallback
เหตุการณ์ที่กำหนดเองจะต้องส่งต่อ Callback เหล่านี้ให้มากที่สุดเท่าที่จะเป็นไปได้ เพื่อให้แอปของคุณได้รับเหตุการณ์ที่เทียบเท่าเหล่านี้จาก SDK โฆษณาในอุปกรณ์เคลื่อนที่ ตัวอย่างการใช้การเรียกกลับมีดังนี้
การดำเนินการนี้ถือเป็นการติดตั้งใช้งานเหตุการณ์ที่กําหนดเองสําหรับโฆษณาเนทีฟ ตัวอย่างแบบเต็ม มีให้บริการใน GitHub