Как остановить автоматическую загрузку / загрузку рекламы из UnityAds и Vungle?

Я использую как Unity Ads, так и Vungle для своей игры. Я установил их, используя их .unitypackage,

Я уже закончил коды для показа рекламы от них поочередно. Моя проблема сейчас заключается в том, как остановить их выборку / загрузку после закрытия их первой рекламы? Или есть возможность остановить выборку во время ее получения.

Это приводит к сбою моей игры из-за нехватки памяти, так как в памяти уже есть 2 объявления плюс ресурсы для моей игры.

Я просмотрел исходные коды и не могу найти API, чтобы остановить выборку или выгрузку ожидающих показа объявлений. Я посмотрел на их документацию, но нет подробностей, чтобы сделать это.

Вот мой текущий код:

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

}

1 ответ

Unity Ads и Vungle сами обрабатывают кеширование рекламы, и остановить его невозможно. Это сделано, поскольку обе сети показывают видеообъявления, а видеообъявления занимают время на буферизацию, если не были предварительно кэшированы перед отображением

Другие вопросы по тегам