Идентификатор рекламного блока и идентификатор рекламного блока должны быть установлены до загрузкиAd при программном
Я понятия не имею, что здесь происходит, но я пытаюсь установить идентификатор рекламного блока динамически с помощью кода, как показано ниже, и удалить его из XML, но все равно получить сообщение об ошибке:
Идентификатор размера объявления и рекламного блока должен быть установлен до вызова 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>
и
AdView mAdView = (AdView) rootView.findViewById(R.id.adView);
mAdView.setAdUnitId(getEvent().getAdMobUnitId());
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
Ответы
Ответ 1
Создайте его программно
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);
И в вашем 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>
ИЗМЕНИТЬ
Лучшая практика для баннеров - это два показа одного баннера для каждого представления (один unitId
), если вы хотите показывать больше баннеров на тех же экранах (НЕ РЕКОМЕНДУЕТСЯ), вам нужно создать еще один unitId
из консоль и один adView для каждого unitId
.
Отвечаю:
Не знаю, есть ли его ошибка или у вас может быть только один unitId
для adView, и это имеет смысл, потому что вы можете иметь только один unitId
для каждого рекламного пространства и читать из docs, они показывают два способа сделать это, путем создания новой AdView()
и программной установки unitIds
и sizes
OR
делать это только из XML.
И я сделал несколько тестов, чтобы прийти к такому выводу.
Используя findViewById из вашего com.google.android.gms.ads.AdView
1 - Вы можете setAdUnitId
программно, если сначала установить adSize
.
2 - Вы не можете setAdUnitId
программно, если он уже находится в вашем xml.
3 - Если вы не используете setAdUnitId в своем xml, он будет предупреждать Required xml attribute adUnitId was missing
и то же самое для adSize
, даже если вы оба раза программно установите оба атрибута.
4 - Если не поставить setAdUnitId
и setSize
и поместить его программно, adView предупредит вас Required xml attribute adUnitId was missing
, и то же самое, если вы не установили adSize
в xml.
5 - Единственное, что программно вы можете сделать, это вызвать mAdView.loadAd(adRequest)
для загрузки объявления
Используя new AdView()
1 - он будет работать, если вы создадите пустой макет, а затем добавьте ссылку adView в это представление.
2 - Вы можете программно установить adSize
и adUnitId
.
3 Если вы попытаетесь использовать setAdUnitAd
дважды, это исключение запустит The ad unit ID can only be set once on AdView.
то же самое, если вы используете findViewById
Мои выводы:
Вы можете использовать только из 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" />
и просмотр загрузки onCreate
AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
или полный программный
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);
Я использую баннеры в течение длительного времени, и этот ответ мне подходит.
Ответ 2
xmlns:ads="http://schemas.android.com/apk/res-auto"
Это решило мою проблему.
не используйте это
xmlns:ads="http://schemas.android.com/tools"
Ответ 3
У вас
android:layout_width="wrap_content"
android:layout_height="wrap_content"
С:
https://developers.google.com/admob/android/banner#smart_banners
Примечание. В представлении интеллектуального баннера в макете должна использоваться полная ширина устройства. Если этого не произойдет, вы получите предупреждение с сообщением "Недостаточно места для показа объявления", и баннер не будет отображаться.
измените его на
android:layout_width="match_parent"
И установите adUnitID в файле xml.
ads:adUnitId="AD_UNIT_ID"
Ответ 4
Попробуйте установить идентификатор рекламного блока в XML
ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE"
Как
ads:adUnitId="ca-app-pub-3940256099942544/6300978"
или найдите ссылку для получения более подробной информации
https://developers.google.com/admob/android/quick-start
Ответ 5
Для меня я задал тип объявления следующим образом:
ads:adSize="Banner"
Пока это все шапки:
ads:adSize="Banner"
Ответ 6
Я сделал это так
<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>
в коде
@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);
}
}//
);
}
Ответ 7
После попытки,
- Укажите идентификатор adunit и размер рекламы ТОЛЬКО из xml.
- Укажите идентификатор adunit и размер рекламы ТОЛЬКО из файла .java.
Проблема решена
- Удаление строки
xmlns:ads="http://schemas.android.com/apk/res-auto"
из корневого макета. -
указать идентификатор adunit и указать его размер следующим образом,
app:adSize="SMART_BANNER" app:adUnitId="@string/banner_ad_unit_id"
- Очистите и запустите приложение.