web-dev-qa-db-fra.com

La taille et l'ID de bloc d'annonces doivent être définis avant loadAd lorsqu'ils sont définis par programme.

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);
31
Mike Flynn

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 setAdUnitIdprogrammer 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.

46
diogojme
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" 
3
anwar alam

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"
1
Morrison Chang

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

0
Rohit Patil

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

Après avoir essayé,

  1. Fournissez un identifiant d'adunit et une taille ads de XML uniquement.
  2. Indiquez l'ID d'adunit et la taille de l'annonce à partir du fichier .Java UNIQUEMENT.

Le problème est résolu par 

  1. Suppression de la ligne xmlns:ads="http://schemas.Android.com/apk/res-auto" de la présentation racine.
  2. indiquez l'ID d'adunit et adsize comme suit,

    app:adSize="SMART_BANNER" app:adUnitId="@string/banner_ad_unit_id"

    1. Nettoyer et exécuter l'application.
0
Shweta Bhagat

ajoutez ceci à votre mise en page 

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

Pour moi, je définissais le type d'annonce comme suit:

ads:adSize="Banner"

Bien que ce soit tout en majuscules:

ads:adSize="BANNER"
0
Abdalrahman Shatou