如何以编程方式为AdMob指定adUnitId?

时间:2014-07-15 19:10:34

标签: android admob adview

我正在尝试以编程方式将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);

我得到了:

  

广告尺寸和广告单元ID必须在调用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继承来制作自定义视图,但这是最终的。

有什么建议吗?

1 个答案:

答案 0 :(得分:22)

方法loadAd()检查loadAd何时发生(mAdView.getAdSize() == null || mAdView.getAdUnitId() == null)

在调用loadAd之前尝试记录(mAdView.getAdSize() == null || mAdView.getAdUnitId() == null)的布尔输出以确定其状态:

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