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

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

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

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

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

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

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

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

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของโฆษณาทดสอบของ 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 มุมมองระดับบนสุดคือการอ้างอิง 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 = interstitial_ad->Initialize(ad_parent);
    
  4. นอกจากการเก็บอนาคตไว้เป็นตัวแปรแล้ว คุณยังตรวจสอบสถานะของการดำเนินการเริ่มต้นเป็นระยะๆ ได้โดยเรียกใช้ 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 ได้ที่ใช้สัญญาซื้อขายล่วงหน้าเพื่อตรวจสอบสถานะความสำเร็จของการเรียกใช้เมธอด

โหลดโฆษณา

การโหลดโฆษณาทำได้โดยใช้เมธอด 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() และคลาสย่อยดังกล่าวจะได้รับการติดต่อกลับเมื่อโฆษณาแสดงผลสำเร็จหรือไม่สำเร็จ และเมื่อปิด

โค้ดต่อไปนี้แสดงวิธีขยายเวลาชั้นเรียนและกําหนดชั้นเรียนให้กับโฆษณา

  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 เพื่อพิจารณาเมื่อโฆษณาแสดงเนื้อหาแบบเต็มหน้าจอได้ แต่ในอนาคต Show() ก็จะแสดงเวลาที่โฆษณาแสดงผลสำเร็จด้วยเช่นกัน

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

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

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

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

ตัวอย่างใน GitHub

บทแนะนำแบบวิดีโอสำหรับ Mobile Ads Garage

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

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