首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止自动抓取/加载UnityAds和Vungle的广告?

如何停止自动抓取/加载UnityAds和Vungle的广告?
EN

Stack Overflow用户
提问于 2015-04-29 12:52:51
回答 1查看 1.4K关注 0票数 2

我在我的游戏中同时使用Unity广告和Vungle。我是用他们的.unitypackage安装的。

我已经完成了交替显示他们的广告的代码。我现在的问题是如何在关闭第一个广告后阻止他们获取/加载?或者可以选择在获取时停止获取。

它使我的游戏崩溃由于内存压力,因为两个广告已经在内存中加上我的游戏的资源。

我浏览了源代码,找不到任何API来停止抓取或卸载等待显示的广告。我看了他们的记录,但没有具体细节。

下面是我当前的代码:

代码语言:javascript
复制
using UnityEngine;
using System.Collections;
using UnityEngine.Advertisements;  


public class AdsMngr : MonoManager<AdsMngr> {
    enum AdsEngine{

        VUNGLE,
        UNITY_ADS,

        MAXNUM
    };

    enum AdsStatus{
        IDLE,
        WAITING,
        SHOWING,

        MAXNUM
    }

    AdsEngine m_curAdsEngine = AdsEngine.UNITY_ADS;
    AdsStatus m_curAdsStatus = AdsStatus.IDLE;

    #if UNITY_IPHONE || UNITY_ANDROID


    protected override void Awake(){
        base.Awake ();

        m_curAdsEngine = AdsEngine.UNITY_ADS; //VUNGLE;

        SetupAdsCallback ();

    }

    protected override void OnDestroy(){

        base.OnDestroy();

        UnsetupAdsCallback();

    }

    void SetNextAdEngine (){
        m_curAdsEngine = (AdsEngine)((int)(m_curAdsEngine + 1) % (int)AdsEngine.MAXNUM);

    }

    void Update(){

        if (m_curAdsStatus == AdsStatus.WAITING) {
            Debug.Log ("Waiting for ads to load: "+m_curAdsEngine+"\n");

            bool bHasReadyAds = false;

            switch(m_curAdsEngine){
            case AdsEngine.VUNGLE:    if( Vungle.isAdvertAvailable()){bHasReadyAds = true;} break;
            case AdsEngine.UNITY_ADS: if( Advertisement.isReady()   ){bHasReadyAds = true;} break;
            }

            if (bHasReadyAds) {
                LoadingOverlay.Instance.Close();
                PromptOverlay.Instance.Close();
                ShowAd ();
            }
        }

    }

    public void StartAd(){

        LoadingOverlay.Instance.Open();

        //---start refetching/recaching the ads here
        switch(m_curAdsEngine){
            case AdsEngine.VUNGLE: {
                Vungle.init( "mygame_forAndroid", "mygame_forIOS" );
            }break;
            case AdsEngine.UNITY_ADS: {
                if (Advertisement.isSupported) {
                    //Advertisement.allowPrecache = true;
                    Advertisement.Initialize ("12345", true);

                    Debug.Log("Advertisement Initialized.\n");
                } else {
                    Debug.Log("Platform not supported\n");
                }

            }break;
        }

        m_curAdsStatus = AdsStatus.WAITING;

    }

    public void StopWaitingAds(){
        m_curAdsStatus = AdsStatus.IDLE;
        //TODO: cancel the loading of ads.

        //xxx: test code only
        SetNextAdEngine ();


    }

    public void ShowAd(){
        switch(m_curAdsEngine){
            case AdsEngine.VUNGLE: {
                Debug.Log("*** Vungle Ads is available. Now playing...\n");
                Vungle.playAd();
                Vungle.setSoundEnabled(false);
            }break;
            case AdsEngine.UNITY_ADS: {
                    Debug.Log("*** Unity Ads is available. Now playing...\n");
                    Advertisement.Show(null, new ShowOptions {
                        pause = true,
                        resultCallback = result => {
                            Debug.Log(result.ToString());
                            onAdEndedEvent();
                        }
                    });
            }break;
        }

        m_curAdsStatus = AdsStatus.SHOWING;
    }

    #region Optional: Example of Subscribing to All Events

    void SetupAdsCallback()
    {
        Vungle.onAdStartedEvent += onAdStartedEvent;
        Vungle.onAdEndedEvent += onAdEndedEvent;
        Vungle.onAdViewedEvent += onAdViewedEvent;
        Vungle.onCachedAdAvailableEvent += onCachedAdAvailableEvent;
    }


    void UnsetupAdsCallback()
    {
        Vungle.onAdStartedEvent -= onAdStartedEvent;
        Vungle.onAdEndedEvent -= onAdEndedEvent;
        Vungle.onAdViewedEvent -= onAdViewedEvent;
        Vungle.onCachedAdAvailableEvent -= onCachedAdAvailableEvent;
    }



    void onAdStartedEvent()
    {
        Debug.Log( "onAdStartedEvent" );
    }


    void onAdEndedEvent()
    {
        Debug.Log( "onAdEndedEvent" );

        EndGameRewardOverlay.Instance.SetMultiplier(2);
        EndGameRewardOverlay.Instance.Open();

        if (m_curAdsEngine == AdsEngine.VUNGLE) {
            Vungle.setSoundEnabled(true);       
        }

        m_curAdsStatus = AdsStatus.IDLE;
        SetNextAdEngine();

    }


    void onAdViewedEvent( double watched, double length )
    {
        Debug.Log( "onAdViewedEvent. watched: " + watched + ", length: " + length );
    }


    void onCachedAdAvailableEvent()
    {
        Debug.Log( "onCachedAdAvailableEvent" );
    }

    #endregion

    #endif

}
EN

回答 1

Stack Overflow用户

发布于 2015-07-24 19:12:05

Unity Ads和Vungle自己处理广告缓存,没有办法阻止它。这是因为两个网络都显示视频广告,如果在显示之前没有预先缓存,视频广告需要时间进行缓冲。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29934654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档