Chartboost广告未在Unity 3D游戏中展示

时间:2016-03-30 12:08:20

标签: c# android unity3d ads chartboost

我有一个简单的platformer game,其中我使用chartboost和统一广告展示广告,我在测试模式下工作正常,但自从我部署到生产并禁用了测试模式我发现我的插页式广告和视频不会加载或显示,除非曾经在蓝色的月亮中出现同样的游戏,然后又开始失败。

我还注意到我的广告展示在chartboost和Unity上相当低。如果我正确编码,你能告诉我吗?我使用了chartboost示例,通过它构建了我的广告控制器,哦,我正在使用广告缓存,除非广告已经缓存,否则我无法展示它。

以下是代码:

    using UnityEngine;
    using System.Collections;
    using UnityEngine.Advertisements;
    using ChartboostSDK;
    using System;

    public class AdsController : MonoBehaviour
    {
         public static AdsController instance;

// app id for unity apps
private const string _appId = "someID";

public bool canShowChartBoostInterstitial;
public bool canShowChartBoostVideo;

private void Awake()
{
    MakeSingleton();

    if (!canShowChartBoostInterstitial)
    {
        LoadChartBoostInterstitialAds();
    }

    if (!canShowChartBoostVideo)
    {
        LoadChartBoostVideoAds();
    }

    LoadUnityAds();
}

private void MakeSingleton()
{
    if (instance != null)
    {
        Destroy(gameObject);
    }
    else
    {
        instance = this;
        DontDestroyOnLoad(gameObject);
    }
}

private void OnLevelWasLoaded()
{
    if (Application.loadedLevelName == "LevelMenu")
    {
        if (GameController.instance.canShowAds)
        {
            if (canShowChartBoostInterstitial)
            {
                ShowChartBoostInterstitial();
            }
            else
            {
                LoadChartBoostInterstitialAds();
            }
        }
    }
}

private void OnEnable()
{
    Chartboost.didCompleteRewardedVideo += VideoCompleted;
    Chartboost.didCacheInterstitial += DidCacheInterstitial;
    Chartboost.didDismissInterstitial += DidDismissInterstitial;
    Chartboost.didCloseInterstitial += DidCloseInterstitial;
    Chartboost.didCacheRewardedVideo += DidCacheVideo;
    Chartboost.didFailToLoadInterstitial += FailedToLoadInterstitial;
    Chartboost.didFailToLoadRewardedVideo += FailedToLoadVideo;
}

private void OnDisable()
{
    Chartboost.didCompleteRewardedVideo -= VideoCompleted;
    Chartboost.didCacheInterstitial -= DidCacheInterstitial;
    Chartboost.didDismissInterstitial -= DidDismissInterstitial;
    Chartboost.didCloseInterstitial -= DidCloseInterstitial;
    Chartboost.didCacheRewardedVideo -= DidCacheVideo;
    Chartboost.didFailToLoadInterstitial -= FailedToLoadInterstitial;
    Chartboost.didFailToLoadRewardedVideo -= FailedToLoadVideo;
}

public void VideoCompleted(CBLocation location, int reward)
{
    canShowChartBoostVideo = false;

    if (RewardController.instance != null)
    {
        RewardController.instance.VideoWatchedGiveUserAReward();
    }

    LoadChartBoostVideoAds();

}

public void DidCacheInterstitial(CBLocation location)
{
    canShowChartBoostInterstitial = true;
}

public void DidDismissInterstitial(CBLocation location)
{
    canShowChartBoostInterstitial = false;
    LoadChartBoostVideoAds();

    LoadChartBoostInterstitialAds();
}

public void DidCloseInterstitial(CBLocation location)
{
    canShowChartBoostInterstitial = false;
    LoadChartBoostVideoAds();

    LoadChartBoostInterstitialAds();
}

public void DidCacheVideo(CBLocation location)
{
    canShowChartBoostVideo = true;
}

private void FailedToLoadInterstitial(CBLocation location, CBImpressionError error)
{
    canShowChartBoostInterstitial = false;
    LoadChartBoostInterstitialAds();
}

private void FailedToLoadVideo(CBLocation location, CBImpressionError error)
{
    canShowChartBoostVideo = false;

    if (ShopMenuController.instance != null)
    {
        ShopMenuController.instance.FailedToLoadTheVideo();
    }

    LoadChartBoostVideoAds();
}

public void LoadChartBoostVideoAds()
{
    Chartboost.cacheRewardedVideo(CBLocation.Default);
}

public void LoadChartBoostInterstitialAds()
{
    Chartboost.cacheInterstitial(CBLocation.Default);
}

public void ShowChartBoostInterstitial()
{
    if (canShowChartBoostInterstitial)
    {
        Chartboost.showInterstitial(CBLocation.Default);            
    }
    else
    {
        LoadChartBoostInterstitialAds();
    }
}

public void ShowChartBoostVideo()
{
    if (canShowChartBoostVideo)
    {
        Chartboost.showRewardedVideo(CBLocation.Default);
    }
    else
    {
        LoadChartBoostVideoAds();
    }
}

public void LoadUnityAds()
{
    if (Advertisement.isSupported)
    {
        Advertisement.Initialize(_appId, false);
    }
}

public void ShowUnityAds()
{
    if (Advertisement.IsReady())
    {
        Advertisement.Show(null, new ShowOptions()
        {
            resultCallback = result =>
            {
                switch (result)
                {
                    case ShowResult.Finished:
                        GameController.instance.RewardPlayerWithSomething();
                        LoadUnityAds();
                        break;

                    case ShowResult.Failed:
                        GameController.instance.VideoNotLoadedOrUserSkippedTheVideo("Failed to load the video. Please try again.");
                        LoadUnityAds();
                        break;

                    case ShowResult.Skipped:
                        GameController.instance.VideoNotLoadedOrUserSkippedTheVideo("Video skipped.");
                        LoadUnityAds();
                        break;
                }
            }
        });
    }
    else
    {
        GameController.instance.VideoNotLoadedOrUserSkippedTheVideo("Failed to load the video. Please try again.");
        LoadUnityAds();
    }
}

 }

1 个答案:

答案 0 :(得分:0)

每次显示插页式广告时都会运行缓存。

像这样:

   Chartboost.showInterstitial(CBLocation.Default); 
   Chartboost.cacheInterstitial(CBLocation.Default);

这样,您每次展示广告时都会补充缓存。

请记住在初始化后立即缓存。