title: Google AdMob Unity: Only test ads work (in Unity Editor) but no real ads
body: <p>My admob account is linked to the app in play store, status &quot;ready&quot;, AdMob app ID also added into ad settings in Unity, added in the real ad unit ID, test ad showing in Unity, waited a week...</p>
  <p>Result: no real ads</p>
  <p>My event is calling RequestAndLoadInterstitialAd() and ShowInterstitialAd(), which works in Unity with the test ad. I expected it to work once the test ad implemented successfully.</p>
  <pre><code>    using UnityEngine.Events;
      using UnityEngine;
      using GoogleMobileAds.Api;
      using GoogleMobileAds.Common;
      using UnityEngine.UI;
      using System;
      using System.Collections.Generic;
  
      public class GoogleAdMobController : MonoBehaviour
      {
          private AppOpenAd appOpenAd;
          private BannerView bannerView;
          private InterstitialAd interstitialAd;
          private RewardedAd rewardedAd;
          private RewardedInterstitialAd rewardedInterstitialAd;
          private float deltaTime;
          private bool isShowingAppOpenAd;
          public UnityEvent OnAdLoadedEvent;
          public UnityEvent OnAdFailedToLoadEvent;
          public UnityEvent OnAdOpeningEvent;
          public UnityEvent OnAdFailedToShowEvent;
          public UnityEvent OnUserEarnedRewardEvent;
          public UnityEvent OnAdClosedEvent;
          public bool showFpsMeter = true;
          public Text fpsMeter;
          public Text statusText;
  
  
          #region UNITY MONOBEHAVIOR METHODS
  
          public void Start()
          {
              MobileAds.SetiOSAppPauseOnBackground(true);
  
              List&lt;String&gt; deviceIds = new List&lt;String&gt;() { AdRequest.TestDeviceSimulator };
  
              // Add some test device IDs (replace with your own device IDs).
      #if UNITY_IPHONE
              deviceIds.Add(&quot;b77a5c561934e089)--a185c62eba2497c95197140e5282b27a&quot;);
      #elif UNITY_ANDROID
              deviceIds.Add(&quot;b77a5c561934e089)--a185c62eba2497c95197140e5282b27a&quot;);
      #endif
  
              // Configure TagForChildDirectedTreatment and test device IDs.
              RequestConfiguration requestConfiguration =
                  new RequestConfiguration.Builder()
                  .SetTagForChildDirectedTreatment(TagForChildDirectedTreatment.Unspecified)
                  .SetTestDeviceIds(deviceIds).build();
              MobileAds.SetRequestConfiguration(requestConfiguration);
  
              // Initialize the Google Mobile Ads SDK.
              MobileAds.Initialize(HandleInitCompleteAction);
          }
  
          private void HandleInitCompleteAction(InitializationStatus initstatus)
          {
              // Callbacks from GoogleMobileAds are not guaranteed to be called on
              // main thread.
              // In this example we use MobileAdsEventExecutor to schedule these calls on
              // the next Update() loop.
              MobileAdsEventExecutor.ExecuteInUpdate(() =&gt;
              {
                  statusText.text = &quot;Initialization complete&quot;;
              //  RequestBannerAd();
              });
          }
  
          private void Update()
          {
              if (showFpsMeter)
              {
                  fpsMeter.gameObject.SetActive(true);
                  deltaTime += (Time.deltaTime - deltaTime) * 0.1f;
                  float fps = 1.0f / deltaTime;
                  fpsMeter.text = string.Format(&quot;{0:0.} fps&quot;, fps);
              }
              else
              {
                  fpsMeter.gameObject.SetActive(false);
              }
          }
  
          #endregion
  
          #region HELPER METHODS
  
          private AdRequest CreateAdRequest()
          {
              return new AdRequest.Builder()
                  .AddKeyword(&quot;unity-admob-sample&quot;)
                  .Build();
          }
  
          public void OnApplicationPause(bool paused)
          {
              // Display the app open ad when the app is foregrounded.
              if (!paused)
              {
                  ShowAppOpenAd();
              }
          }
  
          #endregion
  
          #region BANNER ADS
  
          public void RequestBannerAd()
          {
              statusText.text = &quot;Requesting Banner Ad.&quot;;
  
              // These ad units are configured to always serve test ads.
      #if UNITY_EDITOR
              string adUnitId = &quot;unused&quot;;
      #elif UNITY_ANDROID
              string adUnitId = &quot;ca-app-pub-3940256099942544/6300978111&quot;;
      #elif UNITY_IPHONE
              string adUnitId = &quot;ca-app-pub-3940256099942544/2934735716&quot;;
      #else
              string adUnitId = &quot;unexpected_platform&quot;;
      #endif
  
              // Clean up banner before reusing
              if (bannerView != null)
              {
                  bannerView.Destroy();
              }
  
              // Create a 320x50 banner at top of the screen
              bannerView = new BannerView(adUnitId, AdSize.SmartBanner, AdPosition.Top);
  
              // Add Event Handlers
              bannerView.OnAdLoaded += (sender, args) =&gt; OnAdLoadedEvent.Invoke();
              bannerView.OnAdFailedToLoad += (sender, args) =&gt; OnAdFailedToLoadEvent.Invoke();
              bannerView.OnAdOpening += (sender, args) =&gt; OnAdOpeningEvent.Invoke();
              bannerView.OnAdClosed += (sender, args) =&gt; OnAdClosedEvent.Invoke();
  
              // Load a banner ad
              bannerView.LoadAd(CreateAdRequest());
          }
  
          public void DestroyBannerAd()
          {
              if (bannerView != null)
              {
                  bannerView.Destroy();
              }
          }
  
          #endregion
  
          #region INTERSTITIAL ADS
  
          public void RequestAndLoadInterstitialAd()
          {
              // statusText.text = &quot;Requesting Interstitial Ad.&quot;;
  
      #if UNITY_EDITOR
              string adUnitId = &quot;unused&quot;;
      #elif UNITY_ANDROID
              string adUnitId = &quot;ca-app-pub-2334240444886107/9358512518&quot;;
      #elif UNITY_IPHONE
              string adUnitId = &quot;ca-app-pub-3940256099942544/4411468910&quot;;
      #else
              string adUnitId = &quot;unexpected_platform&quot;;
      #endif
  
              // Clean up interstitial before using it
              if (interstitialAd != null)
              {
                  interstitialAd.Destroy();
              }
              interstitialAd = new InterstitialAd(adUnitId);
  
              // Add Event Handlers
              interstitialAd.OnAdLoaded += (sender, args) =&gt; OnAdLoadedEvent.Invoke();
              interstitialAd.OnAdFailedToLoad += (sender, args) =&gt; OnAdFailedToLoadEvent.Invoke();
              interstitialAd.OnAdOpening += (sender, args) =&gt; OnAdOpeningEvent.Invoke();
              interstitialAd.OnAdClosed += (sender, args) =&gt; OnAdClosedEvent.Invoke();
  
              // Load an interstitial ad
              interstitialAd.LoadAd(CreateAdRequest());
          }
  
          public void ShowInterstitialAd()
          {
              if (interstitialAd.IsLoaded())
              {
                  interstitialAd.Show();
              }
              else
              {
                  statusText.text = &quot;Interstitial ad is not ready yet&quot;;
              }
          }
  
          public void DestroyInterstitialAd()
          {
              if (interstitialAd != null)
              {
                  interstitialAd.Destroy();
              }
          }
  
          #endregion
  
          #region REWARDED ADS
  
          public void RequestAndLoadRewardedAd()
          {
              statusText.text = &quot;Requesting Rewarded Ad.&quot;;
      #if UNITY_EDITOR
              string adUnitId = &quot;unused&quot;;
      #elif UNITY_ANDROID
              string adUnitId = &quot;ca-app-pub-3940256099942544/5224354917&quot;;
      #elif UNITY_IPHONE
              string adUnitId = &quot;ca-app-pub-3940256099942544/1712485313&quot;;
      #else
              string adUnitId = &quot;unexpected_platform&quot;;
      #endif
  
              // create new rewarded ad instance
              rewardedAd = new RewardedAd(adUnitId);
  
              // Add Event Handlers
              rewardedAd.OnAdLoaded += (sender, args) =&gt; OnAdLoadedEvent.Invoke();
              rewardedAd.OnAdFailedToLoad += (sender, args) =&gt; OnAdFailedToLoadEvent.Invoke();
              rewardedAd.OnAdOpening += (sender, args) =&gt; OnAdOpeningEvent.Invoke();
              rewardedAd.OnAdFailedToShow += (sender, args) =&gt; OnAdFailedToShowEvent.Invoke();
              rewardedAd.OnAdClosed += (sender, args) =&gt; OnAdClosedEvent.Invoke();
              rewardedAd.OnUserEarnedReward += (sender, args) =&gt; OnUserEarnedRewardEvent.Invoke();
  
              // Create empty ad request
              rewardedAd.LoadAd(CreateAdRequest());
          }
  
          public void ShowRewardedAd()
          {
              if (rewardedAd != null)
              {
                  rewardedAd.Show();
              }
              else
              {
                  statusText.text = &quot;Rewarded ad is not ready yet.&quot;;
              }
          }
  
          public void RequestAndLoadRewardedInterstitialAd()
          {
              statusText.text = &quot;Requesting Rewarded Interstitial Ad.&quot;;
  
              // These ad units are configured to always serve test ads.
      #if UNITY_EDITOR
              string adUnitId = &quot;unused&quot;;
      #elif UNITY_ANDROID
                  string adUnitId = &quot;ca-app-pub-3940256099942544/5354046379&quot;;
      #elif UNITY_IPHONE
                  string adUnitId = &quot;ca-app-pub-3940256099942544/6978759866&quot;;
      #else
              string adUnitId = &quot;unexpected_platform&quot;;
      #endif
  
              // Create an interstitial.
              RewardedInterstitialAd.LoadAd(adUnitId, CreateAdRequest(), (rewardedInterstitialAd, error) =&gt;
              {
                  if (error != null)
                  {
                      MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                          statusText.text = &quot;RewardedInterstitialAd load failed, error: &quot; + error;
                      });
                      return;
                  }
                  this.rewardedInterstitialAd = rewardedInterstitialAd;
                  MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                      statusText.text = &quot;RewardedInterstitialAd loaded&quot;;
                  });
                  // Register for ad events.
                  this.rewardedInterstitialAd.OnAdDidPresentFullScreenContent += (sender, args) =&gt;
                  {
                      MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                          statusText.text = &quot;Rewarded Interstitial presented.&quot;;
                      });
                  };
                  this.rewardedInterstitialAd.OnAdDidDismissFullScreenContent += (sender, args) =&gt;
                  {
                      MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                          statusText.text = &quot;Rewarded Interstitial dismissed.&quot;;
                      });
                      this.rewardedInterstitialAd = null;
                  };
                  this.rewardedInterstitialAd.OnAdFailedToPresentFullScreenContent += (sender, args) =&gt;
                  {
                      MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                          statusText.text = &quot;Rewarded Interstitial failed to present.&quot;;
                      });
                      this.rewardedInterstitialAd = null;
                  };
              });
          }
  
          public void ShowRewardedInterstitialAd()
          {
              if (rewardedInterstitialAd != null)
              {
                  rewardedInterstitialAd.Show((reward) =&gt; {
                      MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                          statusText.text = &quot;User Rewarded: &quot; + reward.Amount;
                      });
                  });
              }
              else
              {
                  statusText.text = &quot;Rewarded ad is not ready yet.&quot;;
              }
          }
  
          #endregion
  
          #region APPOPEN ADS
  
          public void RequestAndLoadAppOpenAd()
          {
              statusText.text = &quot;Requesting App Open Ad.&quot;;
      #if UNITY_EDITOR
              string adUnitId = &quot;unused&quot;;
      #elif UNITY_ANDROID
              string adUnitId = &quot;ca-app-pub-3940256099942544/3419835294&quot;;
      #elif UNITY_IPHONE
              string adUnitId = &quot;ca-app-pub-3940256099942544/5662855259&quot;;
      #else
              string adUnitId = &quot;unexpected_platform&quot;;
      #endif
              // create new app open ad instance
              AppOpenAd.LoadAd(adUnitId, ScreenOrientation.Portrait, CreateAdRequest(), (appOpenAd, error) =&gt;
              {
                  if (error != null)
                  {
                      MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                          statusText.text = &quot;AppOpenAd load failed, error: &quot; + error;
                      });
                      return;
                  }
                  MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                      statusText.text = &quot;AppOpenAd loaded. Please background the app and return.&quot;;
                  });
                  this.appOpenAd = appOpenAd;
              });
          }
  
          public void ShowAppOpenAd()
          {
              if (isShowingAppOpenAd)
              {
                  return;
              }
              if (appOpenAd == null)
              {
                  return;
              }
              // Register for ad events.
              this.appOpenAd.OnAdDidDismissFullScreenContent += (sender, args) =&gt;
              {
                  isShowingAppOpenAd = false;
                  MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                      Debug.Log(&quot;AppOpenAd dismissed.&quot;);
                      if (this.appOpenAd != null)
                      {
                          this.appOpenAd.Destroy();
                          this.appOpenAd = null;
                      }
                  });
              };
              this.appOpenAd.OnAdFailedToPresentFullScreenContent += (sender, args) =&gt;
              {
                  isShowingAppOpenAd = false;
                  var msg = args.AdError.GetMessage();
                  MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                      statusText.text = &quot;AppOpenAd present failed, error: &quot; + msg;
                      if (this.appOpenAd != null)
                      {
                          this.appOpenAd.Destroy();
                          this.appOpenAd = null;
                      }
                  });
              };
              this.appOpenAd.OnAdDidPresentFullScreenContent += (sender, args) =&gt;
              {
                  isShowingAppOpenAd = true;
                  MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                      Debug.Log(&quot;AppOpenAd presented.&quot;);
                  });
              };
              this.appOpenAd.OnAdDidRecordImpression += (sender, args) =&gt;
              {
                  MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                      Debug.Log(&quot;AppOpenAd recorded an impression.&quot;);
                  });
              };
              this.appOpenAd.OnPaidEvent += (sender, args) =&gt;
              {
                  string currencyCode = args.AdValue.CurrencyCode;
                  long adValue = args.AdValue.Value;
                  string suffix = &quot;AppOpenAd received a paid event.&quot;;
                  MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                      string msg = string.Format(&quot;{0} (currency: {1}, value: {2}&quot;, suffix, currencyCode, adValue);
                      statusText.text = msg;
                  });
              };
              appOpenAd.Show();
          }
  
          #endregion
  
  
          #region AD INSPECTOR
  
          public void OpenAdInspector()
          {
              statusText.text = &quot;Open Ad Inspector.&quot;;
  
              MobileAds.OpenAdInspector((error) =&gt;
              {
                  if (error != null)
                  {
                      string errorMessage = error.GetMessage();
                      MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                          statusText.text = &quot;Ad Inspector failed to open, error: &quot; + errorMessage;
                      });
                  }
                  else
                  {
                      MobileAdsEventExecutor.ExecuteInUpdate(() =&gt; {
                          statusText.text = &quot;Ad Inspector closed.&quot;;
                      });
                  }
              });
          }
  
          #endregion
      }
  </code></pre>