โฆษณาที่มีการให้รางวัลช่วยให้ผู้ใช้มีตัวเลือกในการโต้ตอบกับโฆษณาเพื่อแลกกับรางวัลในแอป คู่มือนี้จะแสดงวิธีผสานรวมโฆษณาที่มีการให้รางวัลลงในแอป Android และ iOS โดยใช้ Google Mobile Ads C++ SDK
อ่านเรื่องราวความสำเร็จของลูกค้าบางส่วน: กรณีศึกษา 1, กรณีศึกษา 2.
ข้อกำหนดเบื้องต้น
- ทำขั้นตอนเริ่มต้นใช้งานให้เสร็จสมบูรณ์
- (Android เท่านั้น) คุ้นเคยกับการทำงานกับการอ้างอิง
jobjectของ JNI (ดู เคล็ดลับ JNI ของ Android)
ทดสอบด้วยโฆษณาทดสอบเสมอ
เมื่อสร้างและทดสอบแอป โปรดใช้โฆษณาทดสอบแทนโฆษณาจริง หากไม่ปฏิบัติตามอาจส่งผลให้บัญชีถูกระงับ
วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบเฉพาะสำหรับโฆษณาที่มีการให้รางวัล ซึ่งจะแตกต่างกันไปตามแพลตฟอร์มของอุปกรณ์ ดังนี้
- Android:
ca-app-pub-3940256099942544/5224354917 - iOS:
ca-app-pub-3940256099942544/1712485313
รหัสหน่วยโฆษณาทดสอบได้รับการกำหนดค่าเป็นพิเศษให้แสดงโฆษณาทดสอบสำหรับทุกคำขอ และคุณสามารถใช้รหัสนี้ในแอปของคุณเองได้อย่างอิสระขณะเขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่อง เพียงตรวจสอบว่าคุณได้แทนที่รหัสหน่วยโฆษณาทดสอบด้วยรหัสหน่วยโฆษณาของคุณเองก่อนที่จะเผยแพร่แอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีทำงานของโฆษณาทดสอบของ Mobile Ads SDK ได้ที่ โฆษณาทดสอบ
การใช้งาน
ขั้นตอนหลักในการผสานรวมโฆษณาที่มีการให้รางวัลมีดังนี้
- โหลดโฆษณา
- ลงทะเบียนเพื่อรับการเรียกกลับ
- แสดงโฆษณาและจัดการเหตุการณ์รางวัล
กำหนดค่า RewardedAd
โฆษณาที่มีการให้รางวัลจะแสดงในออบเจ็กต์ RewardedAd ดังนั้นขั้นตอนแรกในการผสานรวมโฆษณาที่มีการให้รางวัลลงในแอปคือการสร้างและเริ่มต้นอินสแตนซ์ของ RewardedAd
เพิ่มส่วนหัวต่อไปนี้ลงในโค้ด C++ ของแอป
#include "firebase/gma/rewarded_ad.h"
ประกาศและสร้างอินสแตนซ์ออบเจ็กต์
RewardedAdดังนี้firebase::gma::RewardedAd* rewarded_ad; rewarded_ad = new firebase::gma::RewardedAd();
เริ่มต้นอินสแตนซ์
RewardedAdโดยใช้มุมมองระดับบนสุดที่แคสต์เป็นประเภท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 = rewarded_ad->Initialize(ad_parent);คุณสามารถตรวจสอบสถานะของการดำเนินการเริ่มต้นเป็นระยะๆ ได้โดยเรียกใช้
InitializeLastResult()ในออบเจ็กต์RewardedAdแทนการเก็บรักษา Future เป็นตัวแปร ซึ่งอาจเป็นประโยชน์ในการติดตามกระบวนการเริ่มต้นใน Game Loop ทั่วโลก// Monitor the status of the future in your game loop: firebase::Future<void> result = rewarded_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() ในออบเจ็กต์ RewardedAd เมธอดโหลดกำหนดให้คุณต้องเริ่มต้นออบเจ็กต์ RewardedAd และมีรหัสหน่วยโฆษณาและออบเจ็กต์ AdRequest ระบบจะแสดงผล firebase::Future ซึ่งคุณสามารถใช้เพื่อตรวจสอบสถานะและผลลัพธ์ของการดำเนินการโหลด
โค้ดต่อไปนี้แสดงวิธีโหลดโฆษณาเมื่อเริ่มต้น RewardedAd สำเร็จแล้ว
firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = rewarded_ad->LoadAd(rewarded_ad_unit_id, ad_request);
ลงทะเบียนเพื่อรับการเรียกกลับ
คุณต้องขยายคลาส FullScreenContentListener เพื่อรับการแจ้งเตือนเกี่ยวกับการแสดงโฆษณาที่มีการให้รางวัลและเหตุการณ์วงจรการทำงาน คุณสามารถลงทะเบียนคลาสย่อย
FullScreenContentListener ที่กำหนดเองผ่านเมธอด
RewardedAd::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* example_full_screen_content_listener = new ExampleFullScreenContentListener(); rewarded_ad->SetFullScreenContentListener(example_full_screen_content_listener);
RewardedAd เป็นออบเจ็กต์ที่ใช้ได้ครั้งเดียว ซึ่งหมายความว่าเมื่อแสดงโฆษณาที่มีการให้รางวัลแล้ว จะแสดงอีกไม่ได้ แนวทางปฏิบัติแนะนำคือให้โหลดโฆษณาที่มีการให้รางวัลอีกรายการในเมธอด OnAdDismissedFullScreenContent() ของ FullScreenContentListener เพื่อให้โฆษณาที่มีการให้รางวัลรายการถัดไปเริ่มโหลดทันทีที่โฆษณาที่มีการให้รางวัลรายการก่อนหน้าถูกปิด
แสดงโฆษณาและจัดการเหตุการณ์รางวัล
ก่อนที่จะแสดงโฆษณาที่มีการให้รางวัลแก่ผู้ใช้ คุณต้องแสดงตัวเลือกที่ชัดเจนแก่ผู้ใช้ในการดูเนื้อหาโฆษณาที่มีการให้รางวัลเพื่อแลกกับรางวัล โฆษณาที่มีการให้รางวัลต้องเป็นประสบการณ์แบบเลือกใช้เสมอ
เมื่อแสดงโฆษณา คุณต้องระบุออบเจ็กต์ UserEarnedReward เพื่อจัดการรางวัลสำหรับผู้ใช้
โค้ดต่อไปนี้แสดงวิธีแสดง RewardedAd
// A simple listener track UserEarnedReward events.
class ExampleUserEarnedRewardListener :
public firebase::gma::UserEarnedRewardListener {
public:
ExampleUserEarnedRewardListener() { }
void OnUserEarnedReward(const firebase::gma::AdReward& reward) override {
// Reward the user!
}
};
ExampleUserEarnedRewardListener* user_earned_reward_listener =
new ExampleUserEarnedRewardListener();
firebase::Future<void> result = rewarded_ad->Show(user_earned_reward_listener);
คำถามที่พบบ่อย
- การเรียกใช้การเริ่มต้นมีระยะหมดเวลาไหม
- หลังจากผ่านไป 10 วินาที Google Mobile Ads C++ SDK จะทำให้
firebase::Futureที่แสดงผลโดยInitialize()เสร็จสมบูรณ์ แม้ว่าเครือข่ายสื่อกลางบางเครือข่ายจะยังเริ่มต้นไม่เสร็จสมบูรณ์ก็ตาม - จะเกิดอะไรขึ้นหากเครือข่ายสื่อกลางบางเครือข่ายไม่พร้อมใช้งานเมื่อฉันได้รับการเรียกกลับการเริ่มต้น
แนวทางปฏิบัติแนะนำคือให้โหลดโฆษณาหลังจากที่การเริ่มต้น SDK เสร็จสมบูรณ์แล้ว แม้ว่าเครือข่ายสื่อกลางจะไม่พร้อมใช้งาน แต่ Google Mobile Ads C++ SDK จะยังคงขอโฆษณาจากเครือข่ายนั้น ดังนั้นหากเครือข่ายสื่อกลางเริ่มต้นเสร็จสมบูรณ์หลังจากหมดเวลา เครือข่ายนั้นจะยังคงให้บริการคำขอโฆษณาในอนาคตในเซสชันนั้นได้
คุณสามารถเรียกใช้
GetInitializationStatus()เพื่อตรวจสอบสถานะการเริ่มต้นของอะแดปเตอร์ทั้งหมดในเซสชันแอปได้ต่อไป- ฉันจะทราบได้อย่างไรว่าเหตุใดเครือข่ายสื่อกลางบางเครือข่ายจึงไม่พร้อมใช้งาน
AdapterStatus.description()อธิบายเหตุผลที่อะแดปเตอร์ไม่พร้อมให้บริการคำขอโฆษณา ดูซอร์สโค้ดของแอปเริ่มต้นใช้งานอย่างรวดเร็วตัวอย่างของเรา ใน GitHub เพื่อดูตัวอย่างการบันทึกสถานะอะแดปเตอร์สื่อกลาง