เพิ่มโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบไปยังแอพ Unity

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

อย่าลืมดูคู่มือเริ่มต้นใช้งาน Audience Network และเริ่มต้นใช้งาน Unity ก่อนดำเนินการต่อ

ขั้นตอนของโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบ

ขั้นตอนที่ 1: การเริ่มต้นโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบ

ขั้นตอนที่ 2: การเพิ่มเหตุการณ์การเรียกกลับ

ขั้นตอนที่ 3: โหลดโฆษณา

ขั้นตอนที่ 4: การแสดงโฆษณา

ขั้นตอนที่ 1: การเริ่มต้นโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบ

ขั้นตอนแรกในการแสดงโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบคือการสร้างอ็อบเจ็กต์ RewardedVideoAd ในสคริปต์ C# ที่แนบมากับ GameObject

...
using AudienceNetwork;
...

public class RewardedVideoAdTest : MonoBehaviour
{
    public void LoadRewardedVideo()
    {
        // Create the rewarded video unit with a placement ID (generate your own on the Facebook app settings).
        // Use different ID for each ad placement in your app.
        this.rewardedVideoAd = new RewardedVideoAd("YOUR_PLACEMENT_ID");

        this.rewardedVideoAd.Register(this.gameObject);

        // Set delegates to get notified on changes or when the user interacts with the ad.
        this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() {
            Debug.Log("RewardedVideo ad loaded.");
            this.isLoaded = true;
        });
        this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) {
            Debug.Log("RewardedVideo ad failed to load with error: " + error);
        });
        this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() {
            Debug.Log("RewardedVideo ad logged impression.");
        });
        this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() {
            Debug.Log("RewardedVideo ad clicked.");
        });

        this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() {
            Debug.Log("Rewarded video ad did close.");
            if (this.rewardedVideoAd != null) {
                this.rewardedVideoAd.Dispose();
            }
        });

        // Initiate the request to load the ad.
        this.rewardedVideoAd.LoadAd();
    }
}

ตัวสร้างสำหรับ RewardedVideoAd จะมีพารามิเตอร์ดังต่อไปนี้

  • placementId - ID ตำแหน่งการจัดวาง Audience Network สำหรับหน่วยโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบนี้

ขั้นตอนที่ 2: การเพิ่มเหตุการณ์การเรียกกลับ

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

...
// Set delegates to get notified on changes or when the user interacts with the ad.
this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() {
    Debug.Log("RewardedVideo ad loaded.");
    this.isLoaded = true;
});
this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) {
    Debug.Log("RewardedVideo ad failed to load with error: " + error);
});
this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() {
    Debug.Log("RewardedVideo ad logged impression.");
});
this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() {
    Debug.Log("RewardedVideo ad clicked.");
});

this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() {
    Debug.Log("Rewarded video ad did close.");
    if (this.rewardedVideoAd != null) {
        this.rewardedVideoAd.Dispose();
    }
});
...

การเรียกกลับสำหรับกิจกรรมโฆษณาที่ถูกทำลายใน Unity ของ Android

สำหรับ Android เท่านั้น

ในปัจจุบันเกม Unity สำหรับ Android จะรองรับให้ Activity ของ Unity หลักมี launchMode ของ singleTask เท่านั้น โปรดดูเอกสาร Unity สำหรับไฟล์กำกับของ Android และเอกสาร Android สำหรับกิจกรรม

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

สำหรับโฆษณาคั่น:

this.interstitialAd.interstitialAdDidClose = (delegate() { Debug.Log("Interstitial ad did close."); this.didClose = true; if (this.interstitialAd != null) { this.interstitialAd.Dispose(); } }); #if UNITY_ANDROID /* * สำหรับ Android เท่านั้น * ระบบจะทริกเกอร์การเรียกกลับนี้หากกิจกรรมโฆษณาคั่นถูก * ทำลายโดยไม่มีการปิดอย่างถูกต้อง โดยจะเกิดขึ้นได้หาก * แอพใน launchMode:singleTask (เช่น เกม Unity) ถูกใช้งานใน * พื้นหลังและมีการเปิดใช้งานอีกครั้งโดยการแตะไอคอน */ this.interstitialAd.interstitialAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Interstitial activity destroyed without being closed first."); Debug.Log("Game should resume."); } }); #endif 

สำหรับวิดีโอที่มีรางวัลหลังชมจบ:

this.rewardedVideoAd.rewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); this.didClose = true; if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); #if UNITY_ANDROID /* * สำหรับ Android เท่านั้น * ระบบจะทริกเกอร์การเรียกกลับนี้หากกิจกรรมโฆษณาวิดีโอที่มีรางวัลหลังชมจบถูก * ทำลายโดยไม่มีการปิดอย่างถูกต้อง โดยจะเกิดขึ้นได้หาก * แอพใน launchMode:singleTask (เช่น เกม Unity) ถูกใช้งานใน * พื้นหลังและมีการเปิดใช้งานอีกครั้งโดยการแตะไอคอน */ this.rewardedVideoAd.rewardedVideoAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Rewarded video activity destroyed without being closed first."); Debug.Log("Game should resume. User should not get a reward."); } }); #endif 

ขั้นตอนที่ 3: โหลดโฆษณา

เมื่อสร้างอินสแตนซ์ RewardedVideoAd แล้ว ขั้นตอนถัดไปคือการโหลดโฆษณา ซึ่งทำได้โดยเรียกเมธอด loadAd

ในตัวอย่างที่แสดงด้านบน นี่คือวิธีการเริ่มโหลดโฆษณา:

...
this.rewardedVideoAd.LoadAd();
...

ขั้นตอนที่ 4: การแสดงโฆษณา

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

public void ShowRewardedVideo()
{
    if (this.isLoaded) {
        this.rewardedVideoAd.Show();
        this.isLoaded = false;
    } else {
        Debug.Log("Ad not loaded. Click load to request an ad.");
    }
}

การตรวจสอบความถูกต้องของรางวัลในฝั่งเซิร์ฟเวอร์

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

ภาพรวม

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

  1. SDK ของ Audience Network ส่งคำขอโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบด้วยพารามิเตอร์ต่อไปนี้
    • placementId: ID ตำแหน่งการจัดวาง Audience Network
    • RewardData - อ็อบเจ็กต์ RewardData ประกอบด้วย UserId ที่แสดง ID ผู้ใช้ และ Currency ที่แสดงรางวัลจริงในเกม
  2. เมื่อรับชมวิดีโอจนจบแล้ว เซิร์ฟเวอร์ของ Facebook จะส่งค่าเหล่านี้ไปยังตำแหน่งข้อมูลที่คุณระบุพร้อมกับข้อมูลลับของแอพและ ID ธุรกรรมที่ไม่ซ้ำกัน
  3. เมื่อได้รับแล้ว เซิร์ฟเวอร์จะตรวจสอบความถูกต้องของคำขอและตอบกลับดังนี้
    • 200 response: คำขอถูกต้องและควรส่งรางวัล
    • Non 200 response: คำขอไม่ถูกต้องและไม่ควรส่งรางวัล
  4. เมื่อชมวิดีโอจบแล้ว การ์ดต่อท้ายจะปรากฏขึ้นและหนึ่งในเหตุการณ์ต่อไปนี้จะทำงาน
    • RewardedVideoAdDidSucceed - มีการทริกเกอร์ก็ต่อเมื่อได้รับ 200 response ในระหว่างขั้นตอนที่ 3
    • RewardedVideoAdDidFail - มีการทริกเกอร์ก็ต่อเมื่อได้รับ Non 200 response ในระหว่างขั้นตอนที่ 3

ตัวอย่างของ URL จากเซิร์ฟเวอร์ของ Facebook ที่จะไปถึงตำแหน่งข้อมูลของผู้เผยแพร่สื่อ: https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID

ขั้นตอนการทำงานของคุณจะมีลักษณะดังนี้

การนำไปใช้งาน

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

public class RewardedVideoAdTest : MonoBehaviour
{
  ...
  private bool isLoaded;
  private RewardedVideoAd rewardedVideoAd;

  public void LoadRewardedVideo()

    //Set the rewarded ad data
    RewardData rewardData = new RewardData();
    rewardData.UserId = "USER_ID";
    rewardData.Currency = "REWARD_ID";

    // Instantiate RewardedVideoAd with reward data
    this.rewardedVideoAd = new RewardedVideoAd("YOUR_PLACEMENT_ID", rewardData);
    this.rewardedVideoAd.Register(this.gameObject);

    // Set delegates to get notified on changes or when the user interacts with the ad.
    this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() {
        Debug.Log("RewardedVideo ad loaded.");
        this.isLoaded = true;
    });
    this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) {
        Debug.Log("RewardedVideo ad failed to load with error: " + error);
    });
    this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() {
        Debug.Log("RewardedVideo ad logged impression.");
    });
    this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() {
        Debug.Log("RewardedVideo ad clicked.");
    });
    this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() {
        Debug.Log("Rewarded video ad did close.");
        if (this.rewardedVideoAd != null) {
            this.rewardedVideoAd.Dispose();
        }
    });

    // For S2S validation you need to register the following two callback
    this.rewardedVideoAd.RewardedVideoAdDidSucceed = (delegate() {
        Debug.Log("Rewarded video ad validated by server");
    });
    this.rewardedVideoAd.RewardedVideoAdDidFail = (delegate() {
        Debug.Log("Rewarded video ad not validated, or no response from server");
    });       

    this.rewardedVideoAd.loadAd();
  }
  ...
}

เพื่อให้แอพของคุณได้รับแจ้งว่ารางวัลผ่านการตรวจสอบหรือไม่ คุณจะต้องใช้การเรียกกลับ RewardedVideoAdDidSucceed และ RewardedVideoAdDidFail นอกเหนือจากการเรียกกลับอื่นๆ สำหรับ RewardedVideoAd

หลังจากมีการโหลดโฆษณาแล้ว คุณจะสามารถแสดงโฆษณาด้วยเมธอด Show เช่นเดียวกับ RewardedVideoAd ปกติ

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

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

ทำตามคำแนะนำของเราในการผสานรูปแบบโฆษณาต่างๆ เข้าในแอพ Unity ของคุณ:

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