Как программно указать adUnitId для AdMob?

Я пытаюсь программно настроить adUnitId на рекламу из новых сервисов Google Play (старый AdMob).

У меня есть это в XML (используется в <include>):

<com.google.android.gms.ads.AdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/adView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ads:adSize="BANNER"/>

и это в onCreate():

AdView mAdview = (AdView)findViewById(R.id.adView);
    mAdview.setAdUnitId(((App)getApplication()).getAdmobKey());

    mAdview.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            super.onAdLoaded();
            findViewById(R.id.adView).setVisibility(View.VISIBLE);
        }
    });

    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .build();
    mAdview.loadAd(adRequest);

И я получаю:

Размер объявления и идентификатор рекламного блока должны быть установлены до вызова loadAd.

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

Новый XML:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:id="@+id/adView"
    />

Новый код:

AdView mAdview = new AdView(this);
...
((LinearLayout)findViewById(R.id.adView)).addView(mAdview);
mAdview.loadAd(adRequest);

Но я получаю ту же ошибку.

Я также пытался наследоваться от com.google.android.gms.ads.AdView, чтобы создать собственный вид, но он окончательный.

Любое предложение?


person Daniel Argüelles    schedule 15.07.2014    source источник
comment
Посмотрите здесь stackoverflow.com/ вопросы/15953075/   -  person Loures    schedule 15.07.2014
comment
Я думаю, что ответ устарел. У меня нет конструктора AdView(‹activity›, ‹baner_size›, ‹publisher_id›)   -  person Daniel Argüelles    schedule 15.07.2014
comment
У меня была такая же проблема, такое же исключение. Работает только тогда, когда adUnitId находится в xml.   -  person Miroslav Michalec    schedule 16.07.2014
comment
Что делает getAdmobKey()?   -  person Halvor Holsten Strand    schedule 16.07.2014
comment
Возвращает строку с adUnitId   -  person Daniel Argüelles    schedule 16.07.2014


Ответы (1)


Метод loadAd() проверяет, есть ли (mAdView.getAdSize() == null || mAdView.getAdUnitId() == null), когда происходит loadAd.

Попробуйте записать логический вывод (mAdView.getAdSize() == null || mAdView.getAdUnitId() == null) перед вызовом loadAd, чтобы определить его состояние:

    mAdView = new AdView(this);
    mAdView.setAdSize(AdSize.BANNER);
    mAdView.setAdUnitId(AD_UNIT_ID);
    AdRequest adRequest = new AdRequest.Builder()
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
        .build();
    if(mAdView.getAdSize() != null || mAdView.getAdUnitId() != null)
    mAdView.loadAd(adRequest);
   // else Log state of adsize/adunit
((LinearLayout)findViewById(R.id.adView)).addView(mAdview);
person Nana Ghartey    schedule 16.07.2014