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;
    }
}