โฆษณาที่มีการให้รางวัล

โฆษณาที่มีการให้รางวัลทําให้ผู้ใช้มีตัวเลือกในการโต้ตอบกับโฆษณาเพื่อแลกกับรางวัลในแอป คู่มือนี้แสดงวิธีผสานรวมโฆษณาที่มีการให้รางวัลลงในแอป Android และ iOS โดยใช้ SDK สําหรับ C++ สําหรับโฆษณาในอุปกรณ์เคลื่อนที่ของ Google

อ่านเรื่องราวความสําเร็จของลูกค้าบางส่วน: กรณีศึกษา 1 กรณีศึกษา 2

สิ่งที่ต้องดำเนินการก่อน

ทดสอบด้วยโฆษณาทดสอบเสมอ

เมื่อสร้างและทดสอบแอป อย่าลืมใช้โฆษณาทดสอบแทนที่จะใช้โฆษณาจริง หากคุณไม่ทําเช่นนั้น เราอาจระงับบัญชีของคุณ

วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบโดยเฉพาะสําหรับโฆษณาที่มีการให้รางวัล ซึ่งจะแตกต่างกันไปตามแพลตฟอร์มอุปกรณ์ ดังนี้

  • Android : ca-app-pub-3940256099942544/5224354917
  • iOS: ca-app-pub-3940256099942544/1712485313

โดยได้รับการกําหนดค่าเป็นพิเศษให้ส่งกลับโฆษณาทดสอบสําหรับคําขอทุกรายการ และคุณจะใช้แอปพลิเคชันนี้ในแอปของคุณเองขณะที่เขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่องได้ เพียงแทนที่ด้วยรหัสหน่วยโฆษณาของคุณเองก่อนที่จะเผยแพร่แอป

สําหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทํางานของโฆษณาทดสอบของ SDK โฆษณาในอุปกรณ์เคลื่อนที่ โปรดดูโฆษณาทดสอบ

การใช้งาน

ขั้นตอนหลักในการรวมโฆษณาที่มีการให้รางวัลมีดังนี้

  1. โหลดโฆษณา
  2. ลงทะเบียนการติดต่อกลับ
  3. แสดงโฆษณาและจัดการกิจกรรมรางวัล

กําหนดค่า RewardedAd

โฆษณาที่มีการให้รางวัลจะแสดงในออบเจ็กต์ RewardedAd รายการ ดังนั้นขั้นตอนแรกในการผนวกโฆษณาที่มีการให้รางวัลลงในแอปก็คือการสร้างและเริ่มต้นอินสแตนซ์ของ RewardedAd

  1. เพิ่มส่วนหัวต่อไปนี้ลงในโค้ด C++ ของแอป

     #include "firebase/gma/rewarded_ad.h"
    

  2. ประกาศและแสดงตัวอย่างออบเจ็กต์ RewardedAd โดยทําดังนี้

     firebase::gma::RewardedAd* rewarded_ad;
     rewarded_ad = new firebase::gma::RewardedAd();
    

  3. เริ่มต้นอินสแตนซ์ RewardedAd โดยใช้การแคสต์มุมมองระดับบนสุดเป็นประเภท AdParent มุมมองระดับบนสุดจะเป็นการอ้างอิง JNI jobject ไปยัง Android Activity หรือตัวชี้ไปยัง iOS UIView

    // 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);
    
  4. คุณสามารถตรวจสอบสถานะการดําเนินการเริ่มต้นเป็นระยะ โดยเรียกใช้ 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