Admob广告永远不会在视图中显示

Rya*_*rad 12 android admob

我正在尝试将AdMob广告显示在我的Android应用程序中,并且无法这样做.我已经联系了他们的支持,并且在将近一周内没有收到任何回复,所以我想我现在会在这里寻求帮助.

首先是一些代码:
AndroidManifest.xml

<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:versionCode="1" package="com.foo.application">
  <application>
    <meta-data 
        android:value="admob-publisher-id-here" 
        android:name="ADMOB_PUBLISHER_ID" />
  </application>

  <uses-permission android:name="android.permission.INTERNET" />
</manifest>
Run Code Online (Sandbox Code Playgroud)

是的,admob-publisher-id-here是我在实际清单文件中的真正发布者ID.

main_layout.xml

<LinearLayout 
    android:id="@+id/adhost" 
    android:layout_width="fill_parent"
    android:padding="5dip" android:layout_height="wrap_content"
    android:minHeight="20dip" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res/com.foo.application">
  <com.admob.android.ads.AdView 
      android:id="@+id/ad" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      app:backgroundColor="#000000" 
      app:primaryTextColor="#FFFFFF" 
      app:secondaryTextColor="#CCCCCC"
      app:keywords="android at&amp;t t-mobile iphone blah"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

attr.xml

<resources>
  <declare-styleable name="com.admob.android.ads.AdView">            
    <attr name="backgroundColor" format="color" />
    <attr name="primaryTextColor" format="color" />
    <attr name="secondaryTextColor" format="color" />
    <attr name="keywords" format="string" />
    <attr name="refreshInterval" format="integer" />
  </declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud)

MainActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.admob.android.ads.AdManager;
import com.admob.android.ads.AdView;

import com.foo.application.R;

public class MainActivity extends Activity {
  private AdView ad;

  public MainActivity ( ) {
        AdManager.setTestDevices ( new String[] {
      // made this up for this
            "012345678994814751742145548AAAAAAA" 
        } );
        AdManager.setTestAction ( "url" );
    }

    @Override
    public void onCreate ( Bundle savedInstanceState ) {
      super.onCreate ( savedInstanceState );
        setContentView(R.layout.main_layout);

        if ( AdManager.isTestDevice ( this ) ) {
          // this logs
            Log.w ( "foo-app", "we are on a test device" );
        }

        ad = ( AdView ) this.findViewById ( R.id.ad );
        if ( ad != null ) {
            ad.setVisibility ( View.VISIBLE );
            ad.setAdListener ( new AdListener () );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

AdListener.java

package com.foo.application

import android.util.Log;

import com.admob.android.ads.AdView;
import com.admob.android.ads.SimpleAdListener;

class AdListener extends SimpleAdListener {
    @Override
    public void onFailedToReceiveAd ( AdView adView ) {
      // this is what logs
        Log.w ( "foo-app", "failed to receive ad" );
        super.onFailedToReceiveAd ( adView );
    }

    @Override
    public void onFailedToReceiveRefreshedAd ( AdView adView ) {
        Log.w ( "foo-app", "failed to receive refreshed ad" );
        super.onFailedToReceiveRefreshedAd ( adView );
    }

    @Override
    public void onReceiveAd ( AdView adView ) {
        Log.w ( "foo-app", "receive ad" );
        super.onReceiveAd ( adView );
    }

    @Override
    public void onReceiveRefreshedAd ( AdView adView ) {
        Log.w ( "foo-app", "receive refreshed ad" );
        super.onReceiveRefreshedAd ( adView );
    }
}
Run Code Online (Sandbox Code Playgroud)

在logcat中,我看到以下内容:

INFO/AdMobSDK(29541): To get test ads on this device use AdManager.setTestDevices( new String[] { "012345678994814751742145548AAAAAAA" } )
WARN/AdMobSDK(29541): Ignoring requestFreshAd() because we are requesting an ad right now already.
WARN/AdMobSDK(29541): Ignoring requestFreshAd() because we are requesting an ad right now already.
WARN/foo-app(29541): we are on a test device
WARN/foo-app(29541): failed to receive ad
Run Code Online (Sandbox Code Playgroud)

AdListener表示无法检索广告.根据admob wiki,我有一个活跃的数据连接,而且我处于测试模式,所以应该总是显示一个广告.logcat中没有错误,应用程序强制也根本没有关闭.

任何人都有任何想法,或者你看到我做错了什么?

更新:我收到了来自admob的回复,但他们所说的只是我创造了两次,我不是

smi*_*324 20

Admob应该将此作为警告,但我离题了......

在您的布局中,您android:padding="5dip"当然会导致像G1这样的手机"丢失"一些可用的屏幕空间(低于320dip宽度).这当然是admob广告的最小宽度,导致它失败.然后onFailedToReceiveAd在没有任何解释的情况下呼叫听众.

日志只包含

WARN/AdMobSDK(347): Ignoring requestFreshAd() because we are requesting an ad right now already.
Run Code Online (Sandbox Code Playgroud)

修复很简单,不要在包含广告的布局的根目录中使用填充或边距.进行了一些实验,但它确实有效.