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);
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.
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"
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"
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
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
Problem wird gelöst durch
xmlns:ads="http://schemas.Android.com/apk/res-auto"
-Zeile aus dem Root-Layout entfernen.adunit-ID angeben und wie folgt anzeigen,
app:adSize="SMART_BANNER"
app:adUnitId="@string/banner_ad_unit_id"
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"