El tamaño del anuncio y el ID de la unidad de anuncio deben configurarse antes de loadAd cuando se establezca mediante programación

No tengo idea de lo que está sucediendo aquí, pero estoy intentando establecer mi ID de bloque de anuncios dinámicamente a través de código como a continuación y eliminarlo del XML, pero aún así obtener el error:

El tamaño del anuncio y el ID de la unidad de anuncio deben configurarse antes de que se llame a loadAd.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/res-auto" <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="SMART_BANNER"> </com.google.android.gms.ads.AdView> 

y

  AdView mAdView = (AdView) rootView.findViewById(R.id.adView); mAdView.setAdUnitId(getEvent().getAdMobUnitId()); AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest); 

Cree programaticamente

 View adContainer = findViewById(R.id.adMobView); AdView mAdView = new AdView(context); mAdView.setAdSize(AdSize.BANNER); mAdView.setAdUnitId(YOUR_BANNER_ID); ((RelativeLayout)adContainer).addView(mAdView); AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest); 

Y en tu archivo xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/adMobView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentBottom="true"/> </RelativeLayout> 

EDITAR

La mejor práctica para los banners, es dos mostrar un banner por vista (un unitId ), si desea mostrar más banners en las mismas pantallas (NO RECOMENDADO), usted tiene que crear otro unitId de la consola y un adView para cada unitId .

Mi respuesta es:

No sé si es un error o si puede tener sólo un unitId por adView y tiene más sentido, ya que sólo puede tener un unitId por adView, y la lectura de documentos que muestran dos formas de hacerlo, por instantianting un nuevo AdView() y programar de forma programada los unitIds y sizes O hacerlo sólo desde XML.

Y hice algunas pruebas para llegar a esta conclusión.

Utilizando findViewById desde su com.google.android.gms.ads.AdView

1 – Puede setAdUnitId programática si establece primero adSize .

2 – No puede setAdUnitId programatically si ya está en su xml.

3 – Si no usa 'setAdUnitId' en su xml, se alertará El Required xml attribute adUnitId was missing , y lo mismo para adSize incluso si establece ambos atributos de forma programática.

4 – Si no se pone setAdUnitId y setSize y lo pone programáticamente, el adView le alertará El Required xml attribute adUnitId was missing , y lo mismo si no se establece adSize en xml.

5 – Lo único que puede hacer mediante programación es llamar a mAdView.loadAd(adRequest) para cargar el anuncio

Mediante el uso de new AdView()

1 – Funcionará si crea un diseño vacío y, a continuación, agregue la referencia adView a esta vista.

2 – Usted puede fijar adSize y adUnitId programatically él trabajará.

3- Si intenta utilizar setAdUnitAd dos veces, se setAdUnitAd esta excepción. The ad unit ID can only be set once on AdView. Lo mismo si usas por findViewById

Mis conclusiones son:

Sólo se puede utilizar desde XML "

 <com.google.android.gms.ads.AdView android:id="@+id/adView" android:layout_width="match_parent" android:layout_height="wrap_content" ads:adSize="BANNER" ads:adUnitId="ca-app-pub-my_id_number_was_ommited_by_security" /> 

Y vista de carga en onCreate

 AdView mAdView = findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest); 

O programaticamente completo

 View adContainer = findViewById(R.id.adMobView); AdView mAdView = new AdView(context); mAdView.setAdSize(AdSize.BANNER); mAdView.setAdUnitId(YOUR_BANNER_ID); adContainer.addView(mAdView); AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest); 

Utilizo pancartas durante mucho tiempo y esa respuesta es buena para mí.

Tienes

 android:layout_width="wrap_content" android:layout_height="wrap_content" 

De: https://developers.google.com/admob/android/banner#smart_banners

Nota: la vista de banner inteligente en su diseño debe consumir todo el ancho del dispositivo. Si no lo hace, obtendrá una advertencia con el mensaje "No hay espacio suficiente para mostrar el anuncio" y el banner no se mostrará.

Cambia a

 android:layout_width="match_parent" 

Y defina su adUnitID en el archivo xml.

 ads:adUnitId="AD_UNIT_ID" 

Intente establecer el ID de su unidad de anuncio en XML

 ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE" 

Me gusta

 ads:adUnitId="ca-app-pub-3940256099942544/6300978" 

O encuentra el enlace para obtener más información https://developers.google.com/admob/android/quick-start

Para mí, estaba estableciendo el tipo de anuncio como este:

 ads:adSize="Banner" 

Mientras que debe ser todos los casquillos:

 ads:adSize="BANNER" 
  • Activar / desactivar mediante programación modo inmersivo
  • Error de c2dm 401 al enviar mensajes después de recibir id y token de autenticación
  • Cómo comprobar si EditText tiene un valor en Android / Java
  • Excepción de JsonReader en Android mientras se analizan datos JSON grandes
  • ¿Cuál es la lógica de diseño detrás de Fragmentos como clases internas estáticas vs clases públicas independientes?
  • Flickr Oauth Conectarse con Scribe Library
  • JSON Serialización desde URL siempre devuelve NULL
  • Detenga el subproceso Java que llama a la función JNI
  • El parámetro de declaración de una función como final: ¿por qué y cuándo es necesario?
  • Phonegap vs nativo para la facilidad de desarrollo?
  • Obtener el título de la página web de setWebViewClient?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.