Audience Network ช่วยให้คุณสร้างรายได้จากแอพ Android และ iOS ของคุณได้ด้วยโฆษณาบน Facebook โฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบเป็นประสบการณ์แบบเต็มหน้าจอที่ผู้ใช้สามารถเลือกที่จดูโฆษณาแบบวิดีโอแลกกับสิ่งตอบแทน เช่น สกุลเงินเสมือนจริง ไอเท็มในแอพ เนื้อหาสำหรับสมาชิกโดยเฉพาะ และอื่นๆ ได้ ประสบการณ์การรับชมโฆษณาจะเป็นวิดีโอสั้นๆ และมีการ์ดต่อท้ายเป็นการกระตุ้นให้ดำเนินการ เมื่อผู้ใช้ดูวิดีโอจนจบแล้ว คุณจะได้รับการเรียกกลับให้มอบรางวัลที่แนะนำให้กับผู้ใช้ดังกล่าว
อย่าลืมดูคู่มือเริ่มต้นใช้งาน Audience Network และเริ่มต้นใช้งาน Unity ก่อนดำเนินการต่อ
ขั้นตอนแรกในการแสดงโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบคือการสร้างอ็อบเจ็กต์ 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 สำหรับหน่วยโฆษณาแบบวิดีโอที่มีรางวัลหลังชมจบนี้ถัดไป คุณสามารถนำการเรียกกลับบางรายการไปใช้เพื่อสมัครรับข้อมูลเหตุการณ์วงจรอายุของโฆษณาได้ ฟังเหตุการณ์เหล่านี้โดยการลงทะเบียนตัวแทนสำหรับเหตุการณ์ ตามที่แสดงในตัวอย่างด้านล่าง:
... // 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(); } }); ...
สำหรับ 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
เมื่อสร้างอินสแตนซ์ RewardedVideoAd
แล้ว ขั้นตอนถัดไปคือการโหลดโฆษณา ซึ่งทำได้โดยเรียกเมธอด loadAd
ในตัวอย่างที่แสดงด้านบน นี่คือวิธีการเริ่มโหลดโฆษณา:
... this.rewardedVideoAd.LoadAd(); ...
ขั้นตอนสุดท้าย หลังจากมีการโหลดโฆษณาแล้ว คุณจะสามารถเรียกเมธอด 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 ที่ระบุเพื่อตรวจสอบความถูกต้องของอิมเพรสชั่นโฆษณาแต่ละรายการ และตรวจสอบว่าควรมอบรางวัลให้หรือไม่
placementId
: ID ตำแหน่งการจัดวาง Audience NetworkRewardData
- อ็อบเจ็กต์ RewardData
ประกอบด้วย UserId
ที่แสดง ID ผู้ใช้ และ Currency
ที่แสดงรางวัลจริงในเกม200 response
: คำขอถูกต้องและควรส่งรางวัลNon 200 response
: คำขอไม่ถูกต้องและไม่ควรส่งรางวัลRewardedVideoAdDidSucceed
- มีการทริกเกอร์ก็ต่อเมื่อได้รับ 200 response ในระหว่างขั้นตอนที่ 3RewardedVideoAdDidFail
- มีการทริกเกอร์ก็ต่อเมื่อได้รับ 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