webentwicklung-frage-antwort-db.com.de

Die Anzeigengröße und die Anzeigenblock-ID müssen vor loadAd festgelegt werden, wenn sie programmgesteuert festgelegt werden

Ich habe keine Ahnung, was hier vor sich geht, aber ich versuche, meine Anzeigenblock-ID durch den folgenden Code dynamisch festzulegen und aus dem XML-Code zu entfernen. Der Fehler wird jedoch weiterhin angezeigt: 

Die Anzeigengröße und die Anzeigenblock-ID müssen festgelegt werden, bevor loadAd aufgerufen wird.

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

und 

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

Erstellen Sie es programmgesteuert

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

Und in deiner XML-Datei

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

EDIT

Die bewährte Methode für Banner ist, dass zwei Banner pro Ansicht angezeigt werden (ein unitId). Wenn Sie mehrere Banner auf denselben Bildschirmen anzeigen möchten (NICHT EMPFOHLEN), müssen Sie einen weiteren unitId von Konsole und einen weiteren erstellen AdView für jedes unitId.

Meine Antwort lautet:

Ich weiß nicht, ob es ein Fehler ist oder ob Sie nur ein unitId pro AdView haben können, und es ist sinnvoller, da Sie nur ein unitId pro AdView haben können, und aus docs lesen Sie zwei Möglichkeiten es, indem Sie eine neue AdView() instantiieren und unitIds und sizes ORdo programmgesteuert nur von XML aus einstellen. 

Ich habe einige Tests gemacht, um zu dieser Schlussfolgerung zu kommen.

Mit findViewById aus Ihrem com.google.Android.gms.ads.AdView

1 - Sie können setAdUnitId programmatisch einstellen, wenn Sie zunächst adSize einstellen.

2 - Sie können keine setAdUnitId-Programme programmieren, wenn sie bereits in Ihrer XML-Datei enthalten sind.

3 - Wenn Sie die setAdUnitId nicht in Ihrem XML-Code verwenden, wird Required xml attribute adUnitId was missing angezeigt. Dies gilt auch für adSize, auch wenn Sie beide Attribute programmatisch einstellen.

4 - Wenn Sie setAdUnitId und setSize nicht programmgesteuert ablegen, werden Sie von adView auf Required xml attribute adUnitId was missing aufmerksam gemacht. Dies gilt auch, wenn Sie adSize nicht in xml festlegen.

5 - Sie können nur programmgesteuert mAdView.loadAd(adRequest) aufrufen, um die Anzeige zu laden 

Mit new AdView()

1 - Es funktioniert, wenn Sie ein leeres Layout erstellen und dann die AdView-Referenz zu dieser Ansicht hinzufügen.

2 - Sie können adSize und adUnitId programmgesteuert einstellen, damit es funktioniert.

3- Wenn Sie versuchen, setAdUnitAd zweimal zu verwenden, wird diese Ausnahme The ad unit ID can only be set once on AdView. gestartet, wenn Sie findViewById verwenden.

Meine Schlussfolgerungen sind:

Sie können nur aus XML verwenden "

<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" />

und laden Sie die Ansicht auf onCreate

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

oder voll programmatisch

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

Ich benutze lange Zeit Banner und diese Antwort ist gut für mich.

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

Das hat mein Problem gelöst. 

verwenden Sie dies nicht

xmlns:ads="http://schemas.Android.com/tools" 
3
anwar alam

Du hast 

Android:layout_width="wrap_content"
Android:layout_height="wrap_content"

Von: https://developers.google.com/admob/Android/banner#smart_banners

Hinweis: Die intelligente Banneransicht in Ihrem Layout muss die gesamte Breite des Geräts belegen. Wenn dies nicht der Fall ist, erhalten Sie eine Warnung mit der Meldung "Nicht genügend Platz zum Anzeigen von Anzeigen". Das Banner wird nicht angezeigt.

Ändern Sie es in

Android:layout_width="match_parent"

Und legen Sie Ihre AdUnitID in der XML-Datei fest.

ads:adUnitId="AD_UNIT_ID"
1
Morrison Chang

Versuchen Sie, Ihre Anzeigenblock-ID in XML festzulegen

ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE"

Mögen

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

oder finden Sie den Link für weitere Informationen https://developers.google.com/admob/Android/quick-start

0
Rohit Patil

Ich habe es so gemacht

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

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

Nach dem Versuch

  1. Geben Sie die Adunit-ID und die Anzeigengröße NUR aus.
  2. Geben Sie die Adunit-ID und die Anzeigengröße NUR aus der .Java-Datei an.

Problem wird gelöst durch 

  1. xmlns:ads="http://schemas.Android.com/apk/res-auto"-Zeile aus dem Root-Layout entfernen.
  2. adunit-ID angeben und wie folgt anzeigen,

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

    1. App reinigen und ausführen.
0
Shweta Bhagat

fügen Sie dies Ihrem Layout hinzu 

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

Für mich habe ich den Anzeigentyp so eingestellt:

ads:adSize="Banner"

Während es alle Kappen sein soll:

ads:adSize="BANNER"
0