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