โฆษณาที่มีการให้รางวัลคือโฆษณาที่ผู้ใช้มีตัวเลือกในการโต้ตอบเพื่อแลกกับรางวัลในแอป คู่มือนี้จะแสดงวิธีรวมโฆษณาที่มีการให้รางวัลจาก AdMob เข้ากับแอป Unity อ่านเรื่องราวความสําเร็จของลูกค้าได้ที่ กรณีศึกษา 1 กรณีศึกษา 2
สิ่งที่ต้องดำเนินการก่อน
- ปลั๊กอิน Unity 3.16.0 ขึ้นไป
- ทําตามคู่มือเริ่มต้นใช้งานให้เสร็จสมบูรณ์
สร้างออบเจ็กต์โฆษณาที่มีการให้รางวัล
โฆษณาที่มีการให้รางวัลจะขอและแสดงโดยออบเจ็กต์ RewardedAd
ขั้นตอนแรกที่จําเป็นสําหรับการแสดงโฆษณาที่มีการให้รางวัลคือการสร้างออบเจ็กต์ RewardedAd
ใหม่โดยการเรียกใช้เครื่องมือสร้างด้วยรหัสหน่วยโฆษณาเพื่อใช้โหลดโฆษณา ซึ่งจะแสดงในข้อมูลโค้ดต่อไปนี้
using UnityEngine.Events; using UnityEngine; using GoogleMobileAds.Api; using GoogleMobileAds.Common; using UnityEngine.UI; using System; using System.Collections.Generic; public class GoogleMobileAdsDemoScript : MonoBehaviour { private RewardedAd rewardedAd; ... public void Start() { ... this.rewardedAd = new RewardedAd(adUnitId); } }
ทดสอบด้วยโฆษณาทดสอบเสมอ
เมื่อสร้างและทดสอบแอป ให้ตรวจสอบว่าคุณใช้โฆษณาทดสอบแทนโฆษณาจริง มิเช่นนั้นอาจทําให้บัญชีถูกระงับ
วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบสําหรับโฆษณาที่มีการให้รางวัลใน Android และ iOS ดังนี้
Android
ca-app-pub-3940256099942544/5224354917
iOS
ca-app-pub-3940256099942544/1712485313
พารามิเตอร์เหล่านี้ได้รับการกําหนดค่าเป็นพิเศษให้แสดงโฆษณาทดสอบสําหรับทุกคําขอ และคุณใช้แอปเหล่านี้เองได้ขณะเขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่อง อย่าลืมแทนที่ด้วยรหัสหน่วยโฆษณาของคุณเองก่อนที่จะเผยแพร่แอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทํางานของโฆษณาทดสอบของ SDK โฆษณาในอุปกรณ์เคลื่อนที่ได้ที่โฆษณาทดสอบ
โหลดโฆษณา
หากต้องการโหลดโฆษณาที่มีการให้รางวัล ให้เรียกใช้เมธอด loadAd()
ของออบเจ็กต์ RewardedAd
วิธีนี้กําหนดให้อินสแตนซ์ของ AdRequest
เป็นอาร์กิวเมนต์
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
private RewardedAd rewardedAd;
...
public void Start()
{
...
this.rewardedAd = new RewardedAd(adUnitId);
// Create an empty ad request.
AdRequest request = new AdRequest.Builder().Build();
// Load the rewarded ad with the request.
this.rewardedAd.LoadAd(request);
}
}
[ไม่บังคับ] ตรวจสอบการเรียกกลับการยืนยันฝั่งเซิร์ฟเวอร์ (SSV)
แอปที่ต้องมีข้อมูลเพิ่มเติมในการเรียกกลับฝั่งเซิร์ฟเวอร์ควรใช้ฟีเจอร์ข้อมูลที่กําหนดเองของโฆษณาที่มีการให้รางวัล ค่าสตริงที่กําหนดไว้ในออบเจ็กต์โฆษณาที่มีการให้รางวัลจะส่งไปยังพารามิเตอร์การค้นหา custom_data
ของโค้ดเรียกกลับ SSV หากไม่ได้กําหนดค่าข้อมูลที่กําหนดเองไว้ ค่าพารามิเตอร์การค้นหา custom_data
จะไม่แสดงในการเรียกกลับ SSV
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีตั้งค่าตัวเลือก SSV หลังจากที่โหลดโฆษณาที่มีการให้รางวัลแล้ว
void HandleRewardedAdLoaded(RewardedAd ad, AdFailedToLoadEventArgs error)
{
// Create and pass the SSV options to the rewarded ad.
var options = new ServerSideVerificationOptions
.Builder()
.SetCustomData("SAMPLE_CUSTOM_DATA_STRING")
.Build()
ad.SetServerSideVerificationOptions(options);
}
หากคุณต้องการตั้งค่าสตริงรางวัลที่กําหนดเอง คุณต้องทําก่อนแสดงโฆษณา
เหตุการณ์โฆษณา
หากต้องการปรับแต่งลักษณะการทํางานของโฆษณาเพิ่มเติม คุณอาจดึงดูดความสนใจไปที่เหตุการณ์ต่างๆ ในวงจรของโฆษณา เช่น การโหลด การเปิด การปิด และอื่นๆ รอรับเหตุการณ์เหล่านี้โดยลงทะเบียนผู้แทนเหตุการณ์ที่เหมาะสม เหตุการณ์ที่สําคัญที่สุดคือ OnUserEarnedReward
ซึ่งจะเรียกเมื่อผู้ใช้ให้รางวัลดูวิดีโอ คุณยังใช้เหตุการณ์โฆษณาอื่นๆ ได้อีกด้วย ดังที่แสดงด้านล่าง
using GoogleMobileAds.Api; ... public class GoogleMobileAdsDemoScript : MonoBehaviour { private RewardedAd rewardedAd; ... public void Start() { string adUnitId; #if UNITY_ANDROID adUnitId = "ca-app-pub-3940256099942544/5224354917"; #elif UNITY_IPHONE adUnitId = "ca-app-pub-3940256099942544/1712485313"; #else adUnitId = "unexpected_platform"; #endif this.rewardedAd = new RewardedAd(adUnitId); // Called when an ad request has successfully loaded. this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded; // Called when an ad request failed to load. this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad; // Called when an ad is shown. this.rewardedAd.OnAdOpening += HandleRewardedAdOpening; // Called when an ad request failed to show. this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow; // Called when the user should be rewarded for interacting with the ad. this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward; // Called when the ad is closed. this.rewardedAd.OnAdClosed += HandleRewardedAdClosed; // Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the rewarded ad with the request. this.rewardedAd.LoadAd(request); } public void HandleRewardedAdLoaded(object sender, EventArgs args) { MonoBehaviour.print("HandleRewardedAdLoaded event received"); } public void HandleRewardedAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) { MonoBehaviour.print( "HandleRewardedAdFailedToLoad event received with message: " + args.Message); } public void HandleRewardedAdOpening(object sender, EventArgs args) { MonoBehaviour.print("HandleRewardedAdOpening event received"); } public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args) { MonoBehaviour.print( "HandleRewardedAdFailedToShow event received with message: " + args.Message); } public void HandleRewardedAdClosed(object sender, EventArgs args) { MonoBehaviour.print("HandleRewardedAdClosed event received"); } public void HandleUserEarnedReward(object sender, Reward args) { string type = args.Type; double amount = args.Amount; MonoBehaviour.print( "HandleRewardedAdRewarded event received for " + amount.ToString() + " " + type); } }
เหตุการณ์ OnUserEarnedReward
มีอาร์กิวเมนต์เหตุการณ์พิเศษ ซึ่งส่งผ่านอินสแตนซ์ของ Reward
ที่มี Type
และ Amount
ที่อธิบายรางวัลที่ให้ไว้แก่ผู้ใช้
public void HandleUserEarnedReward(object sender, Reward args)
{
string type = args.Type;
double amount = args.Amount;
MonoBehaviour.print(
"HandleRewardedAdRewarded event received for "
+ amount.ToString() + " " + type);
}
เหตุการณ์โฆษณาที่ใช้ได้
OnAdLoaded
- มีการเรียกใช้เมื่อโหลดโฆษณาเสร็จแล้ว
OnAdFailedToLoad
- มีการเรียกใช้เมื่อโหลดโฆษณาไม่สําเร็จ พร็อพเพอร์ตี้
Message
ของAdErrorEventArgs
ที่ระบุอธิบายประเภทของความล้มเหลวที่เกิดขึ้น OnAdOpening
- มีการเรียกใช้เมื่อโฆษณาแสดง ครอบคลุมบนหน้าจอของอุปกรณ์ เราขอแนะนําให้คุณหยุดเอาต์พุตเสียงของแอปหรือ Game Loop ชั่วคราวหากจําเป็น
OnAdFailedToShow
- มีการเรียกใช้เมื่อโฆษณาแสดงไม่สําเร็จ พร็อพเพอร์ตี้
Message
ของAdErrorEventArgs
ที่ระบุอธิบายประเภทของความล้มเหลวที่เกิดขึ้น OnUserEarnedReward
- มีการเรียกใช้เมื่อผู้ใช้ควรได้รับรางวัลเมื่อดูวิดีโอ
พารามิเตอร์
Reward
อธิบายรางวัลที่แสดงต่อผู้ใช้ OnAdClosed
- มีการเรียกใช้เมื่อโฆษณาวิดีโอที่มีการให้รางวัลปิดอยู่เนื่องจากผู้ใช้แตะไอคอนปิดหรือใช้ปุ่มย้อนกลับ หากแอปหยุดเอาต์พุตเสียงหรือ Game Loop ไว้ชั่วคราว แอปนี้เหมาะที่จะกลับมาทํางานอีกครั้ง
แสดงโฆษณา
ก่อนที่จะแสดงโฆษณาที่มีการให้รางวัลแก่ผู้ใช้ ผู้ใช้ต้องแสดงตัวเลือกที่ชัดเจนเพื่อดูเนื้อหาที่มีการให้รางวัลเพื่อแลกกับรางวัล โฆษณาที่มีการให้รางวัลต้องเป็นเนื้อหาที่เลือกใช้เสมอ
หากต้องการแสดงโฆษณาที่มีการให้รางวัล ให้ตรวจสอบเมธอด IsLoaded()
เพื่อยืนยันว่าโฆษณาโหลดเสร็จแล้ว จากนั้นโทรหา show()
โดยตัวอย่างมีดังนี้
private void UserChoseToWatchAd()
{
if (this.rewardedAd.IsLoaded()) {
this.rewardedAd.Show();
}
}
การใช้ OnAdClosed
เพื่อโหลดโฆษณาที่มีการให้รางวัลครั้งถัดไปซ้ํา
RewardedAd
เป็นออบเจ็กต์แบบใช้ครั้งเดียว ซึ่งหมายความว่าเมื่อโฆษณาที่มีการให้รางวัลแสดงขึ้น ก็จะใช้ออบเจ็กต์นั้นโหลดโฆษณาอื่นไม่ได้ หากต้องการขอโฆษณาที่มีการให้รางวัลอื่น
คุณจะต้องสร้างออบเจ็กต์ RewardedAd
ใหม่
แนวทางปฏิบัติแนะนําคือการโหลดโฆษณาที่มีการให้รางวัลอีกรายการหนึ่งในเหตุการณ์โฆษณา OnAdClosed
เพื่อให้โฆษณาที่มีการให้รางวัลครั้งถัดไปเริ่มโหลดทันทีที่ปิดโฆษณาก่อนหน้า
... public class GoogleMobileAdsDemoScript : MonoBehaviour { private RewardedAd rewardedAd; ... public void CreateAndLoadRewardedAd() { #if UNITY_ANDROID string adUnitId = "ca-app-pub-3940256099942544/5224354917"; #elif UNITY_IPHONE string adUnitId = "ca-app-pub-3940256099942544/1712485313"; #else string adUnitId = "unexpected_platform"; #endif this.rewardedAd = new RewardedAd(adUnitId); this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded; this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward; this.rewardedAd.OnAdClosed += HandleRewardedAdClosed; // Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the rewarded ad with the request. this.rewardedAd.LoadAd(request); } ... public void HandleRewardedAdClosed(object sender, EventArgs args) { this.CreateAndLoadRewardedAd(); } }
กําลังโหลดโฆษณาที่มีการให้รางวัลหลายรายการ
หากต้องการโหลดโฆษณาที่มีการให้รางวัลหลายรายการ ให้ทําตามขั้นตอนที่ระบุไว้ในส่วนสร้างออบเจ็กต์โฆษณาที่มีการให้รางวัล และโหลดโฆษณาสําหรับโฆษณาแต่ละรายการที่ต้องการโหลด ข้อมูลโค้ดด้านล่างแสดงวิธีโหลดโฆษณาที่มีการให้รางวัล 2 รายการสําหรับตําแหน่งโฆษณา 2 ตําแหน่งที่แตกต่างกัน
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
private RewardedAd gameOverRewardedAd;
private RewardedAd extraCoinsRewardedAd;
...
public void Start()
{
...
this.gameOverRewardedAd = CreateAndLoadRewardedAd(adUnitId);
this.extraCoinsRewardedAd = CreateAndLoadRewardedAd(adUnitId);
}
public RewardedAd CreateAndLoadRewardedAd(string adUnitId)
{
RewardedAd rewardedAd = new RewardedAd(adUnitId);
rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
rewardedAd.OnAdClosed += HandleRewardedAdClosed;
// Create an empty ad request.
AdRequest request = new AdRequest.Builder().Build();
// Load the rewarded ad with the request.
rewardedAd.LoadAd(request);
return rewardedAd;
}
}
ตัวอย่าง
- ตัวอย่าง HelloWorld % การใช้งานโฆษณาทุกรูปแบบ