โฆษณา Google admob แสดงหลังจากคลิกหลายครั้ง
ฉันใช้ google admob เพื่อแสดงโฆษณาวิดีโอที่มีการให้รางวัลในเกมของฉัน เมื่อเกมจบลงปุ่มเล่นวิดีโอจะเปิดใช้งาน หากผู้ใช้คลิกที่แผงนั้นแผงจะเปิดขึ้นเพื่อถามว่า "คุณต้องการฟื้นผู้เล่นด้วยการดูโฆษณา" มีสองตัวเลือกหนึ่งคือกด "ตกลง" และอีกตัวเลือกหนึ่งเพื่อยกเลิก "x" ปัญหาคือฉันต้องคลิก "ตกลง" หลาย ๆ ครั้งเพื่อให้โฆษณาแสดง บางครั้งโฆษณาไม่แสดงเลยไม่ว่าฉันจะคลิก "ตกลง" กี่ครั้งก็ตามนี่คือโค้ดที่ฉันมีใน adscript:
public class AdScript : MonoBehaviour
{
string App_ID = "ca-app-pub-123454545~12345678";
string Video_Ad_Id = "ca-app-pub-3940256099942544/5224354917";
private RewardedAd rewardedAd;
void Start()
{
MobileAds.Initialize(App_ID);
}
public void RequestRewardBasedVideo()
{
this.rewardedAd = new RewardedAd(Video_Ad_Id);
AdRequest request = new AdRequest.Builder().Build();
this.rewardedAd.LoadAd(request);
this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;
}
public void ShowVideoRewardAd()
{
if (this.rewardedAd.IsLoaded())
{
this.rewardedAd.Show();
}
}
public void HandleRewardedAdLoaded(object sender, EventArgs args)
{
MonoBehaviour.print("HandleRewardedAdLoaded event received");
}
public void HandleRewardedAdFailedToLoad(object sender, AdErrorEventArgs 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)
{
this.RequestRewardBasedVideo();
}
public void HandleUserEarnedReward(object sender, Reward args)
{
GameManager.instance.ReceiveReward();
}
}
ฟังก์ชัน RequestRewardBasedVideo () จะถูกเพิ่มลงในปุ่มเล่นวิดีโอและ ShowVideoRewardAd () จะถูกเพิ่มเข้าไปในปุ่ม "ตกลง" โฆษณาทดสอบแสดงอย่างถูกต้อง แต่ปัญหาคือฉันต้องกดปุ่มตกลงหลาย ๆ ครั้งเพื่อให้โฆษณาแสดง ฉันไม่แน่ใจว่าเหตุใดจึงเกิดขึ้น ใครช่วยหน่อยได้ไหม
คำตอบ
โฆษณาอาจใช้เวลาโหลดสักครู่ ชอบนาน ๆ ในความเป็นจริงนานมากแล้วที่ฉันมักจะเริ่มโหลดโฆษณาแรกของฉันเมื่อเปิดตัวแอปและเริ่มโหลดโฆษณาถัดไปทันทีหลังจากที่โฆษณาก่อนหน้าเล่นเสร็จ
ฉันเดาว่านี่:
public void ShowVideoRewardAd()
{
if (this.rewardedAd.IsLoaded())
{
this.rewardedAd.Show();
}
}
เป็นเพียงการข้ามการเรียกให้แสดงซ้ำแล้วซ้ำอีกทุกครั้งที่คุณแตะปุ่มจนกว่าโฆษณาจะโหลดจริง
ข้อเสนอแนะของฉันคืออย่าแม้แต่แสดงตัวเลือกในการดูโฆษณาเว้นแต่ว่า IsLoaded จะส่งคืนจริง หรือคุณสามารถแสดงข้อความโต้ตอบ "โปรดรอสักครู่" เมื่อผู้ใช้แตะเพื่อดูวิดีโอหาก IsLoaded เป็นเท็จและรอให้มีการเรียก HandleRewardedAdLoaded หรือ HandleRewardedAdFailedToLoad
ฉันจะเดาที่นี่ (เดาสองครั้ง)
การคาดเดาประการแรกคือกรอบงานโฆษณายังไม่ได้เริ่มต้นอย่างสมบูรณ์เมื่อคุณพยายามโหลดโฆษณาแรกของคุณ จากเอกสารนี้ดูเหมือนว่าคุณสามารถส่งการโทรกลับไปยังสิ่งMobileAds.Initialize();
ที่จะถูกเรียกเมื่อการเริ่มต้นเสร็จสิ้น คุณจะต้องรอจนกว่าการเริ่มต้นจะเสร็จสมบูรณ์ก่อนที่จะขอโฆษณาแรกของคุณ ในตอนแรกเอกสารประกอบค่อนข้างไม่ดีเกี่ยวกับวิธีการทำเช่นนี้ดังนั้นฉันขอแนะนำให้คุณขุดลึกลงไปอีกเล็กน้อยเพื่อหาข้อมูลเพิ่มเติมว่าคุณจะบรรลุเป้าหมายนี้ได้อย่างไร
การคาดเดาประการที่สองคือคุณกำลังพยายามโหลดโฆษณาก่อนที่จะตั้งค่าตัวจัดการเหตุการณ์ หากเราดูเอกสารอีกครั้งปรากฏว่าพวกเขาโทรไปหา
// Create an empty ad request.
AdRequest request = new AdRequest.Builder().Build();
// Load the rewarded ad with the request.
this.rewardedAd.LoadAd(request);
หลังจากตั้งค่าผู้ฟังเหตุการณ์แล้ว การเดาก็คือทันทีที่คุณขอให้ "LoadAd" เฟรมเวิร์กจะดึงรายชื่อผู้ฟังในขณะนั้นและดำเนินการแบบอะซิงโครนัสพร้อมกับเรียกใช้วิธีการที่คุณให้มาในขณะที่โทร ไม่มีผู้ฟังในขณะที่เรียก LoadAd บางทีนี่อาจเป็นสาเหตุที่คุณเห็นว่า "ไม่มีอะไรเกิดขึ้น" และคุณต้อง "แตะหลาย ๆ ครั้ง" เนื่องจากในการลองครั้งแรกไม่มีผู้ฟังและผู้ฟังจะ มีเพียงครั้งที่สอง