Admob Interstitial ad (полноэкранный режим) не будет показывать
Я хотел бы показать полноэкранный баннер в моем приложении для Android.
на onCreate Я называю эту функцию:
@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    showInterstitial();
}
функции:
private void showInterstitial() {
    interstitialAd = new InterstitialAd(this);
    interstitialAd.setAdUnitId(getString(R.string.ad_banner_id));
    interstitialAd.show();
    Toast.makeText(this, "Ad will load", Toast.LENGTH_SHORT).show();
}
мое приложение рухнет с этого сообщения:
вызвано: java.ленг.IllegalStateException: идентификатор рекламного блока должен быть установлен на InterstitialAd перед шоу вызывается.
но я установил идентификатор объявления перед шоу или нет?
3 ответов
ты не звонил loadAd() для interstitialAd. Интерстициальное объявление должно загружаться, прежде чем вы сможете его показать.
interstitialAd.loadAd(adRequest);
также вы должны проверить, загружен ли он перед вызовом show(). Он может быть не сразу доступен, и вы можете сохранить его загруженным заранее, прежде чем звонить show.
if(mInterstitial.isLoaded()){
            mInterstitial.show();
            AdRequest adRequest = new AdRequest.Builder().build();
            mInterstitial.loadAd(adRequest); //optionally load again if you plan to show another one
        }
возможная реализация (измените ее так, чтобы она соответствовала вашему требованию)
так что в принципе могут пойти в onCreate()
    interstitialAd = new InterstitialAd(this);
    interstitialAd.setAdUnitId(getString(R.string.ad_banner_id));
    AdRequest adRequest = new AdRequest.Builder().build();
    interstitialAd.loadAd(adRequest);
    Toast.makeText(this, "Ad will load", Toast.LENGTH_SHORT).show();
и showInterstitial() становится
private void showInterstitial() {
        if(mInterstitial.isLoaded()){
                mInterstitial.show();
                //optionally load again if you plan to show another one later
                AdRequest adRequest = new AdRequest.Builder().build();
                mInterstitial.loadAd(adRequest); 
            }
    }
Примечание: вызов showInterstitial() когда вы хотите отобразить интерстициального объявления. Но, не сразу после вызова loadAd(). Загрузка интерсититального объявления занимает несколько минут, и вы можете пропустить долю секунды, если сеть отстает или содержание объявления тяжелее, чем обычно.
кроме того, вот документация для реализации Admob Intersitials право путь.
добавить ниже perameters в com.google.android.gms.ads.AdView
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id"
<com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id">
    </com.google.android.gms.ads.AdView>
убедитесь, что вы использовали строку ниже в Родительском макете
xmlns:ads="http://schemas.android.com/apk/res-auto"
public class LoadAd {
    private final AdView ad;
    InterstitialAd interstitialAd;
    boolean isInterstitialShown = false;
    public LoadAd(Context con)
    {
        if (con.getClass().getName() == MainActivity.class.getName())
        {
            interstitialAd = new InterstitialAd(con);
            interstitialAd.setAdUnitId("ca-app-pub-8037008543529602/2054128571");
            AdRequest adRequest = new AdRequest.Builder().build();
            interstitialAd.loadAd(adRequest);
            interstitialAd.setAdListener(new AdListener()
            {
                @Override
                public void onAdLoaded()
                {
                    super.onAdLoaded();
                }
                @Override
                public void onAdOpened()
                {
                    super.onAdOpened();
                    isInterstitialShown = true;
                }
                @Override
                public void onAdFailedToLoad(int errorCode)
                {
                    super.onAdFailedToLoad(errorCode);
                }
            });
        }
        ad = (AdView) ((Activity)con).findViewById(R.id.adView);
    }
    public void init()
    {
        if (ad != null)
        {
            AdRequest req = new AdRequest.Builder().build();
            ad.loadAd(req);
        }
    }
    public void destroy()
    {
        if (ad != null)
        {
            ad.destroy();
        }
    }
    public boolean showInterstetial()
    {
        if (isInterstitialShown)
        {
            return false;
        }
        if (interstitialAd != null)
        {
            if (interstitialAd.isLoaded())
            {
                interstitialAd.show();
            }
            else
            {
                return false;
            }
            return true;
        }
        return false;
    }
}