Je n'ai aucune idée de ce qui se passe ici, mais j'essaie de définir mon ID de bloc d'annonces de manière dynamique via le code, comme ci-dessous, et de le supprimer du code XML, mais le message d'erreur suivant s'affiche:
La taille et l'ID de bloc d'annonces doivent être définis avant l'appel de 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>
et
AdView mAdView = (AdView) rootView.findViewById(R.id.adView);
mAdView.setAdUnitId(getEvent().getAdMobUnitId());
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
Le créer par programme
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);
Et dans votre fichier 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>
MODIFIER
La meilleure pratique pour les bannières est d’afficher deux bannières par vue (une unitId
). Si vous souhaitez afficher plusieurs bannières sur les mêmes écrans (NON RECOMMANDÉ), vous devez créer une autre unitId
à partir de console et une annonce pour chaque unitId
.
Ma réponse est:
Je ne sais pas si c'est un bogue ou si vous ne pouvez avoir qu'une seule unitId
par annonce et cela a plus de sens, car vous ne pouvez avoir qu'une seule unitId
par annonce, et en lisant dans docs ils montrent deux façons de le faire, en instanciant une nouvelle AdView()
et en définissant par programme les unitIds
et sizes
ORdo uniquement à partir de XML.
Et j'ai fait des tests pour arriver à cette conclusion.
En utilisant findViewById à partir de votre com.google.Android.gms.ads.AdView
1 - Vous pouvez setAdUnitId
par programmation si vous définissez adSize
en premier.
2 - Vous ne pouvez pas setAdUnitId
programmer si cela se trouve déjà dans votre code XML.
3 - Si vous n’utilisez pas ’setAdUnitId’ dans votre code xml, il alertera Required xml attribute adUnitId was missing
et sera identique pour adSize
même si vous définissez les deux attributs par programme.
4 - Si vous ne mettez pas setAdUnitId
et setSize
et si vous le programmez, adView vous alertera Required xml attribute adUnitId was missing
, et de même si vous ne définissez pas adSize
dans xml.
5 - La seule chose que vous puissiez faire par programme est d'appeler mAdView.loadAd(adRequest)
pour charger l'annonce.
En utilisant new AdView()
1 - Cela fonctionnera si vous créez une mise en page vide, puis ajoutez la référence adView à cette vue.
2 - Vous pouvez définir les adSize
et adUnitId
par programme, cela fonctionnera.
3- Si vous essayez d'utiliser setAdUnitAd
deux fois, cette exception lancera The ad unit ID can only be set once on AdView.
de la même manière si vous utilisez findViewById
Mes conclusions sont:
Vous pouvez utiliser uniquement à partir de 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" />
et charger la vue sur onCreate
AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
ou complet par programme
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);
J'utilise des bannières depuis longtemps et cette réponse me convient.
xmlns:ads="http://schemas.Android.com/apk/res-auto"
Cela a résolu mon problème.
ne l'utilisez pas
xmlns:ads="http://schemas.Android.com/tools"
Tu as
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
De: https://developers.google.com/admob/Android/banner#smart_banners
Remarque: la vue de bannière intelligente de votre mise en page doit occuper toute la largeur de l'appareil. Si ce n'est pas le cas, vous recevrez un avertissement avec le message "Espace insuffisant pour afficher une annonce" et la bannière ne sera pas affichée.
changez le en
Android:layout_width="match_parent"
Et définissez votre adUnitID dans le fichier XML.
ads:adUnitId="AD_UNIT_ID"
Essayez de définir l'ID de votre bloc d'annonces en XML.
ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE"
Comme
ads:adUnitId="ca-app-pub-3940256099942544/6300978"
ou trouvez le lien pour plus de détails https://developers.google.com/admob/Android/quick-start
Je l'ai fait comme ça
<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>
dans du code
@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);
}
}//
);
}
Après avoir essayé,
Le problème est résolu par
xmlns:ads="http://schemas.Android.com/apk/res-auto"
de la présentation racine.indiquez l'ID d'adunit et adsize comme suit,
app:adSize="SMART_BANNER"
app:adUnitId="@string/banner_ad_unit_id"
ajoutez ceci à votre mise en page
xmlns:ads="http://schemas.Android.com/apk/res-auto"
Pour moi, je définissais le type d'annonce comme suit:
ads:adSize="Banner"
Bien que ce soit tout en majuscules:
ads:adSize="BANNER"