คู่มือนี้แสดงวิธีใช้ UI ที่กําหนดเองของคุณเองโดยใช้ IMA SDK สําหรับ Android โดยคุณต้องปิดใช้ UI เริ่มต้น ตั้งค่า UI ใหม่ที่กําหนดเอง แล้วป้อนข้อมูลโฆษณาที่ได้จาก SDK ลงใน UI ใหม่
ปิดใช้ UI โฆษณา
หากต้องการแสดง UI ที่กําหนดเอง คุณต้องปิดใช้ UI โฆษณาเริ่มต้นก่อน โดยเรียกใช้ AdsRenderingSettings.setDisableUi()
แล้วส่ง AdsRenderingSettings
ไปยัง AdsManager.init()
ดังนี้
MyActivity.java
ImaSdkFactory mSdkFactory = ImaSdkFactory.getInstance(); AdsManager mAdsManager; @Override public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) { mAdsManager = adsManagerLoadedEvent.getAdsManager(); ... AdsRenderingSettings settings = mSdkFactory.createAdsRenderingSettings(); settings.setDisableUi(true); mAdsManager.init(settings); }
หลังจากนั้น เมื่อใดก็ตามที่คุณต้องตัดสินใจว่าจะแสดง UI ที่กําหนดเองหรือไม่ ให้ตรวจสอบว่ามีโฆษณาหรือไม่ และเรียกใช้ Ad.isUiDisabled()
เพื่อตรวจสอบว่า UI โฆษณาเริ่มต้นถูกปิดใช้แล้ว
แสดง UI ที่กำหนดเอง
เมื่อปิดใช้ UI เริ่มต้นแล้ว ขั้นตอนถัดไปคือแสดง UI โฆษณาที่กําหนดเอง
ในตัวอย่างนี้ ให้เพิ่ม RelativeLayout
ใหม่ลงในเลย์เอาต์วิดีโอเพลเยอร์ที่มีอยู่ จากนั้นแสดงเลย์เอาต์นี้เมื่อโฆษณาเล่นอยู่ และซ่อนเมื่อไม่มีโฆษณาเล่นอยู่
เพิ่มข้อมูลต่อไปนี้ลงในไฟล์เลย์เอาต์ของฟragment
fragment_video.xml
<com.google.ads.interactivemedia.v3.samples.samplevideoplayer.SampleVideoPlayer android:id="@+id/sampleVideoPlayer" android:layout_width="match_parent" android:layout_height="match_parent" /> <RelativeLayout android:id="@+id/customUi" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="invisible"> <TextView android:id="@+id/adCounter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/holo_green_light" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:text="@string/ad_counter" /> <Button android:id="@+id/learnMoreButton" android:background="@android:color/holo_green_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:text="@string/learn_more" android:layout_alignParentRight="true" /> <Button android:id="@+id/skipButton" android:background="@android:color/holo_green_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="@string/skip_ad" android:enabled="false" android:layout_alignParentRight="true" /> </RelativeLayout>
จากนั้นเพิ่มโค้ดเพื่อใช้ UI ที่กําหนดเองลงใน Activity
หากต้องการอัปเดต UI ให้สร้างตัวจับเวลา Handler
และ Runnable
ที่ทำงานบน UI
MyActivity.java
// The view containing the custom UI. private View mCustomUi; // The timer handler. private Handler mTimerHandler = new Handler(); // The Runnable that runs your custom UI update loop. private Runnable mTimerRunnable = new Runnable() { @Override public void run() { updateCustomUi(); mTimerHandler.postDelayed(this, 500); } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... mCustomUi = rootView.findViewById(R.id.customUi); mAdCounterUi = (TextView) rootView.findViewById(R.id.adCounter); } @Override public void onAdEvent(AdEvent adEvent) { ... switch (adEvent.getType()) { ... case STARTED: // Start your update loop. mTimerHandler.post(mTimerRunnable); Break; ... case COMPLETED: mCustomUi.setVisibility(View.INVISIBLE); mTimerHandler.removeCallbacks(mTimerRunnable); ... } } @Override public void onPause() { ... // Stop ad UI update loop. mTimerHandler.removeCallbacks(mTimerRunnable); } @Override Public void onResume() { ... // Start ad UI update loop. mTimerHandler.post(mTimerRunnable); }
ตัวนับโฆษณาและปุ่มข้าม
ตอนนี้ให้กําหนดฟังก์ชัน updateCustomUi()
เพื่อป้อนข้อมูลโฆษณาลงใน UI รายละเอียดจะแตกต่างกันไปตามรูปแบบโฆษณา แต่โดยทั่วไปคุณควรใส่ตัวนับโฆษณาและปุ่มข้ามหรือตัวนับการข้ามหากโฆษณาข้ามได้ เพิ่มข้อมูลต่อไปนี้
MyActivity.java
private void updateCustomUi() { // Runs from the update loop to update the custom UI. Ad ad = mAdsManager.getCurrentAd(); if (ad != null && ad.isUiDisabled()) { // Show the UI. Log.i(LOGTAG, "UI disabled, show custom UI!"); AdPodInfo podInfo = ad.getAdPodInfo(); VideoProgressUpdate update = mAdsManager.getAdProgress(); SimpleDateFormat format = new SimpleDateFormat("mm:ss", Locale.US); // Handle ad counter. String adProgress = format.format( (update.getDuration() - update.getCurrentTime()) * 1000); String adUiString = String.format( Locale.US, "Ad %d of %d (%s)", podInfo.getAdPosition(), podInfo.getTotalAds(), adProgress); mAdCounterUi.setText(adUiString); // Handle skippable ads. if (ad.isSkippable()) { if (update.getCurrentTime() >= ad.getSkipTimeOffset()) { // Allow skipping. mSkipButton.setText(getString(R.string.skip_ad)); mSkipButton.setEnabled(true); } else { String skipString = String.format( Locale.US, "You can skip this ad in %d", (int) (ad.getSkipTimeOffset() - update.getCurrentTime())); mSkipButton.setText(skipString); mSkipButton.setEnabled(false); } mSkipButton.setVisibility(View.VISIBLE); } else { mSkipButton.setVisibility(View.INVISIBLE); } mCustomUi.setVisibility(View.VISIBLE); mCustomUi.bringToFront(); } else { // Hide the UI. mCustomUi.setVisibility(View.INVISIBLE); mTimerHandler.removeCallbacks(mTimerRunnable); } }
ในโค้ดก่อนหน้า หลังจากตรวจสอบว่ามีโฆษณาหรือไม่และเรียกใช้ Ad.isUiDisabled()
เพื่อตรวจสอบว่า UI โฆษณาเริ่มต้นถูกปิดใช้หรือไม่ ให้เรียกใช้ Ad.getAdPodInfo()
และ AdsManager.getAdProgress()
เพื่อค้นหาตําแหน่งของโฆษณาในพ็อดและความคืบหน้าของโฆษณา สําหรับโฆษณาแบบข้ามได้ ให้แสดงตัวนับเวลาข้ามหากยังข้ามโฆษณาไม่ได้ หรือแสดงปุ่มข้าม ข้อมูลสรุปเกี่ยวกับข้อมูลโฆษณาทั่วไปและการเรียกที่เกี่ยวข้องมีดังนี้
ข้อมูล | โทร |
---|---|
โฆษณาปัจจุบันในพ็อด | Ad.getAdPodInfo().getAdPosition() |
โฆษณาทั้งหมดในพ็อด | Ad.getPodInfo().getTotalAds() |
ข้ามโฆษณาได้ | Ad.isSkippable() |
วินาทีที่ข้ามโฆษณาได้ | Ad.getSkipTimeOffset() - AdsManager.getAdProgress().getCurrentTime() |
วินาทีที่เหลือในโฆษณา | (AdsManager.getAdProgress().getDuration() - AdsManager.getAdProgress().getCurrentTime()) * 1000 |
การคลิกปุ่มข้ามโฆษณาควรข้ามโฆษณา ดังนั้นให้ตั้งค่าปุ่มดังกล่าวไว้นอกเหนือจากปุ่มดูข้อมูลเพิ่มเติม
MyActivity.java
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... mCustomUi = rootView.findViewById(R.id.customUi); mAdCounterUi = (TextView) rootView.findViewById(R.id.adCounter); // Set up the 'learn more' button handler for the custom UI. mLearnMoreButton = (Button) rootView.findViewById(R.id.learnMoreButton); mLearnMoreButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // Only works if the UI has been disabled. mAdsManager.clicked(); } }); // Set up the skip button handler for the custom UI. mSkipButton = (Button) rootView.findViewById(R.id.skipButton); mSkipButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { mAdsManager.skip(); } });
คุณต้องปิดใช้ UI เพื่อให้ AdsManager.clicked()
ทำงานได้
การแก้ปัญหา
- คุณมีแท็กตัวอย่างที่เปิดใช้เพื่อปิดใช้ UI ของโฆษณาไหม
- คุณสามารถคัดลอก URL ของแท็กตัวอย่างนี้ แล้ววางลงในการติดตั้งใช้งาน IMA
- ฉันปิดใช้ UI เริ่มต้นไม่ได้
- ตรวจสอบว่าคุณเรียกใช้
AdsRenderingSettings.setDisableUi()
และส่งผ่านไปยังAdsManager
ตรวจสอบว่าAd.isUiDisabled()
แสดงขึ้นมาแล้วtrue
นอกจากนี้ เครือข่ายของคุณต้องเปิดใช้ใน Ad Manager เพื่อปิดใช้ UI โฆษณา หากเปิดใช้แล้ว VAST จะมีExtension
ดังต่อไปนี้ หากยังพบปัญหาอยู่ โปรดตรวจสอบกับผู้จัดการฝ่ายดูแลลูกค้าเพื่อยืนยันว่าคุณได้รับสิทธิ์แล้ว โฆษณาบางประเภทต้องใช้ UI ที่เฉพาะเจาะจง โฆษณาเหล่านี้จะแสดงผลพร้อมค่า<Extension type="uiSettings"> <UiHideable>1</UiHideable> </Extension>
<UiHideable>
เป็น 0 หากพบปัญหานี้ ทีมจัดการโฆษณาจะต้องทําการเปลี่ยนแปลงเพื่อยืนยันว่าโฆษณาประเภทเหล่านี้จะไม่แสดง