Mein Problem ist, dass Anzeigen in meiner App, im Testmodus oder gar nicht angezeigt werden. Ich werde diese Frage für den Testmodus spezifisch halten, und sobald ich das funktioniert, werde ich mir Sorgen um Live-Anzeigen machen.
Entwicklungsinformationen
Ich benutze Eclipse für die Entwicklung.
Ich habe Anzeigen mit Google Play-Diensten und Admob in meiner Android-App eingerichtet, wie in der von Google bereitgestellten Online-Dokumentation beschrieben.
Ich habe meine Geräte-ID mit addTestDevice ("xxxxxxxxxxxxxxxx") hinzugefügt und die gehashte Geräte-ID mehrmals überprüft, um sicherzustellen, dass sie korrekt ist.
Das Problem (siehe unten für Protokollinformationen)
Wenn ich die Anwendung auf meinem Gerät starte, werden überhaupt keine Anzeigen angezeigt. Dies geschieht auch dann, wenn ich mein Gerät als Testgerät hinzugefügt habe.
Ich habe hoch und niedrig gesucht und viele ähnliche Probleme aufgetaucht, aber ich muss noch eine Antwort auf dieses spezielle Problem finden.
LogCat-Ausgabe
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
Meine Aktivität
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);
}
});
}
}
Die Probleme treten nur auf, wenn die betreffende App vom Playstore suspendiert ist. Vielleicht können Sie versuchen, den Paketnamen und und auch mit der neuen Admob-ID zu ändern. Es besteht die Möglichkeit, dass eine bestimmte Admob-ID aufgrund von Compliance-Bedingungen ebenfalls gesperrt wird.
Wenn Sie eine Einheit erstellen und diese sofort verwenden, kann dieser Fehler angezeigt werden. Versuchen Sie, Anzeigen nach 30 Minuten oder mehr zu laden.
Sie brauchen, um ID dieses Google bieten für Sie für das aktuelle Testgerät zu verwenden. Sie können es in logcat finden, einfach etwas wie das finden:
Ads: Use AdRequest.Builder.addTestDevice("903A70A3D439E256BAED43E65A79928E") to get test ads on this device.
Wenn Ihr AdMob-Konto nur für Banneranzeigen konfiguriert ist und Sie Interstitial-Anzeigen verwenden, kann dieses Problem auftreten. Meine 2 Cent.
es ist auch möglich, Inventar zu haben. Ich bin auch aus diesem Grund Gesicht . Anzeige konnte nicht geladen werden: 3
In meinem Fall habe ich festgestellt, dass meine Rechnungsadresse nicht verifiziert wurde und Anzeigen blockiert wurden. Überprüfen Sie die Rechnungsadresse, die automatisch korrigiert wird. https://www.google.com/adsense/
Ich habe auf Galaxy S4 getestet, später hat mein Freund die Note 2 getestet und die Bannerwerbung wurde nicht angezeigt. Daher war das Problem die Testgeräte-ID. Wenn Sie testen, stellen Sie sicher, dass die Testgeräte-ID des Geräts ist, auf dem Sie testen.
Wenn Sie die App für Familien konzipiert haben.
Bundle extras = new Bundle();
extras.putBoolean("is_designed_for_families", true);
AdRequest request = new AdRequest.Builder()
.addNetworkExtrasBundle(AdMobAdapter.class, extras)
.build();
Übergeben Sie einfach Ihre Testgeräte-ID an adBuilder:
/** adRequest Object For test device */
AdRequest adRequest = new AdRequest.Builder().addTestDevice("TEST_DEVICE_ID").build();
/** adRequest Object For Production Device*/
AdRequest adRequest = new AdRequest.Builder().build();
Sie können Ihre Test-Divece-ID in logCat nach der AdBuilder-Anfrage ohne Test-Divece-ID finden:
I/Ads: Verwenden Sie AdRequest.Builder.addTestDevice ("TEST_DEVICE_ID") an Holen Sie sich Testanzeigen auf diesem Gerät.
In meinem Fall haben meine Werbebanner den Antwortcode 3 auf einigen Geräten mit hoher API und insbesondere mit Breitbildschirm (ich habe die intelligente Bannergröße verwendet). Die Änderung der Abhängigkeit von com.google.Android.gms.ads
in com.google.firebase:firebase-ads
(falls Sie Firebase verwenden) hat mein Problem gelöst.
Ich hatte auch dieses Problem heute. Meine App wurde nicht angehalten, aber die Änderung des APK-Namens hat funktioniert. Wir hatten eine Test-App umbenannt, um sie für die Produktion freizugeben. wir haben den apk-namen deshalb geändert. Dies führte zu einer fehlerhaften Anzeigenfüllung bei MoPub und Admob.
In meinem Fall war dies der Fehler, weil eine geografisch eingeschränkte Anzeige aus einer Region angefordert wurde, die für diese Anzeige nicht unterstützt wird. Wenn ich den Ort für das Anzeigenanforderungs-Bundle hartcodiert habe, um sich innerhalb des akzeptablen Bereichs zu befinden oder überhaupt keinen Ort in der Anforderung enthalten, wurde die Anzeige einwandfrei dargestellt. Ansonsten hatte ich den gleichen Fehler wie OP in der Konsole.
Dies kann daran liegen, dass Sie nicht auf das zu ladende Anzeige warten.
Für mich hat die Implementierung der AdLoaded
-Methode von AdListener
den Job gemacht.
mAdInterstitial.loadAd(AdRequest.Builder().addTestDevice("XXXXXXX").build())
mAdInterstitial.adListener = object : AdListener() {
override fun onAdLoaded() {
mAdInterstitial.show()
}
}
In meinem Fall habe ich mit einem Emulator getestet und den gleichen Fehler erhalten. Nach dem Umstieg auf ein Telefon funktioniert alles.
Versuchen Sie ein anderes Testgerät.
Anzeigen sind vom Admob-Server deaktiviert. Ihr Code ist in Ordnung. Versuchen Sie, den Paketnamen zu ändern, und prüfen Sie, ob Anzeigen angezeigt werden. Dann wenden Sie sich an admob, um das Problem zu sehen.
Ich hatte auch dieses Problem. Erst als ich zu Admob.com ging und meine App "manuell" hinzufügte, konnte ich meine "Anzeigenblock-ID" erhalten. Ich habe diese Anzeigenblock-ID-Zeichenfolge als Argument für meinen adView.setAdUnitId
-Aufruf verwendet. Dann habe ich die über Eclipse generierte "Release" -APK installiert und geöffnet. Datei> Exportieren> Android-Anwendung exportieren