โฆษณาที่มีการให้รางวัลช่วยให้ผู้ใช้มีตัวเลือกในการโต้ตอบกับโฆษณาเพื่อแลกกับรางวัลในแอป คู่มือนี้แสดงวิธีผสานรวมโฆษณาที่มีการให้รางวัลลงในแอป Android และ iOS โดยใช้ SDK สําหรับ C++ ของ Google Mobile Ads
อ่านเรื่องราวความสําเร็จของลูกค้าบางส่วน: กรณีศึกษา 1 กรณีศึกษา 2
สิ่งที่ต้องมีก่อน
- ทําการเริ่มต้นใช้งานให้เสร็จสมบูรณ์
- (Android เท่านั้น) ความคุ้นเคยในการทํางานด้วยการอ้างอิง JNI
jobject
(ดูเคล็ดลับ Android JNI)
ทดสอบโฆษณาทดสอบอยู่เสมอ
เมื่อสร้างและทดสอบแอป โปรดใช้โฆษณาทดสอบแทนโฆษณาจริง มิเช่นนั้นอาจทําให้บัญชีถูกระงับ
วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบเฉพาะสําหรับโฆษณาที่มีการให้รางวัล ซึ่งจะแตกต่างกันไปตามแพลตฟอร์มอุปกรณ์ ดังนี้
- Android :
ca-app-pub-3940256099942544/5224354917
- iOS:
ca-app-pub-3940256099942544/1712485313
เบราว์เซอร์เหล่านี้ได้รับการกําหนดค่าเป็นพิเศษเพื่อให้ส่งคืนโฆษณาทดสอบสําหรับทุกคําขอได้ และคุณสามารถใช้แอปนี้ในแอปของตัวเองขณะเขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่องได้ด้วย อย่าลืมแทนที่ด้วยรหัสหน่วยโฆษณาของคุณเองก่อนที่จะเผยแพร่แอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทํางานของโฆษณา 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
มุมมองระดับบนคือการอ้างอิง 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 = rewarded_ad->Initialize(ad_parent);
อย่างไรก็ตาม คุณจะตรวจสอบสถานะของการดําเนินการเริ่มต้นเป็นระยะได้โดยการเรียกใช้
InitializeLastResult()
ในออบเจ็กต์RewardedAd
ซึ่งเป็นอีกทางเลือกหนึ่งในการรักษาอนาคตไว้เป็นตัวแปร ซึ่งจะเป็นประโยชน์ต่อการติดตามกระบวนการเริ่มต้นใน 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
ได้ที่ใช้สัญญาซื้อขายล่วงหน้าเพื่อตรวจสอบสถานะการเรียกใช้เมธอดที่เสร็จสมบูรณ์
โหลดโฆษณา
การโหลดโฆษณาสําเร็จโดยใช้เมธอด 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()
ได้ และจะได้รับโค้ดเรียกกลับเมื่อโฆษณาแสดงสําเร็จหรือไม่สําเร็จ รวมถึงเมื่อปิด
#39; ด้วย
โค้ดต่อไปนี้จะแสดงวิธีขยายคลาสและกําหนดให้โฆษณาใช้
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 วินาที SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google สําหรับ C++ ของ Google จะส่งคืน
firebase::Future
ให้เสร็จสมบูรณ์ภายในวันที่Initialize()
แม้ว่าเครือข่ายสื่อกลางจะยังไม่ได้เริ่มต้นเสร็จสมบูรณ์ - จะเกิดอะไรขึ้นหากเครือข่ายสื่อกลางบางเครือข่ายยังไม่พร้อม เมื่อฉันเรียกใช้โค้ดเรียกกลับ
แนวทางปฏิบัติแนะนําคือโหลดโฆษณาหลังจากเริ่มต้น SDK เสร็จสมบูรณ์แล้ว แม้ว่าเครือข่ายสื่อกลางจะไม่พร้อมใช้งาน แต่ C++ SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google จะยังคงขอให้เครือข่ายนั้นแสดงโฆษณา ดังนั้น หากเครือข่ายสื่อกลางเริ่มต้นเสร็จแล้ว หลังจากระยะหมดเวลา เครือข่ายก็จะยังสามารถส่งคําขอโฆษณาในอนาคตในเซสชันได้
คุณยังสํารวจสถานะการเริ่มต้นของอะแดปเตอร์ทั้งหมดต่อไปได้ในเซสชันแอปโดยเรียกใช้
GetInitializationStatus()
- ฉันจะทราบได้อย่างไรว่าเครือข่ายสื่อกลางหนึ่งๆ ยังไม่พร้อมได้อย่างไร
AdapterStatus.description()
อธิบายถึงสาเหตุที่อะแดปเตอร์ไม่พร้อม ส่งคําขอโฆษณา ดูตัวอย่างของสถานะการบันทึกอะแดปเตอร์สื่อกลางได้จากซอร์สโค้ดของแอป Quickstart ตัวอย่างใน GitHub
แหล่งข้อมูลเพิ่มเติม
ตัวอย่างใน GitHub
- ดูซอร์สโค้ดของตัวอย่างแอปเริ่มต้นอย่างรวดเร็วใน GitHub