โฆษณาคั่นระหว่างหน้าคือโฆษณาแบบเต็มหน้าจอที่ครอบคลุมอินเทอร์เฟซของแอปจนกว่าผู้ใช้จะปิด โฆษณาเหล่านี้มักจะแสดงที่จุดเปลี่ยนหน้าปกติในขณะที่ใช้งานแอป เช่น ระหว่างทำกิจกรรมต่างๆ หรือในช่วงหยุดชั่วคราวระหว่างเปลี่ยนด่านในเกม เมื่อแอปแสดงโฆษณาคั่นระหว่างหน้า ผู้ใช้จะมีตัวเลือกในการแตะโฆษณาเพื่อไปยังปลายทางหรือปิดโฆษณาและกลับไปที่แอปกรณีศึกษา
คู่มือนี้จะแสดงวิธีผสานรวมโฆษณาคั่นระหว่างหน้าเข้ากับแอป Android และ iOS โดยใช้ Google Mobile Ads C++ SDK
ข้อกำหนดเบื้องต้น
- ทําตามขั้นตอนเริ่มต้นใช้งานให้เสร็จสมบูรณ์
- (Android เท่านั้น) เคยทํางานกับข้อมูลอ้างอิง JNI
jobject
(ดูเคล็ดลับ JNI ของ Android)
ทดสอบด้วยโฆษณาทดสอบเสมอ
เมื่อสร้างและทดสอบแอป โปรดใช้โฆษณาทดสอบแทนโฆษณาเวอร์ชันที่ใช้งานจริง หากไม่ดำเนินการดังกล่าวอาจส่งผลให้บัญชีถูกระงับ
วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบเฉพาะสําหรับโฆษณาคั่นระหว่างหน้า ซึ่งจะแตกต่างกันไปตามแพลตฟอร์มอุปกรณ์ ดังนี้
- Android :
ca-app-pub-3940256099942544/1033173712
- iOS:
ca-app-pub-3940256099942544/4411468910
โฆษณาเหล่านี้ได้รับการกําหนดค่ามาเป็นพิเศษให้แสดงโฆษณาทดสอบสําหรับคําขอทุกรายการ และคุณใช้โฆษณาเหล่านี้ในแอปของคุณเองได้ขณะเขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่อง เพียงอย่าลืมแทนที่รหัสด้วยรหัสหน่วยโฆษณาของคุณเองก่อนเผยแพร่แอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของโฆษณาทดสอบของ Mobile Ads 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
มุมมองหลักคือ JNIjobject
ที่อ้างอิง 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
ได้ที่หัวข้อใช้ Futures เพื่อตรวจสอบสถานะการเรียกใช้เมธอดที่เสร็จสมบูรณ์
โหลดโฆษณา
การโหลดโฆษณาจะเสร็จสมบูรณ์โดยใช้เมธอด 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
ที่ติดตั้งไว้ ซึ่งจะเรียกใช้เมื่อผู้ใช้โต้ตอบกับโฆษณาเสร็จแล้ว นอกจากนี้ ให้ลองหยุดงานประมวลผลที่ต้องใช้ทรัพยากรมากชั่วคราว (เช่น ลูปเกม) ขณะแสดงโฆษณา วิธีนี้จะช่วยให้ผู้ใช้ไม่พบกราฟิกที่ช้าหรือไม่ตอบสนอง หรือวิดีโอที่กระตุก - เผื่อเวลาในการโหลดให้เพียงพอ
- การแสดงโฆษณาคั่นระหว่างหน้าในเวลาที่เหมาะสมเป็นสิ่งสําคัญ แต่ผู้ใช้ไม่ควรต้องรอให้โฆษณาโหลด การโหลดโฆษณาล่วงหน้าก่อนที่คุณจะแสดงจะช่วยให้มั่นใจได้ว่าแอปของคุณมีโฆษณาคั่นระหว่างหน้าที่โหลดเสร็จสมบูรณ์แล้วเมื่อถึงเวลาแสดง
- อย่าแสดงโฆษณาต่อผู้ใช้มากเกินไป
- แม้ว่าการเพิ่มความถี่ของโฆษณาคั่นระหว่างหน้าในแอปอาจดูเหมือนเป็นวิธีที่ยอดเยี่ยมในการเพิ่มรายได้ แต่ก็อาจทำให้ประสบการณ์ของผู้ใช้แย่ลงและอัตราการคลิกผ่านลดลงด้วย ตรวจสอบว่าผู้ใช้ไม่ได้รับการขัดจังหวะบ่อยจนทำให้ใช้งานแอปของคุณไม่ได้
- อย่าใช้เหตุการณ์การโหลดเสร็จสมบูรณ์ในอนาคตเพื่อแสดงโฆษณาคั่นระหว่างหน้า
- ซึ่งอาจทำให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี แต่ให้โหลดโฆษณาล่วงหน้าก่อนถึงเวลาที่คุณต้องแสดงโฆษณา
แหล่งข้อมูลเพิ่มเติม
ตัวอย่างใน GitHub
- ดูซอร์สโค้ดของตัวอย่างแอปเริ่มต้นใช้งานใน GitHub
บทแนะนําแบบวิดีโอของ Mobile Ads Garage
เรื่องราวความสำเร็จ
ขั้นตอนถัดไป
- สร้างหน่วยโฆษณาคั่นระหว่างหน้าของคุณเองใน UI ของ AdMob หากยังไม่ได้สร้าง
- ดูข้อมูลเกี่ยวกับการกำหนดเป้าหมายโฆษณาและหลักเกณฑ์โฆษณาคั่นระหว่างหน้า