2015-12-11 7 views
26

Я понятия не имею, что здесь происходит, но я пытаюсь установить идентификатор своего рекламного блока динамически с помощью кода, как показано ниже, и удалить его из XML, но все же получаю сообщение об ошибке:Идентификатор размера объявления и рекламного блока должен быть установлен перед загрузкойAd при программировании

The ad size and ad unit ID must be set before loadAd is called.

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

попробовать один раз установив объявления: AdUnitId = "UnitID" вручную в XML-файле. –

+0

Не получите то, что вы пытаетесь установить добавить идентификатор единицы, вы должны получить его от admob, зарегистрировавшись как ca-app-pub-3940256099942544/6300978111 –

ответ

34

Создать его программно

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> 

EDIT

Лучшая практика для баннеров, есть два показывают один баннер за просмотр (один unitId), если вы хотите, чтобы показать больше баннеров в (НЕ РЕКОМЕНДУЕТСЯ), вам нужно создать еще unitId от console и один adView для каждого unitId.

Мой ответ:

Не знаю, если его ошибка или если вы можете иметь только один unitId за AdView и больше смысла, потому что вы можете иметь только один unitId за AdView, и чтение из docs они показывают два способа сделать это, путем создания нового AdView() и программной установки unitIds и sizes ИЛИ делают это только из 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); 

Я использую баннеры в течение длительного времени, и что ответ хорошо для меня.

+0

Вы не можете ссылаться на него и изменять его ????????? –

+0

Да, вы можете, и я думаю, что мое решение не то, что вы хотите, поэтому я сделал исследование, и я нашел «ту же проблему», что и ваша, пожалуйста, прочитайте это решение http://stackoverflow.com/a/23980933/1879661 – diogojme

+0

Я не вижу там решения, кроме того, что имеет контейнер, и вводит в него объявление. Это единственный способ сделать это? –

0

Попробуйте установить рекламный блок идентификатор в XML

ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE" 

Как

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

или найти ссылку подробнее https://developers.google.com/admob/android/quick-start

+0

Это динамическое, не может статически установить его. –

1

Вы получили

android:layout_width="wrap_content" 
android:layout_height="wrap_content" 

От: https://developers.google.com/admob/android/banner#smart_banners

Note: The smart banner view in your layout must consume the full width of the device. If it doesn't, you'll get a warning with the message "Not enough space to show ad", and the banner will not be displayed.

изменения его

android:layout_width="match_parent" 

И установить AdUnitId в файле XML.

ads:adUnitId="AD_UNIT_ID" 
+0

Я получил эту ошибку раньше, но я ее исправил. Это не то же самое. –

0

Для меня, я устанавливал тип объявления как это:

ads:adSize="Banner" 

В то время как это должно быть все заглавные буквы:

ads:adSize="BANNER"