โฆษณาคั่นระหว่างหน้า


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

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

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

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

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

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

  • Android : ca-app-pub-3940256099942544/1033173712
  • iOS: ca-app-pub-3940256099942544/4411468910

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของโฆษณาทดสอบของ Mobile Ads SDK ได้ที่โฆษณาทดสอบ

การใช้งาน

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

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

กำหนดค่า InterstitialAd

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

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

     #include "firebase/gma/interstial_ad.h"

  2. ประกาศและสร้างอินสแตนซ์ออบเจ็กต์ InterstitialAd ดังนี้

     firebase::gma::InterstitialAd* interstitial_ad;
     interstitial_ad = new firebase::gma::InterstitialAd();

  3. เริ่มต้นอินสแตนซ์ InterstitialAd โดยใช้การแคสต์มุมมองหลักเป็นประเภท 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 = interstitial_ad->Initialize(ad_parent);
    
  4. อีกทางเลือกหนึ่งนอกเหนือจากการเก็บ Future ไว้เป็นตัวแปรคือ คุณสามารถตรวจสอบสถานะของการดำเนินการเริ่มต้นเป็นระยะๆ ได้โดยเรียกใช้ InitializeLastResult() ในออบเจ็กต์ InterstitialAd ซึ่งอาจเป็นประโยชน์ในการติดตามกระบวนการเริ่มต้นใน Game Loop ทั่วโลก

    // Monitor the status of the future in your game loop:
    firebase::Future<void> result = interstitial_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() ในออบเจ็กต์ InterstitialAd เมธอดโหลดกำหนดให้คุณต้องเริ่มต้นออบเจ็กต์ InterstitialAd และมีรหัสหน่วยโฆษณาและออบเจ็กต์ AdRequest ระบบจะแสดงผล firebase::Future ซึ่งคุณสามารถใช้เพื่อตรวจสอบสถานะและผลลัพธ์ของการดำเนินการโหลดได้

โค้ดต่อไปนี้แสดงวิธีโหลดโฆษณาเมื่อเริ่มต้น InterstitialAd สำเร็จแล้ว

firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = interstitial_ad->LoadAd(interstitial_ad_unit_id, ad_request);

ลงทะเบียนเพื่อรับการติดต่อกลับ

คุณต้องขยายคลาส FullScreenContentListener เพื่อรับการแจ้งเตือนการนำเสนอโฆษณาคั่นระหว่างหน้าและเหตุการณ์ในวงจร คุณสามารถลงทะเบียนคลาสย่อย FullScreenContentListener ที่กำหนดเองผ่านเมธอด InterstitialAd::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* full_screen_content_listener =
    new ExampleFullScreenContentListener();
  interstitial_ad->SetFullScreenContentListener(full_screen_content_listener);

InterstitialAd เป็นออบเจ็กต์ที่ใช้ได้ครั้งเดียว ซึ่งหมายความว่าเมื่อแสดงโฆษณาคั่นระหว่างหน้าแล้ว จะแสดงอีกไม่ได้ แนวทางปฏิบัติแนะนำคือการโหลดโฆษณาคั่นระหว่างหน้าอีกรายการในเมธอด OnAdDismissedFullScreenContent() ของ FullScreenContentListener เพื่อให้โฆษณาคั่นระหว่างหน้ารายการถัดไปเริ่มโหลดทันทีที่ปิดโฆษณารายการก่อนหน้า

แสดงโฆษณา

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

  firebase::Future<void> result = interstitial_ad->Show();

แนวทางปฏิบัติแนะนำ

พิจารณาว่าโฆษณาคั่นระหว่างหน้าเป็นประเภทโฆษณาที่เหมาะกับแอปของคุณหรือไม่
โฆษณาคั่นระหว่างหน้าทำงานได้ดีที่สุดในแอปที่มีจุดเปลี่ยนตามปกติ การทำงานเสร็จภายในแอป เช่น การแชร์ภาพหรือเล่นเกมผ่านด่าน จะสร้างจุดเปลี่ยนดังกล่าว เนื่องจากผู้ใช้คาดหวังว่าจะมีการหยุดพักการดำเนินการ จึงเป็นเรื่องง่ายที่จะแสดงโฆษณาคั่นระหว่างหน้าโดยไม่รบกวนประสบการณ์ของผู้ใช้ ตรวจสอบว่าคุณได้พิจารณาแล้วว่าจะแสดงโฆษณาคั่นระหว่างหน้า ณ จุดใดในเวิร์กโฟลว์ของแอป และผู้ใช้มีแนวโน้มที่จะตอบสนองอย่างไร
อย่าลืมหยุดการดำเนินการชั่วคราวเมื่อแสดงโฆษณาคั่นระหว่างหน้า
โฆษณาคั่นระหว่างหน้ามีหลายประเภท เช่น แบบข้อความ รูปภาพ วิดีโอ และอื่นๆ คุณควรตรวจสอบว่าเมื่อแอปแสดงโฆษณาคั่นระหว่างหน้า แอปจะระงับการใช้ทรัพยากรบางอย่างด้วย เพื่อให้โฆษณาสามารถใช้ประโยชน์จากทรัพยากรเหล่านั้นได้ ตัวอย่างเช่น เมื่อเรียกใช้เพื่อแสดงโฆษณาคั่นระหว่างหน้า ให้หยุดเอาต์พุตเสียงใดๆ ที่แอปของคุณสร้างขึ้นชั่วคราว คุณสามารถเล่นเสียงต่อในเมธอด OnAdDismissedFullScreenContent ของ FullScreenContentListener ที่ติดตั้งไว้ ซึ่งจะเรียกใช้ได้เมื่อผู้ใช้โต้ตอบกับโฆษณาเสร็จแล้ว นอกจากนี้ ให้พิจารณาหยุดงานการคำนวณที่ซับซ้อนชั่วคราว (เช่น Game Loop) ขณะที่โฆษณากำลังแสดง วิธีนี้ช่วยให้ผู้ใช้ไม่พบกราฟิกที่ช้าหรือไม่ตอบสนองหรือวิดีโอที่กระตุก
เผื่อเวลาให้เพียงพอสำหรับการโหลด
การตรวจสอบว่าคุณแสดงโฆษณาคั่นระหว่างหน้าในเวลาที่เหมาะสมเป็นสิ่งสำคัญ และการตรวจสอบว่าผู้ใช้ไม่ต้องรอให้โฆษณาโหลดก็สำคัญไม่แพ้กัน การโหลดโฆษณาล่วงหน้าก่อนที่จะแสดงจะช่วยให้มั่นใจได้ว่าแอปมีโฆษณาคั่นระหว่างหน้าที่โหลดเสร็จสมบูรณ์และพร้อมแสดงเมื่อถึงเวลา
อย่าแสดงโฆษณาต่อผู้ใช้มากเกินไป
แม้การแสดงโฆษณาคั่นระหว่างหน้าถี่ขึ้นในแอปอาจเป็นวิธีเพิ่มรายได้ที่ดี แต่อาจทำให้ประสบการณ์ของผู้ใช้แย่ลงและลดอัตราการคลิกผ่าน ตรวจสอบว่าผู้ใช้ไม่ถูกขัดจังหวะบ่อยเกินไปจนไม่สามารถเพลิดเพลินกับการใช้แอปของคุณได้อีกต่อไป
อย่าใช้ Future ของการโหลดเสร็จสมบูรณ์เพื่อแสดงโฆษณาคั่นระหว่างหน้า
ซึ่งอาจทำให้ผู้ใช้ได้รับประสบการณ์ที่ไม่ดี แต่ให้โหลดโฆษณาล่วงหน้าก่อนที่จะต้องแสดงโฆษณา

แหล่งข้อมูลเพิ่มเติม

ตัวอย่างใน GitHub

วิดีโอแนะนำของ Mobile Ads Garage

เรื่องราวความสำเร็จ

ขั้นตอนถัดไป