โฆษณาที่มีการให้รางวัลทําให้ผู้ใช้มีตัวเลือกในการโต้ตอบกับโฆษณาเพื่อแลกกับรางวัลในแอป คู่มือนี้แสดงวิธีผสานรวมโฆษณาที่มีการให้รางวัลลงในแอป Android และ iOS โดยใช้ SDK สําหรับ C++ สําหรับโฆษณาในอุปกรณ์เคลื่อนที่ของ Google
อ่านเรื่องราวความสําเร็จของลูกค้าบางส่วน: กรณีศึกษา 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
ได้ที่ใช้ Futures เพื่อตรวจสอบสถานะการเสร็จสมบูรณ์ของเมธอดเมธอด
โหลดโฆษณา
การโหลดโฆษณาสําเร็จโดยใช้เมธอด 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 วินาที SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google++ สําหรับ Google จะส่งคืน
firebase::Future
จนเสร็จสมบูรณ์ภายในวันที่Initialize()
แม้ว่าเครือข่ายสื่อกลางจะยังคงทําการเริ่มต้นไม่เสร็จสมบูรณ์ - จะเกิดอะไรขึ้นหากเครือข่ายสื่อกลางบางเครือข่ายไม่พร้อมใช้งานหากได้รับการเรียกกลับสําหรับการเริ่มต้น
แนวทางปฏิบัติที่ดีที่สุดคือการโหลดโฆษณาหลังจากการเริ่มต้น SDK เสร็จสมบูรณ์ แม้ว่าเครือข่ายสื่อกลางจะไม่พร้อมใช้งาน แต่ SDK โฆษณาบนอุปกรณ์เคลื่อนที่ C++ ของ Google จะยังคงขอโฆษณาจากเครือข่ายนั้นอยู่ ดังนั้น หากเครือข่ายสื่อกลางเริ่มต้นเสร็จแล้ว หลังจากระยะหมดเวลาแล้ว เครือข่ายดังกล่าวยังคงสามารถตอบสนองคําขอโฆษณาในอนาคตในเซสชันนั้นได้
คุณยังสํารวจสถานะการเริ่มต้นของอะแดปเตอร์ทั้งหมดในเซสชันแอปต่อไปได้โดยเรียกใช้
GetInitializationStatus()
- ฉันจะทราบได้อย่างไรว่าเครือข่ายสื่อกลางใดไม่พร้อมใช้งาน
AdapterStatus.description()
อธิบายเหตุผลที่อะแดปเตอร์ไม่พร้อมใช้งาน ดูตัวอย่างซอร์สโค้ดของ ตัวอย่างแอป Quickstart ใน GitHub เพื่อดูตัวอย่างสถานะของการบันทึกอะแดปเตอร์สื่อกลาง
แหล่งข้อมูลเพิ่มเติม
ตัวอย่างใน GitHub
- ดูซอร์สโค้ดของตัวอย่าง แอป Quickstart ใน GitHub