โฆษณาคั่นระหว่างหน้าคือโฆษณาแบบเต็มหน้าจอที่บดบังอินเทอร์เฟซของแอปจนกว่าผู้ใช้จะปิด โดยปกติจะแสดงที่จุดเปลี่ยนหน้าปกติในขณะที่ใช้งานแอป เช่น ระหว่างทำกิจกรรมหรือในช่วงหยุดชั่วคราวระหว่างด่านต่างๆ ในเกม เมื่อแอปแสดงโฆษณาคั่นระหว่างหน้า ผู้ใช้สามารถเลือกที่จะแตะโฆษณาแล้วไปยังปลายทาง หรือปิดและกลับไปที่แอปก็ได้ กรณีศึกษา
คู่มือนี้แสดงวิธีผสานรวมโฆษณาคั่นระหว่างหน้าเข้ากับแอป Android และ iOS โดยใช้ SDK โฆษณาบนอุปกรณ์เคลื่อนที่ของ Google
ข้อกำหนดเบื้องต้น
- ทำตามเริ่มต้นใช้งาน
- (Android เท่านั้น) มีความคุ้นเคยกับการทำงานกับข้อมูลอ้างอิงของ JNI
jobject
(ดูเคล็ดลับเกี่ยวกับ Android JNI)
ทดสอบด้วยโฆษณาทดสอบเสมอ
เมื่อสร้างและทดสอบแอป ให้ตรวจสอบว่าคุณใช้โฆษณาทดสอบแทนที่จะใช้โฆษณาเวอร์ชันที่ใช้งานจริง มิเช่นนั้นจะถูกระงับบัญชี
วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบสำหรับโฆษณาคั่นระหว่างหน้าโดยเฉพาะ ซึ่งจะแตกต่างกันไปตามแพลตฟอร์มอุปกรณ์ ดังนี้
- Android :
ca-app-pub-3940256099942544/1033173712
- iOS:
ca-app-pub-3940256099942544/4411468910
คำขอเหล่านี้ได้รับการกำหนดค่ามาเป็นพิเศษให้ส่งคืนโฆษณาทดสอบสำหรับทุกคำขอ และคุณจะใช้กฎเหล่านี้ในแอปของคุณเองได้อย่างอิสระขณะเขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่อง แต่อย่าลืมแทนที่ด้วยรหัสหน่วยโฆษณาของคุณเองก่อนที่จะเผยแพร่แอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของโฆษณาทดสอบของ SDK โฆษณาในอุปกรณ์เคลื่อนที่ได้ที่ทดสอบโฆษณา
การใช้งาน
ขั้นตอนหลักในการผสานรวมโฆษณาคั่นระหว่างหน้ามีดังนี้
- โหลดโฆษณา
- ลงทะเบียนเพื่อให้โทรกลับ
- แสดงโฆษณาและจัดการเหตุการณ์ในวงจร
กำหนดค่า InterstitialAd
โฆษณาคั่นระหว่างหน้าจะแสดงในออบเจ็กต์ InterstitialAd
ดังนั้นขั้นตอนแรกในการผสานรวมโฆษณาคั่นระหว่างหน้าเข้ากับแอปคือการสร้างและเริ่มต้นออบเจ็กต์ InterstitialAd
เพิ่มส่วนหัวต่อไปนี้ลงในโค้ด C++ ของแอป
#include "firebase/gma/interstial_ad.h"
ประกาศและสร้างอินสแตนซ์ของออบเจ็กต์
InterstitialAd
โดยทำดังนี้firebase::gma::InterstitialAd* interstitial_ad; interstitial_ad = new firebase::gma::InterstitialAd();
เริ่มต้นอินสแตนซ์
InterstitialAd
โดยใช้การแคสต์มุมมองระดับบนสุดไปยังประเภทAdParent
มุมมองระดับบนสุดคือการอ้างอิงjobject
ของ JNI ไปยัง AndroidActivity
หรือตัวชี้ไปยัง iOSUIView
// my_ad_parent is a jobject reference to an Android Activity or // a pointer to an iOS UIView. firebase::gma::AdParent ad_parent = static_cast<firebase::gma::AdParent>(my_ad_parent); firebase::Future<void> result = interstitial_ad->Initialize(ad_parent);
นอกจากการเก็บอนาคตไว้เป็นตัวแปรแล้ว คุณยังตรวจสอบสถานะของการดำเนินการเริ่มต้นเป็นระยะๆ ได้โดยเรียกใช้
InitializeLastResult()
ในออบเจ็กต์InterstitialAd
ซึ่งอาจเป็นประโยชน์ในการติดตามกระบวนการเริ่มต้นใน Game Loop ทั่วโลกของคุณ// Monitor the status of the future in your game loop: firebase::Future<void> result = interstitial_ad->InitializeLastResult(); if (result.status() == firebase::kFutureStatusComplete) { // Initialization completed. if(future.error() == firebase::gma::kAdErrorCodeNone) { // Initialization successful. } else { // An error has occurred. } } else { // Initialization on-going. }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับ firebase::Future
ได้ที่ใช้สัญญาซื้อขายล่วงหน้าเพื่อตรวจสอบสถานะความสำเร็จของการเรียกใช้เมธอด
โหลดโฆษณา
การโหลดโฆษณาทำได้โดยใช้เมธอด LoadAd()
ในออบเจ็กต์ InterstitialAd
วิธีการโหลดกำหนดให้คุณต้องเริ่มต้นออบเจ็กต์ InterstitialAd
รวมถึงต้องมีรหัสหน่วยโฆษณาและออบเจ็กต์ AdRequest
ระบบจะแสดงผล firebase::Future
ซึ่งคุณสามารถใช้ตรวจสอบสถานะและผลลัพธ์ของการดำเนินการโหลด
โค้ดต่อไปนี้แสดงวิธีโหลดโฆษณาเมื่อเริ่มต้น InterstitialAd
สำเร็จแล้ว
firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = interstitial_ad->LoadAd(interstitial_ad_unit_id, ad_request);
ลงทะเบียนเพื่อให้โทรกลับ
คุณต้องขยายคลาส FullScreenContentListener
เพื่อรับการแจ้งเตือนเกี่ยวกับการนำเสนอโฆษณาคั่นระหว่างหน้าและเหตุการณ์ในวงจร คุณสามารถลงทะเบียนคลาสย่อย FullScreenContentListener
ที่กำหนดเองผ่านเมธอด InterstitialAd::SetFullScreenContentListener()
และคลาสย่อยดังกล่าวจะได้รับการติดต่อกลับเมื่อโฆษณาแสดงผลสำเร็จหรือไม่สำเร็จ และเมื่อปิด
โค้ดต่อไปนี้แสดงวิธีขยายเวลาชั้นเรียนและกําหนดชั้นเรียนให้กับโฆษณา
class ExampleFullScreenContentListener : public firebase::gma::FullScreenContentListener { public: ExampleFullScreenContentListener() {} void OnAdClicked() override { // This method is invoked when the user clicks the ad. } void OnAdDismissedFullScreenContent() override { // This method is invoked when the ad dismisses full screen content. } void OnAdFailedToShowFullScreenContent(const AdError& error) override { // This method is invoked when the ad failed to show full screen content. // Details about the error are contained within the AdError parameter. } void OnAdImpression() override { // This method is invoked when an impression is recorded for an ad. } void OnAdShowedFullScreenContent() override { // This method is invoked when the ad showed its full screen content. } }; ExampleFullScreenContentListener* full_screen_content_listener = new ExampleFullScreenContentListener(); interstitial_ad->SetFullScreenContentListener(full_screen_content_listener);
InterstitialAd
เป็นออบเจ็กต์แบบใช้ครั้งเดียว ซึ่งหมายความว่าเมื่อโฆษณาคั่นระหว่างหน้าแสดงแล้ว โฆษณานั้นจะแสดงอีกไม่ได้ แนวทางปฏิบัติแนะนำคือให้โหลดโฆษณาคั่นระหว่างหน้าอีกรายการในวิธี OnAdDismissedFullScreenContent()
ของ FullScreenContentListener
เพื่อให้โฆษณาคั่นระหว่างหน้าถัดไปเริ่มโหลดทันทีที่ปิดโฆษณาชิ้นก่อนหน้า
แสดงโฆษณา
โฆษณาคั่นระหว่างหน้าควรแสดงขึ้นในระหว่างการหยุดเล่นชั่วคราวตามปกติของแอป
เป็นตัวอย่างที่ดีระหว่างการเปลี่ยนด่านเกมหรือหลังจากที่ผู้ใช้ทำงานเสร็จ
แม้ว่าจะใช้ FullScreenContentListener
เพื่อพิจารณาเมื่อโฆษณาแสดงเนื้อหาแบบเต็มหน้าจอได้ แต่ในอนาคต Show()
ก็จะแสดงเวลาที่โฆษณาแสดงผลสำเร็จด้วยเช่นกัน
firebase::Future<void> result = interstitial_ad->Show();
แนวทางปฏิบัติแนะนำ
- พิจารณาว่าโฆษณาคั่นระหว่างหน้าเป็นประเภทโฆษณาที่เหมาะกับแอปของคุณหรือไม่
- โฆษณาคั่นระหว่างหน้าทำงานได้ดีที่สุดในแอปที่มีจุดเปลี่ยนที่เป็นธรรมชาติ การสรุปงานภายในแอป เช่น การแชร์รูปภาพหรือการเล่นเกมจบด่านหนึ่งๆ ทำให้เกิดจุดดังกล่าว เนื่องจากผู้ใช้คาดหวังว่าจะหยุดพักจากการกระทำ จึงเป็นการง่ายที่จะนำเสนอโฆษณาคั่นระหว่างหน้าโดยไม่รบกวนประสบการณ์การใช้งาน อย่าลืมพิจารณาว่าจะแสดงโฆษณาคั่นระหว่างหน้าที่จุดใดในเวิร์กโฟลว์ของแอป คุณจะแสดงโฆษณาคั่นระหว่างหน้าอย่างไร และมีแนวโน้มที่ผู้ใช้จะตอบสนองอย่างไร
- อย่าลืมหยุดการดำเนินการชั่วคราวเมื่อแสดงโฆษณาคั่นระหว่างหน้า
- โฆษณาคั่นระหว่างหน้ามีหลายประเภท เช่น ข้อความ รูปภาพ วิดีโอ เป็นต้น คุณควรตรวจสอบว่าเมื่อแอปแสดงโฆษณาคั่นระหว่างหน้า แอปจะระงับการใช้ทรัพยากรบางอย่างเพื่อให้โฆษณาได้ประโยชน์ด้วย ตัวอย่างเช่น เมื่อคุณเรียกให้แสดงโฆษณาคั่นระหว่างหน้า โปรดหยุดเอาต์พุตเสียงที่แอปสร้างขึ้นไว้ชั่วคราว คุณสามารถกลับมาเล่นเสียงต่อได้ในเมธอด
OnAdDismissedFullScreenContent
ของFullScreenContentListener
ที่คุณติดตั้ง ซึ่งจะเรียกใช้เมื่อผู้ใช้โต้ตอบกับโฆษณาเสร็จแล้ว นอกจากนี้ ให้หยุดงานคำนวณที่เข้มข้นไว้ชั่วคราว (เช่น Game Loop) ไว้ชั่วคราวขณะที่แสดงโฆษณา เพื่อไม่ให้ผู้ใช้ประสบปัญหากราฟิกที่ช้าหรือไม่ตอบสนอง หรือวิดีโอกระตุก - เผื่อไว้สำหรับเวลาโหลดที่มากพอ
- สิ่งที่สำคัญอีกอย่างคือการแสดงโฆษณาคั่นระหว่างหน้าในเวลาที่เหมาะสมและทำให้ผู้ใช้ไม่ต้องรอให้โฆษณาโหลดเสร็จ การโหลดโฆษณาไว้ล่วงหน้าก่อนที่คุณจะต้องการแสดงจะช่วยให้แน่ใจว่าแอปมีโฆษณาคั่นระหว่างหน้าที่โหลดอย่างสมบูรณ์และพร้อมแสดงเมื่อถึงเวลาแสดงโฆษณา
- อย่าแสดงโฆษณาต่อผู้ใช้มากเกินไป
- แม้ว่าการเพิ่มความถี่ของโฆษณาคั่นระหว่างหน้าในแอปอาจดู เป็นวิธีเพิ่มรายได้ที่ดี แต่ก็อาจทําให้ประสบการณ์ของผู้ใช้แย่ลงและอัตราการคลิกผ่านลดลงด้วย ดูแลไม่ให้ผู้ใช้ถูกรบกวนบ่อยๆ จนใช้แอปของคุณไม่ได้อีกต่อไป
- อย่าใช้การโหลดที่เสร็จสมบูรณ์แล้วในอนาคตเพื่อแสดงโฆษณาคั่นระหว่างหน้า
- การดำเนินการนี้อาจทำให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี แต่ให้โหลดโฆษณาไว้ล่วงหน้า ก่อนที่จะต้องแสดง
แหล่งข้อมูลเพิ่มเติม
ตัวอย่างใน GitHub
- ดูซอร์สโค้ดของตัวอย่างแอปเริ่มต้นอย่างรวดเร็วใน GitHub
บทแนะนำแบบวิดีโอสำหรับ Mobile Ads Garage
เรื่องราวความสำเร็จ
ขั้นตอนถัดไป
- สร้างหน่วยโฆษณาคั่นระหว่างหน้าของคุณเองใน UI ของ AdMob หากยังไม่ได้ทำ
- ดูข้อมูลเกี่ยวกับการกำหนดเป้าหมายโฆษณาและหลักเกณฑ์โฆษณาคั่นระหว่างหน้า