java - studio - ganar dinero publicidad apps
El tamaƱo del anuncio y la ID del bloque de anuncios deben establecerse antes de loadAd cuando se establece mediante programaciĆ³n (6)
No tengo idea de lo que está sucediendo aquí, pero estoy tratando de configurar mi ID de bloque de anuncios dinámicamente a través de un código como el que se muestra a continuación y eliminarlo del XML, pero aún aparece el error:
El tamaño del anuncio y la ID del bloque de anuncios deben establecerse antes de llamar 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);
Crearlo programáticamente
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 que muestre un banner por vista (un unitId
). Si desea mostrar más banners en las mismas pantallas (NO RECOMENDADO), debe crear otro unitId
desde la consola y un anuncio para cada unitId
.
Mi respuesta es:
No sé si es un error o si puede tener solo un unitId
por adView y tiene más sentido, ya que solo puede tener un unitId
por adView, y al leer docs se muestran dos formas de hacerlo, mediante la unitId
un unitId
AdView()
y la configuración unitIds
y sizes
O hacerlo solo desde XML.
E hice algunas pruebas para llegar a esta conclusión.
Usando findViewById desde su com.google.android.gms.ads.AdView
1 - Puede setAdUnitId
programa setAdUnitId
si configura primero adSize
.
2 - No puede setAdUnitId
programa setAdUnitId
si ya está en su xml.
3 - Si no usa ''setAdUnitId'' en su xml, alertará que Required xml attribute adUnitId was missing
, e igual para adSize
incluso si configura ambos atributos de manera programática.
4 - Si no pone setAdUnitId
y setSize
y lo pone en modo programático, adView le avisará que Required xml attribute adUnitId was missing
, y lo mismo si no configura adSize
en xml.
5 - Lo único que puede hacer programáticamente es llamar a mAdView.loadAd(adRequest)
para cargar el anuncio
Usando el new AdView()
1 - Funcionará si crea un diseño vacío, luego agregue la referencia adView a esta vista.
2 - Puede configurar los programas adSize
y adUnitId
que funcionarán.
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:
Puedes usar solo 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 cargar vista en onCreate
AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
o programáticamente 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);
Yo uso banners durante mucho tiempo y esa respuesta es buena para mí.
Lo he hecho asi
<LinearLayout xmlns:ads="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_main_screen_container"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="horizontal"/>
</LinearLayout>
en codigo
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.newone);
initAdsAccount();
initAds();
}
private void initAdsAccount()
{
String accountId = AdsConstants.my_fake_ads_account_id;
if (AdsConstants.isAdsMode)
{
accountId = AdsConstants.my_ads_account_id;
}
MobileAds.initialize(this, accountId);
}
private void initAds()
{
findViewById(R.id.ll_main_screen_container).post(//
new Runnable()
{
@Override
public void run()
{
LinearLayout adContainer = findViewById(R.id.ll_main_screen_container);
AdView mAdView = new AdView(MainActivity.this);
mAdView.setAdSize(AdSize.BANNER);
if (AdsConstants.isAdsMode)
{
mAdView.setAdUnitId(AdsConstants.main_screen_bottom_banner_id);
}
else
{
mAdView.setAdUnitId(AdsConstants.fake_banner_id);
}
adContainer.addView(mAdView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
}//
);
}
Para mí, estaba configurando el tipo de anuncio así:
ads:adSize="Banner"
Si bien será todo mayúsculas:
ads:adSize="BANNER"
Tienes
android:layout_width="wrap_content"
android:layout_height="wrap_content"
Desde: 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, aparecerá una advertencia con el mensaje "No hay espacio suficiente para mostrar el anuncio" y no se mostrará el anuncio.
cambiarlo a
android:layout_width="match_parent"
Y establezca su adUnitID en el archivo xml.
ads:adUnitId="AD_UNIT_ID"
Trate de establecer su ID de bloque de anuncios en XML
ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE"
Me gusta
ads:adUnitId="ca-app-pub-3940256099942544/6300978"
o busque el enlace para obtener más detalles https://developers.google.com/admob/android/quick-start
xmlns:ads="http://schemas.android.com/apk/res-auto"
Esto solucionó mi problema.
no uses esto
xmlns:ads="http://schemas.android.com/tools"