首页 > 解决方案 > 如何检查奖励广告是否可用?

问题描述

我需要检查奖励视频是否已加载,所以我有这个功能:

private bool IsAdAvailable()
{
    if (AdmobController.instance.rewardBasedVideo == null) return false;

    bool isLoaded = AdmobController.instance.rewardBasedVideo.IsLoaded();

    if (!isLoaded)
    {
        AdmobController.instance.RequestRewardBasedVideo();
    }

    return isLoaded;
}

这是 RequestRewardBasedVideo 功能:

         public void RequestRewardBasedVideo()
         {
#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

              // Create an empty ad request.
              AdRequest request = new AdRequest.Builder().Build();
             // Load the rewarded video ad with the request.
              this.rewardBasedVideo.LoadAd(request, adUnitId);
         }

这是显示奖励视频的功能,如果已加载,如果未加载,它将向用户显示该消息。

public void ShowRewardedAds()
{
    if (rewardBasedVideo.IsLoaded())
    {
        rewardBasedVideo.Show();
    }
    else
    {
        MonoBehaviour.print("Reward based video ad is not ready yet");
    }

}

但是当我统一运行我的程序时,在控制台中,这条消息会不停地显示:

Dummy IsLoaded
UnityEngine.Debug:Log(Object)

这就像程序不断检查是否加载了奖励视频。

我试图删除所有语句,IsAdAvailable()return isLoaded我将其替换为return true.

并且消息不停地显示,它只显示了一次。这就是我想要的。

那么有没有更好的方法来检查奖励视频是否已加载?

如果您需要有关我的代码的更多信息,请随时询问。

这是我的 Admob 控制器脚本: https ://pastebin.com/TNNPKxQF

这是奖励视频按钮脚本: https ://pastebin.com/FipHV9wt

这是奖励视频回调脚本: https ://pastebin.com/g65zjBwt

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

#编辑

IsAdAvailable()我从exept 中删除了所有语句,AdmobController.instance.RequestRewardBasedVideo(); 然后return true 运行我的程序,问题仍然存在,消息 Dummy IsLoaded 不断显示。所以我认为这个说法的问题AdmobController.instance.RequestRewardBasedVideo();

标签: c#unity3dconsoleadmobads

解决方案


您可以在Google AdMob 移动广告 SDK (Unity) 文档中阅读如何实施激励视频广告。

检查奖励视频是否已加载的最佳方法是挂钩 RewardBasedVideoAdOnAdLoaded事件:

using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardBasedVideoAd rewardBasedVideo;
    ...

    public void Start()
    {
        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

        // Called when an ad request has successfully loaded.
        rewardBasedVideo.OnAdLoaded += HandleRewardBasedVideoLoaded;
        // Called when an ad request failed to load.
        rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;

        this.RequestRewardBasedVideo();
    }

    private void RequestRewardBasedVideo()
    {
        #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

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded video ad with the request.
        this.rewardBasedVideo.LoadAd(request, adUnitId);
    }

    public void HandleRewardBasedVideoLoaded(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardBasedVideoLoaded event received");
    }

    public void HandleRewardBasedVideoFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardBasedVideoFailedToLoad event received with message: "
                             + args.Message);
    }

您还应该使用事件来检查广告是否显示、关闭、点击等。


推荐阅读