2016-09-24 2 views
1

У меня в игре много событий, которые срабатывают много раз во время игры. И я хочу показывать рекламу каждое странное время, когда происходит событие. Но это показывает объявления только один раз, а потом, кажется, что она загружается новые объявления бесконечноAdmob загружает объявления только один раз

using GoogleMobileAds.Api; 
using System; 
using UnityEngine; 

public class AdMobManager : MonoBehaviour 
{ 
#if UNITY_ANDROID 

    private static AdMobManager _instance; 
    private bool isLoading; 
    private bool show; 
    private int isShown = -1; 
#if UNITY_ANDROID 
    string adUnitId = "ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx"; 
#elif UNITY_IPHONE 
     string adUnitId = "ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxx"; 
#else 
     string adUnitId = "unexpected_platform"; 
#endif 

    public int IsShown 
    { 
     get 
     { 
      if (isShown < 0) 
      { 
       isShown = PlayerPrefs.GetInt("shown", 0); 
      } 
      return isShown; 
     } 
     set { isShown = value; } 
    } 


    public static AdMobManager Instance 
    { 
     get { return _instance; } 
     set { _instance = value; } 
    } 

    InterstitialAd interstitial; 

    void Awake() 
    { 
     if (_instance == null) 
      _instance = this; 

     IsShown = PlayerPrefs.GetInt("shown", 0); 
     interstitial = new InterstitialAd(adUnitId); 
    } 

    void Start() 
    { 
     RequestAd(); 
    } 

    public void Show() 
    { 
     Debug.Log("SHOW IS STARTED"); 
     if (IsShown == 0) 
     { 
      if (interstitial.IsLoaded()) 
      { 
       IsShown = 1; 
       Debug.Log("SHOW ADS"); 
       interstitial.Show(); 
      } 
      else 
      { 
       show = true; 
       Debug.Log("REQUESTING A NEW AD"); 
       RequestAd(true); 
      } 
     } 
     else 
     { 
      IsShown = 0; 
     } 
    } 

    private void RequestAd(bool show = false) 
    { 
     if (isLoading) 
     { 
      Debug.Log("RETURN FROM REQUEST AD"); 
      return; 
     } 
     isLoading = true; 
     AdRequest request = new AdRequest.Builder().Build(); 
     // Load the banner with the request. 
     interstitial.LoadAd(request); 
     if (show) 
      interstitial.OnAdLoaded += ShowAd; 
     interstitial.OnAdFailedToLoad += FailedToLoad; 
     interstitial.OnAdClosed += AdClosed; 

    } 

    private void AdClosed(object sender, EventArgs e) 
    { 
     RequestAd(); 
    } 

    private void FailedToLoad(object sender, AdFailedToLoadEventArgs e) 
    { 
     isLoading = false; 
     show = false; 
     Debug.Log("FAILED TO LOAD: " + e.Message); 
    } 

    void ShowAd(object sender, System.EventArgs args) 
    { 
     Debug.Log("LOADED"); 
     if (show) 
     { 
      IsShown = 1; 
      Debug.Log("SHOW ADS"); 
      interstitial.Show(); 
      show = false; 
     } 
     isLoading = false; 
    } 

    void OnApplicationPause(bool pause) 
    { 
     if (pause) 
      PlayerPrefs.SetInt("shown", isShown); 
    } 
#endif 
} 

мой код неправильно или это провал с AdMob?

+0

Я думаю IsShown Мессинг нашу логику, попробуйте комментируя его везде и построить его заново. –

+0

это все, ничего не изменилось – user2686299

+0

делиться своими журналами с ошибками –

ответ

1

хорошо я понял, ошибку, я должен позвонить

interstitial.Destroy(); 

после объявления было показано

Смежные вопросы