โฆษณาคั่นระหว่างหน้าเป็นโฆษณาแบบเต็มหน้าจอที่ครอบคลุมอินเทอร์เฟซของแอปจนกว่าผู้ใช้จะปิด โดยปกติแล้วโฆษณาเหล่านี้จะแสดงที่จุดเปลี่ยนผ่านตามปกติในขณะที่ใช้งานแอป เช่น ระหว่างทำกิจกรรมต่างๆ หรือในช่วงหยุดชั่วคราวระหว่างเปลี่ยนด่านในเกม เมื่อแอปแสดงโฆษณาคั่นระหว่างหน้า ผู้ใช้จะมีตัวเลือก ในการแตะโฆษณาและไปยังปลายทาง หรือปิดโฆษณาและกลับไป ที่แอป กรณีศึกษา
คู่มือนี้จะแสดงวิธีผสานรวมโฆษณาคั่นระหว่างหน้าลงในแอป Android และ iOS โดยใช้ Google Mobile Ads C++ SDK
ข้อกำหนดเบื้องต้น
- ทำขั้นตอนเริ่มต้นใช้งานให้เสร็จสมบูรณ์
- (Android เท่านั้น) คุ้นเคยกับการใช้ข้อมูลอ้างอิง
jobjectของ JNI (ดู เคล็ดลับ 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มุมมองระดับบนสุดคือข้อมูลอ้างอิงjobjectของ JNI ไปยังActivityของ Android หรือพอยน์เตอร์ไปยังUIViewของ iOS// 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แทนการเก็บรักษา Future เป็นตัวแปร ซึ่งอาจเป็นประโยชน์ในการติดตามกระบวนการเริ่มต้นใน 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 ได้ที่
ใช้ Future เพื่อตรวจสอบสถานะความสมบูรณ์ของการเรียกใช้เมธอด
calls
โหลดโฆษณา
การโหลดโฆษณาทำได้โดยใช้เมธอด 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 จะใช้เพื่อกำหนดเวลาที่โฆษณาแสดงเนื้อหาแบบเต็มหน้าจอได้ แต่ Future ที่แสดงผลโดย Show() จะส่งสัญญาณด้วยเมื่อโฆษณาแสดงผลสำเร็จ
firebase::Future<void> result = interstitial_ad->Show();
แนวทางปฏิบัติแนะนำ
- พิจารณาว่าโฆษณาคั่นระหว่างหน้าเป็นโฆษณาประเภทที่เหมาะสมกับแอปของคุณหรือไม่
- โฆษณาคั่นระหว่างหน้าเหมาะที่สุดสำหรับแอปที่มีจุดเปลี่ยนผ่านตามปกติ การทำงานเสร็จภายในแอป เช่น การแชร์รูปภาพหรือเล่นเกมผ่านด่าน จะสร้างจุดเปลี่ยนผ่านดังกล่าว เนื่องจากผู้ใช้คาดหวังว่าจะมีการหยุดพักการทำงาน จึงแสดงโฆษณาคั่นระหว่างหน้าได้ง่ายโดยไม่ขัดขวางประสบการณ์ของผู้ใช้ โปรดพิจารณาว่าคุณจะแสดงโฆษณาคั่นระหว่างหน้าที่จุดใดในเวิร์กโฟลว์ของแอป และผู้ใช้มีแนวโน้มที่จะตอบสนองอย่างไร
- อย่าลืมหยุดการทำงานชั่วคราวเมื่อแสดงโฆษณาคั่นระหว่างหน้า
- โฆษณาคั่นระหว่างหน้ามีหลายประเภท ได้แก่ แบบข้อความ รูปภาพ วิดีโอ และอื่นๆ คุณควรตรวจสอบว่าเมื่อแอปแสดงโฆษณาคั่นระหว่างหน้า แอปจะระงับการใช้ทรัพยากรบางอย่างด้วย เพื่อให้โฆษณาสามารถใช้ประโยชน์จากทรัพยากรเหล่านั้นได้ ตัวอย่างเช่น เมื่อโทรเพื่อแสดงโฆษณาคั่นระหว่างหน้า ให้หยุดเอาต์พุตเสียงใดๆ ที่แอปของคุณสร้างขึ้นชั่วคราว คุณสามารถเล่นเสียงต่อในเมธอด
OnAdDismissedFullScreenContentของFullScreenContentListenerที่ติดตั้งไว้ ซึ่งจะเรียกใช้เมื่อผู้ใช้โต้ตอบกับโฆษณาเสร็จแล้ว นอกจากนี้ ให้พิจารณาหยุดงานการคำนวณที่ซับซ้อนชั่วคราว (เช่น Game Loop) ขณะที่โฆษณากำลังแสดง วิธีนี้ช่วยให้ผู้ใช้ไม่พบกราฟิกที่ช้าหรือไม่ตอบสนองหรือวิดีโอที่กระตุก - เผื่อเวลาโหลดให้เพียงพอ
- เช่นเดียวกับที่การแสดงโฆษณาคั่นระหว่างหน้าในเวลาที่เหมาะสมเป็นสิ่งสำคัญ การตรวจสอบว่าผู้ใช้ไม่ต้องรอให้โฆษณาโหลดก็สำคัญเช่นกัน การโหลดโฆษณาล่วงหน้าก่อนที่จะแสดงจะช่วยให้แอปมีโฆษณาคั่นระหว่างหน้าที่โหลดเสร็จสมบูรณ์พร้อมแสดงเมื่อถึงเวลา
- อย่าแสดงโฆษณาให้ผู้ใช้เห็นมากเกินไป
- แม้การแสดงโฆษณาคั่นระหว่างหน้าถี่ขึ้นในแอปอาจเป็นวิธีเพิ่มรายได้ที่ดี แต่อาจทำให้ประสบการณ์ของผู้ใช้แย่ลงและลดอัตราการคลิกผ่าน อย่าขัดจังหวะผู้ใช้บ่อยเกินไปจนกระทั่งไม่สนุกกับการใช้แอป
- อย่าใช้ Future ของการโหลดเสร็จสมบูรณ์เพื่อแสดงโฆษณาคั่นระหว่างหน้า
- เนื่องจากอาจทำให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี ให้โหลดโฆษณาล่วงหน้าก่อนที่คุณจะต้องการแสดง
แหล่งข้อมูลเพิ่มเติม
ตัวอย่างใน GitHub
วิดีโอสอนการใช้งาน Mobile Ads Garage
เรื่องราวความสำเร็จ
ขั้นตอนถัดไป
- สร้างหน่วยโฆษณาคั่นระหว่างหน้าของคุณเองใน UI ของ AdMob หากยังไม่ได้สร้าง
- ดูข้อมูลเกี่ยวกับการกำหนดเป้าหมายโฆษณาและ หลักเกณฑ์ของโฆษณาคั่นระหว่างหน้า