I am trying to get AdMob ads to display in my android application and have been unable to do so. I have contacted their support and have not received any response in almost a week, so I figured I would now ask for help here.
First some code:
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>
Yes, admob-publisher-id-here is my real publisher id in the actual manifest file.
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;
imp开发者_开发知识库ort 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 );
}
}
In the logcat, i see the following:
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
The AdListener is indicating that it is unable to retrieve the ad. I have an active data connection, plus I am in Test Mode, so it is supposed to always show an ad, according to the admob wiki. There are no errors in the logcat, nor is the application force closing at all.
Anyone have any ideas or do you see something I am doing wrong?
update: I got a response from admob, but all they said was i was creating the aeveiw twice, which I am not
Admob should have included this as a warning, but I digress...
In your layout you have android:padding="5dip"
this of course causes phones like the G1 to 'lose' some of their available screen real-estate (below 320dip width). Which is of course the minimum width for an admob ad, causing it to fail. Then calling onFailedToReceiveAd
in the listener with no explanation whatsoever.
The logs only contain
WARN/AdMobSDK(347): Ignoring requestFreshAd() because we are requesting an ad right now already.
The fix is simple, don't use padding or margins in the root of your layouts that contain ads. Took some experimentation, but it works.
Try getting rid of
if ( ad != null ) {
ad.setVisibility ( View.VISIBLE );
ad.setAdListener ( new AdListener () );
}
and seeing if it works, as mine is identical without those lines and works fine.
<?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>
Ryan have you set your Admob publisher Id???
<meta-data android:value="YOUR_ADMOB_PUBLISHER_ID"
android:name="ADMOB_PUBLISHER_ID" />
精彩评论