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