โฆษณา Google admob แสดงหลังจากคลิกหลายครั้ง

Aug 20 2020

ฉันใช้ 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 () จะถูกเพิ่มเข้าไปในปุ่ม "ตกลง" โฆษณาทดสอบแสดงอย่างถูกต้อง แต่ปัญหาคือฉันต้องกดปุ่มตกลงหลาย ๆ ครั้งเพื่อให้โฆษณาแสดง ฉันไม่แน่ใจว่าเหตุใดจึงเกิดขึ้น ใครช่วยหน่อยได้ไหม

คำตอบ

EdMarty Aug 21 2020 at 06:03

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

ฉันเดาว่านี่:

public void ShowVideoRewardAd()
{
    if (this.rewardedAd.IsLoaded())
    {
        this.rewardedAd.Show();
    }
}

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

ข้อเสนอแนะของฉันคืออย่าแม้แต่แสดงตัวเลือกในการดูโฆษณาเว้นแต่ว่า IsLoaded จะส่งคืนจริง หรือคุณสามารถแสดงข้อความโต้ตอบ "โปรดรอสักครู่" เมื่อผู้ใช้แตะเพื่อดูวิดีโอหาก IsLoaded เป็นเท็จและรอให้มีการเรียก HandleRewardedAdLoaded หรือ HandleRewardedAdFailedToLoad

Vaillancourt Aug 20 2020 at 20:42

ฉันจะเดาที่นี่ (เดาสองครั้ง)

การคาดเดาประการแรกคือกรอบงานโฆษณายังไม่ได้เริ่มต้นอย่างสมบูรณ์เมื่อคุณพยายามโหลดโฆษณาแรกของคุณ จากเอกสารนี้ดูเหมือนว่าคุณสามารถส่งการโทรกลับไปยังสิ่ง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 บางทีนี่อาจเป็นสาเหตุที่คุณเห็นว่า "ไม่มีอะไรเกิดขึ้น" และคุณต้อง "แตะหลาย ๆ ครั้ง" เนื่องจากในการลองครั้งแรกไม่มีผู้ฟังและผู้ฟังจะ มีเพียงครั้งที่สอง