Интерстициальные объявления в Unity

У меня есть этот код для InterstitialAds в Unity, и я хочу запускать эту полноэкранную рекламу каждый раз, когда уровень закрывается и начинается новый уровень, поэтому я использую функцию OnDestroy, но когда мне нужно вызвать interstitial.destroy();? Между: Правильный ли код для правильной работы игры? Спасибо за все ответы и извините за мой английский:)

    public class GoogleAdsScript : MonoBehaviour
    {
        bool isLoaded = false;
        private InterstitialAd interstitial;
        private BannerView bannerView;

        void Start()
        {
            RequestInterstitial();

            //RequestBanner();
        }

        void OnDestroy()
        {
            if (interstitial.IsLoaded() && isLoaded == false)
            {
                interstitial.Show();
                isLoaded = true;
            }
        }

        private void RequestInterstitial()
        {
    #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/1033173712";
    #elif UNITY_IPHONE
            string adUnitId = "INSERT_IOS_INTERSTITIAL_AD_UNIT_ID_HERE";
    #else
            string adUnitId = "unexpected_platform";
    #endif

            // Initialize an InterstitialAd.
             interstitial = new InterstitialAd(adUnitId);
            // Create an empty ad request.
            AdRequest request = new AdRequest.Builder().Build();
            // Load the interstitial with the request.
            interstitial.LoadAd(request);
        }

        private void RequestBanner()
        {
    #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/6300978111";
    #elif UNITY_IPHONE
            string adUnitId = "INSERT_IOS_BANNER_AD_UNIT_ID_HERE";
    #else
            string adUnitId = "unexpected_platform";
    #endif

            // Create a 320x50 banner at the top of the screen.
            bannerView = new BannerView(adUnitId, AdSize.SmartBanner, AdPosition.Top);
            // Create an empty ad request.
            AdRequest request = new AdRequest.Builder().Build();
            // Load the banner with the request.
            bannerView.LoadAd(request);
        }


    }

2 ответа

Решение

Если скрипт (GoogleAdsScript) который держит InterstitialAd ссылка на экземпляр (interstitial) собирается уничтожить, вы должны позвонить interstitial.destroy();, Вы делаете это, чтобы не потерять ссылку.

Мое предложение состоит в том, чтобы сделать важные функции в GoogleAdsScript сценарий будет public, Прикреплять GoogleAdsScript в GameObject называется AdsObj. Положил DontDestroyOnLoad(transform.gameObject); в Awake() функция GoogleAdsScript скрипт, чтобы он не разрушался при загрузке новой сцены. Теперь вы можете получить доступ GoogleAdsScript из других скриптов, чтобы показать или скрыть рекламу.

public class OtherScript : MonoBehaviour
{
    public GoogleAdsScript googleAds;

    void Start()
    {
        googleAds = GameObject.Find("AdsObj").GetComponent<GoogleAdsScript>();
        googleAds.RequestInterstitial();//Assumes that RequestInterstitial is now public
    }
}

Нет причин разрушать GoogleAdsScript сценарий больше.

Это сработало для меня...

Псевдо:

  1. Создайте статический скрипт менеджера объявлений (см. Пример ниже)
  2. Запросите промежуточную рекламу в начале уровня.
  3. Когда уровень пройден, проверьте, загружено ли объявление, затем покажите его.
  4. Сразу после этого загрузите свой следующий уровень или сцену меню (НЕ УНИЧТОЖАЙТЕ ПРОМЕЖУТОЧНОЕ ОБЪЯВЛЕНИЕ!)

Пример статического AdManagerScript:

using GoogleMobileAds.Api;

public static class AdManagerScript
{
    private static InterstitialAd interstitial;

    // Call this method only once when your app starts
    public static void StartMobileAdsSDK()
    {
        #if UNITY_ANDROID
            string appId = "...your admob appid here...";
            MobileAds.Initialize(appId);
        #endif
    }

    public static void RequestInterstitial()
    {
        #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/1033173712";
            interstitial = new InterstitialAd(adUnitId);
            AdRequest request = new AdRequest.Builder().Build();
            interstitial.LoadAd(request);
        #endif
    }

    public static void ShowInterstitital()
    {
        #if UNITY_ANDROID
            if (interstitial.IsLoaded())
            {
                interstitial.Show();
            }
        #endif
    }

Далее в вашем уровне сценария:

...

void Start() {
    AdManager.RequestInterstitial();
}

...

void GameLevelFinished() {
    AdManager.ShowInterstitial();
    SceneManager.LoadScene("NextLevelName");
}

Кроме того, не забудьте вызвать StartMobileAdsSDK один раз в начале, когда ваше приложение запускается.

Admanager.StartMobileAdsSDK();

Используйте директивы прекомпилятора (#iF#endif), чтобы не пытаться загружать рекламу в редакторе Unity. В консоли будет несколько сообщений, но это нормально.

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