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


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

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

ข้อกำหนดเบื้องต้น

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

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

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

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

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

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

การใช้งาน

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

  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 มุมมองระดับบนสุดเป็นการอ้างอิง jobject ของ JNI สำหรับ 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 ที่ ใช้สัญญาซื้อขายล่วงหน้าเพื่อตรวจสอบสถานะความสมบูรณ์ของเมธอด การโทร

โหลดโฆษณา

การโหลดโฆษณาดำเนินการได้โดยใช้เมธอด 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