【问题标题】:How to check if Rewarded Ads are available?如何检查奖励广告是否可用?
【发布时间】:2019-01-30 10:22:36
【问题描述】:

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

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

#edit

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

【问题讨论】:

    标签: c# unity3d console admob ads


    【解决方案1】:

    您可以在Google AdMob Mobile Ads SDK (Unity) documentation.阅读如何实施激励视频广告

    检查奖励视频是否已加载的最佳方法是挂接到 RewardBasedVideoAd OnAdLoaded 事件:

    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);
        }
    

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

    【讨论】:

    • 是的,这正是我正在做的,你可以在这里查看我的脚本pastebin.com/FipHV9wt这是rewardedButton 脚本
    • 我注意到这个函数负责多次调用 IsAdAvalible()。私人无效 IUpdate() { SetActive(IsAvailableToShow());这不是我的代码,但我需要理解并修复它。
    • 在 start 方法中,您正在使用 InvokeRepeating 函数,该函数将每秒调用 IUpdate 方法
    • 是的,就是这个问题,我删除了invoke方法和update函数,现在完美运行了。
    • 没问题,如果您还有其他无法解决的问题,建议您开始一个新问题。
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多