โฆษณาคั่นระหว่างหน้าเป็นโฆษณาแบบเต็มหน้าจอที่ครอบคลุมอินเทอร์เฟซของแอปจนผู้ใช้ปิดไว้ โดยปกติจะแสดงในจุดเปลี่ยนหน้าตามปกติในช่วงที่แอปทำงาน เช่น ระหว่างทำกิจกรรมต่างๆ หรือในช่วงหยุดชั่วคราวระหว่างเลเวลในเกม เมื่อแอปแสดงโฆษณาคั่นระหว่างหน้า ผู้ใช้เลือกได้ว่าจะแตะโฆษณาและไปที่ปลายทางหรือปิดโฆษณาและกลับไปที่แอป กรณีศึกษา
คู่มือนี้จะแสดงวิธีผสานรวมโฆษณาคั่นระหว่างหน้าในแอป Android และ iOS โดยใช้ C++ 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 หากยังไม่ได้สร้าง
- เรียนรู้เกี่ยวกับการกำหนดเป้าหมายโฆษณาและหลักเกณฑ์โฆษณาคั่นระหว่างหน้า