我正在尝试将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>
是的, 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&t t-mobile iphone blah"/>
</LinearLayout>
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>
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 () );
}
}
}
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 );
}
}
在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
AdListener表示无法检索广告。我有一个有效的数据连接,而且我处于测试模式,所以它应该始终显示一个广告,根据admob wiki。 logcat中没有错误,应用程序强制也根本没有关闭。
任何人有任何想法,或者你看到我做错了什么?
更新:我收到了来自admob的回复,但他们说的只是我创造了两次,我不是
答案 0 :(得分:20)
Admob应该将此作为警告,但我离题了......
在您的布局中,您有android:padding="5dip"
这当然会导致像G1这样的手机“丢失”部分可用的屏幕空间(低于320dip宽度)。这当然是admob广告的最小宽度,导致它失败。然后在听众中调用onFailedToReceiveAd
,无需任何解释。
日志只包含
WARN/AdMobSDK(347): Ignoring requestFreshAd() because we are requesting an ad right now already.
修复很简单,不要在包含广告的布局的根目录中使用填充或边距。做了一些实验,但它确实有效。
答案 1 :(得分:0)
Ryan你有没有设置你的Admob发行商Id ???
<meta-data android:value="YOUR_ADMOB_PUBLISHER_ID"
android:name="ADMOB_PUBLISHER_ID" />
答案 2 :(得分:0)
尝试摆脱
if ( ad != null ) {
ad.setVisibility ( View.VISIBLE );
ad.setAdListener ( new AdListener () );
}
并查看它是否有效,因为我的相同而没有这些线并且工作正常。
答案 3 :(得分:0)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:layout_width="fill_parent" android:id="@+id/rltvLayout1"
android:layout_height="fill_parent">
<LinearLayout android:id="@+id/linearLayoutwebview"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:orientation="vertical">
<WebView android:id="@+id/webView"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:fitsSystemWindows="true" />
</LinearLayout>
<LinearLayout android:layout_width="fill_parent"
android:id="@+id/ad_layout" android:layout_height="wrap_content"
android:gravity="bottom" android:layout_alignParentBottom="true"
android:layout_alignBottom="@+id/home_layout">
<com.google.ads.AdView android:layout_width="wrap_content"
android:layout_height="wrap_content" ads:adUnitId="put here your id"
ads:adSize="BANNER" android:id="@+id/adView" ads:refreshInterval="60" />
</LinearLayout>
</RelativeLayout>