2015-12-23 10 views
7

Vorrei mostrare un banner a schermo intero nella mia app per Android.L'annuncio interstiziale Admob (a schermo intero) non mostra

In onCreate Io chiamo questa funzione:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    showInterstitial(); 
} 

La mia funzione:

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

My App andrà in crash con questo messaggio:

causati da: java.lang.IllegalStateException : L'ID dell'unità pubblicitaria deve essere impostato su su InterstitialAd prima che venga visualizzato lo spettacolo.

Ma ho impostato l'id prima di mostrare o no?

+0

hai aggiunto banner_ad_unit_id in risorsa come file string.xml? –

+0

Sì, questo ID verrà mostrato nel log cat, se lo comunico con Log.d inserisco l'id per il test direttamente: interstitialAd.setAdUnitId ("xxxxx"); stesso errore – SpecialFighter

+0

@DhawalSodhaParmar non importa. Anche un ID unità pubblicitaria per banner recupererà un annuncio interstitial. Sebbene funzioni, non è consigliabile farlo. – AndroidMechanic

risposta

9

Non hai chiamato loadAd() per l'annuncio interstitial. L'annuncio interstitial dovrebbe essere caricato prima di poterlo mostrare.

interstitialAd.loadAd(adRequest); 

anche si dovrebbe verificare se viene caricato prima di chiamare show(). Potrebbe non essere immediatamente disponibile e si consiglia di tenerlo caricato in anticipo prima di chiamare 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 
     } 

possibile implementazione (modificarlo in modo più adatto alle tue esigenze)

Quindi, in pratica il seguente può andare in 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(); 

e showInterstitial() diventa questo

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

NOTA: chiama showInterstitial() quando si desidera visualizzare l'annuncio interstitial. Ma non immediatamente dopo aver chiamato loadAd(). Bastano pochi istanti per caricare l'annuncio intersitital e potresti perdere di una frazione di secondo se la rete è in ritardo o il contenuto dell'annuncio è più pesante del normale.

Inoltre, ecco la documentazione per l'implementazione di Admob Intersitials nel modo giusto.

+0

se provo questo codice, load() e isReady() sarà rosso in Android Studio (Impossibile risolvere i metodi) – SpecialFighter

+0

scusa è loadAd e isLoaded ... modifico la risposta. Quanto sopra era per mopub ma funziona in modo simile. – AndroidMechanic

+0

verifica risposta aggiornata – AndroidMechanic

1

Aggiungi sotto perameters in 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> 

verificare di aver utilizzato sotto la linea nel layout genitore

xmlns:ads="http://schemas.android.com/apk/res-auto" 

just verify code

2
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; 
    } 
} 
Problemi correlati