Admob广告服务器无法填充 - 无法加载广告:3

时间:2014-10-28 14:06:07

标签: java android eclipse admob cocos2d-android

我的问题是广告根本没有在我的应用中显示,测试模式与否。我将把这个问题专门用于测试模式,一旦我开始工作,我会担心实时广告。

发展信息

我正在使用Eclipse进行开发。

我已在Android应用中使用Google Play服务和Admob设置广告,如Google提供的在线文档所述。

我已使用addTestDevice(“xxxxxxxxxxxxxxxx”)添加了设备ID,并多次检查散列设备ID以确保其正确无误。

问题(请参阅下面的日志信息)

当我在设备上运行应用程序时,根本不会显示任何广告。即使我将设备添加为测试设备,也会发生这种情况。

我搜索过高低,并提出了许多类似的问题,但我还没有找到这个具体问题的答案。

LogCat输出

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

我的活动

   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);
            }
        });
    }
}

18 个答案:

答案 0 :(得分:10)

只有当特定应用程序从Playstore暂停时才会出现问题。也许您可以尝试更改软件包名称以及新的Admob Id。由于合规性,特定的admob id也有可能被暂停。

答案 1 :(得分:9)

如果您创建adunit并立即使用它可能会显示此错误,请尝试在30分钟或更长时间后加载广告。

答案 2 :(得分:4)

需要使用Google 提供 ID 来获取当前的测试设备。你可以在logcat中找到它,只需找到这样的东西:

Ads: Use AdRequest.Builder.addTestDevice("903A70A3D439E256BAED43E65A79928E") to get test ads on this device.

答案 3 :(得分:3)

它也有可能运气库存。我也因此而面对。 failed to load ad : 3

答案 4 :(得分:2)

如果您的AdMob帐户仅针对横幅广告进行了配置,并且您正在使用插页式广告,则可能会遇到此问题。我的2美分。

答案 5 :(得分:2)

在我的情况下,我发现我的结算地址未经过验证,广告被屏蔽。验证帐单地址会自动得到修复。 https://www.google.com/adsense/

答案 6 :(得分:1)

如果您的应用支持专为家庭设计。

Bundle extras = new Bundle();
extras.putBoolean("is_designed_for_families", true);

AdRequest request = new AdRequest.Builder()
        .addNetworkExtrasBundle(AdMobAdapter.class, extras)
        .build();

答案 7 :(得分:1)

我正在Galaxy S4上测试,后来我的朋友在Note 2上测试了它并没有显示横幅广告。因此问题是测试设备Id。如果您正在测试,请确保测试设备ID是您正在测试的设备。

答案 8 :(得分:0)

我正在关注一个 youtube 教程,这家伙起初使用的是“横幅”,然后切换到“SMART_BANNER”。所以我想我也可以使用智能横幅。不幸的是这是错误,我改变了 adsize 并且它起作用了。您也可能有不同的 adSize。

 <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        app:adSize="BANNER"
        app:adUnitId="ca-app-pub-3940256099942544/6300978111"></com.google.android.gms.ads.AdView>

活动中使用的代码:

MobileAds.initialize(this) {}
var mAdView = findViewById<AdView>(R.id.adView)

val adRequest = AdRequest.Builder().build()
mAdView.loadAd(adRequest)

答案 9 :(得分:0)

这可能是因为您没有等待广告的加载。

对我来说,实现[ {'box_office': 12574015, 'budget': 3986053.18, 'ratings': [8, 7, 1]}, {'box_office': 44855251, 'budget': 3301717.62, 'ratings': [7, 1, 1]}, {'box_office': 36625133, 'budget': 8678591, 'ratings': [7, 6, 2, 8]}, {'box_office': 48397691, 'budget': 15916122.88, 'ratings': [7, 3, 8, 8, 6, 8]}, {'box_office': 43344800, 'budget': 4373679.25, 'ratings': [1, 1, 7, 4]} ] 的{​​{1}}方法就可以了。

[
    {'box_office': 44855251, 'budget': 3301717.62, 'ratings': [7, 1, 1]}, 
    {'box_office': 43344800, 'budget': 4373679.25, 'ratings': [1, 1, 7, 4]}, 
    {'box_office': 12574015, 'budget': 3986053.18, 'ratings': [8, 7, 1]}, 
    {'box_office': 36625133, 'budget': 8678591.0, 'ratings': [7, 6, 2, 8]}, 
    {'box_office': 48397691, 'budget': 15916122.88, 'ratings': [7, 3, 8, 8, 6, 8]}
]

答案 10 :(得分:0)

基本上,只需尝试将您的测试设备ID传递给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();

在没有测试潜水号adBuilder请求之后,您可以在logCat中找到您的测试潜水号:

  

I /广告:使用   AdRequest.Builder.addTestDevice(“ TEST_DEVICE_ID”)至   在此设备上获取测试广告。

答案 11 :(得分:0)

在我的情况下,我正在使用模拟器进行测试并获得相同的错误。换到手机后一切正常。

尝试其他测试设备。

答案 12 :(得分:0)

在我的情况下,我的横幅广告在某些具有高API的设备上有响应代码3,尤其是宽屏幕(我使用了智能横幅尺寸),将依赖性从com.google.android.gms.ads更改为com.google.firebase:firebase-ads(以防万一)你正在使用Firebase)解决了我的问题。

答案 13 :(得分:0)

在我的情况下,这是因为从该广告不支持的区域请求地理限制广告而导致的错误。如果我将广告请求包的位置硬编码到可接受的区域内,或者根本不在请求中包含位置,那么广告就会被渲染得很好;否则我在控制台中遇到与OP相同的错误。

答案 14 :(得分:0)

广告已从Admob服务器停用,您的代码正常,请尝试更改包名称,并查看是否展示了广告。然后联系admob查看问题。

答案 15 :(得分:0)

我今天也有这个问题。我的应用程序没有暂停,但apk名称更改确实有效。我们已重命名测试应用程序以将其发布到生产中;我们改变了apk名称。这搞砸了我们在MoPub和Admob上的广告填充。

答案 16 :(得分:0)

我也有这个问题。直到我去Admob.com和&#34;手动&#34;添加了我的应用程序,以便我可以获得我的&#34;广告单元ID&#34;。我将此广告单元ID字符串作为参数my adView.setAdUnitId调用。然后我安装并打开了#34;发布&#34;我通过Eclipse生成的APK。文件&gt;出口&gt;导出Android应用程序

答案 17 :(得分:-2)

试试这个:

MobileAds.initialize(this, getString(R.string.admob_app_id));
AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();      
mAdView.loadAd(adRequest);