My issue is that ads are not being displayed at all in my app, test mode or not. I am going to keep this question specific to test mode, and once I get that working I will worry about live ads.
Development Information
I am using Eclipse for development.
I have setup ads using Google Play Services and Admob in my Android app, as described in the online documentation provided by Google.
I have added my device ID using addTestDevice("xxxxxxxxxxxxxxxx"), and have checked the hashed device ID a number of times to be sure it is correct.
The Issue (see below for log info)
When I run the application on my device, no ads are displayed at all. This happens even when I have added my device as a test device.
I have searched high and low, and turned up many similar issues, but am yet to find an answer to this specific problem.
LogCat Output
10-28 13:56:41.659: I/Ads(1704): Starting ad request. 10-28 13:56:42.187: I/Ads(1704): No fill from ad server. 10-28 13:56:42.187: W/Ads(1704): Failed to load ad: 3 10-28 13:56:42.199: W/Ads(1704): No GMSG handler found for GMSG: gmsg://mobileads.google.com/jsLoaded?google.afma.Notify_dt=1414504602197
My Activity
package bb.hoppingbird; import org.cocos2d.layers.CCScene; import org.cocos2d.nodes.CCDirector; import org.cocos2d.opengl.CCGLSurfaceView; import com.google.android.gms.ads.AdListener; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdSize; import com.google.android.gms.ads.AdView; import com.google.android.gms.ads.InterstitialAd; import android.app.Activity; import android.content.SharedPreferences; import android.media.MediaPlayer; import android.os.Bundle; import android.support.v4.view.ViewPager.LayoutParams; import android.util.DisplayMetrics; import android.view.KeyEvent; import android.widget.RelativeLayout; import android.widget.Toast; public class MainActivity extends Activity { private CCGLSurfaceView mGLSurfaceView; //<!-- Admob Ads Using Google Play Services SDK --> private static final String AD_UNIT_ID = "ca-app-pub-xxxxxxxxxxxxxxxxxxxx"; private static final String AD_INTERSTITIAL_UNIT_ID = "ca-app-pub-xxxxxxxxxxxxxxxxxxxx"; /** The Admob ad. */ private InterstitialAd interstitialAd = null; public AdView adView = null; public static MainActivity app; public void onCreate(Bundle savedInstanceState) { app = this; super.onCreate(savedInstanceState); // set view mGLSurfaceView = new CCGLSurfaceView(this); //Ads ---------------- // Create the adView RelativeLayout layout = new RelativeLayout(this); layout.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); //<!-- Ads Using Google Play Services SDK --> adView = new AdView(this); adView.setAdSize(AdSize.SMART_BANNER); adView.setAdUnitId(AD_UNIT_ID); // Add the adView to it RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); params.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); adView.setLayoutParams(params); layout.addView(mGLSurfaceView); layout.addView(adView); setContentView(layout); //New AdRequest AdRequest adRequest = new AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) .addTestDevice("0D47C6944503F0284666D16BB79BF684") .build(); // Start loading the ad in the background. adView.loadAd(adRequest); //-----------------------------------------------------Interstitial Add // Create an Interstitial ad. interstitialAd = new InterstitialAd(this); interstitialAd.setAdUnitId(AD_INTERSTITIAL_UNIT_ID); interstitialAd.setAdListener(new AdListener() { @Override public void onAdLoaded() { interstitialAd.show(); } @Override public void onAdFailedToLoad(int errorCode) { Toast.makeText(getApplicationContext(), "Interstitial Ads loading failed", Toast.LENGTH_SHORT).show(); } }); // Load the interstitial ad. //showInterstitialAds(); //---------------------- // set director CCDirector director = CCDirector.sharedDirector(); director.attachInView(mGLSurfaceView); director.setAnimationInterval(1/60); // get display info DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); G.display_w = displayMetrics.widthPixels; G.display_h = displayMetrics.heightPixels; G.scale = Math.max(G.display_w/1280.0f, G.display_h/800.0f); G.width = G.display_w / G.scale; G.height = G.display_h / G.scale; // get data SharedPreferences sp = CCDirector.sharedDirector().getActivity().getSharedPreferences("GameInfo", 0); G.music = sp.getBoolean("music", true); G.sound = sp.getBoolean("sound", true); // create sound G.soundMenu = MediaPlayer.create(this, R.raw.menu); G.soundMenu.setLooping(true); G.soundGame = MediaPlayer.create(this, R.raw.game); G.soundGame.setLooping(true); G.soundCollide = MediaPlayer.create(this, R.raw.collide); G.soundJump = MediaPlayer.create(this, R.raw.jump); G.soundLongJump = MediaPlayer.create(this, R.raw.long_jump); G.soundSpeedDown = MediaPlayer.create(this, R.raw.speed_down); G.soundSpeedUp = MediaPlayer.create(this, R.raw.speed_up); G.soundDirection = MediaPlayer.create(this, R.raw.direction_sign); G.soundClick = MediaPlayer.create(this, R.raw.menu_click); G.soundCollect = MediaPlayer.create(this, R.raw.collect); G.bgSound = G.soundMenu; // show menu CCScene scene = CCScene.node(); scene.addChild(new MenuLayer(true)); director.runWithScene(scene); } @Override public void onPause() { if (adView != null) { adView.pause(); } super.onPause(); G.bgSound.pause(); CCDirector.sharedDirector().onPause(); } @Override public void onResume() { super.onResume(); if (adView != null) { adView.resume(); } if( G.music ) G.bgSound.start(); CCDirector.sharedDirector().onResume(); } @Override public void onDestroy() { // Destroy the AdView. if (adView != null) { adView.destroy(); } super.onDestroy(); G.bgSound.pause(); CCDirector.sharedDirector().end(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if( keyCode == KeyEvent.KEYCODE_BACK ) { CCDirector.sharedDirector().onKeyDown(event); return true; } return super.onKeyDown(keyCode, event); } public void showInterstitialAds() { runOnUiThread(new Runnable() { public void run() { AdRequest interstitialAdRequest = new AdRequest.Builder().build(); interstitialAd.loadAd(interstitialAdRequest); } }); } }
Google throws error code 3 for many reasons. One of the official reason is that there is no Ads in the Google Server. This Error is also caused when you change your Keystore after implementing the Ad to previous Keystore. If you have changed your Keystore then you can fix this error just by replacing the Ad Unit.
Make sure you have updated AdMob with your payment details. Make sure that the ads you created in AdMob are banner ads. Check your AdMob dashboard to see the status of your ads, are they active? Verify you used the correct Ad Unit Id.
You can definitely use Admob without uploading your app to Google Play.
If you create adunit and use it immediately may show this error, try to load ads after 30 minutes or more time.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With