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