Подтвердить что ты не робот

Идентификатор рекламного блока и идентификатор рекламного блока должны быть установлены до загрузки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);
4b9b3361

Ответ 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

После попытки,

  1. Укажите идентификатор adunit и размер рекламы ТОЛЬКО из xml.
  2. Укажите идентификатор adunit и размер рекламы ТОЛЬКО из файла .java.

Проблема решена

  1. Удаление строки xmlns:ads="http://schemas.android.com/apk/res-auto" из корневого макета.
  2. указать идентификатор adunit и указать его размер следующим образом,

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

    1. Очистите и запустите приложение.