【问题标题】:Admob No fill from ad server - failed to load ad: 3Admob 没有来自广告服务器的填充 - 无法加载广告:3
【发布时间】:2014-10-28 14:06:07
【问题描述】:

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

发展信息

我正在使用 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);
            }
        });
    }
}

【问题讨论】:

  • 您不应该在互联网上显眼地发布 AD_UNIT_ID 和 AD_INTERSTITIAL_UNIT_ID
  • 您确定横幅或插页式广告是否失败?或者两者兼而有之?你还在使用谷歌在他们的教程中提供的测试 AD_UNIT_ID 吗?
  • 嗨@TimCastelijns 横幅和插页式广告失败。谢谢
  • AD_UNIT_ID 呢?是你自己的吗?还是谷歌的测试ID?另外,您的设备上有 Google Play 吗?
  • 是的,我的设备中有 google play 并且 AD_UNIT_ID 是我的

标签: java android eclipse admob cocos2d-android


【解决方案1】:

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

【讨论】:

  • 甚至可能需要几个小时(使用新的广告单元,甚至可能是新的 AdMob 应用)。
【解决方案2】:

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

【讨论】:

  • 我同意这个答案,只需重命名您的包,它将 100% 工作。
  • 我今天才遇到这个。我的应用程序已暂停。同时更改应用程序名称 - &lt;string name="app_name"&gt;TestApp&lt;/string&gt;
  • 这是错误的。原因可能是应用程序被暂停,但还有其他可能的原因。例如,在 admob 界面中创建另一个应用单元可能会有所帮助。
  • 不幸的是,“只有当特定应用程序从 Playstore 中被暂停时才会出现问题。”不是真的。我的应用程序和 admob 帐户都很好,事实上大约 37% 的客户正在接收广告。这是突然的,一夜之间,从大约 100% 下降,甚至没有在 Google Play 上更新我的应用程序。但是,我的 2 台测试设备没有显示广告并且也出现代码 3 错误。
  • 我的应用程序没有暂停我仍然面临同样的问题。所以我认为暂停不是这个错误的原因。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    库存也有可能。我也因此而面子。 failed to load ad : 3

    【讨论】:

      【解决方案5】:

      就我而言,我发现我的帐单邮寄地址未经验证,广告被屏蔽。验证帐单地址,它将自动得到修复。 https://www.google.com/adsense/

      【讨论】:

      • 这看起来也发生在我身上。显示测试广告单元。我以前有一个带有这个 gmail 地址的应用程序,它从未达到支付门槛。我不记得它是adsense,但也许是?我目前使用的新广告是 admob,这些广告确实“无法加载代码 3”。在我的 adsense 主页上,它显示“您的广告单元未显示,因为您尚未验证您的地址 (PIN)。”将尝试重新发送 PIN 码。
      【解决方案6】:

      如果您的 AdMob 帐户仅配置为横幅广告并且您使用的是插页式广告,您可能会遇到此问题。我的 2 美分。

      【讨论】:

        【解决方案7】:

        基本上只是尝试将您的测试设备 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();
        

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

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

        【讨论】:

          【解决方案8】:

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

          Bundle extras = new Bundle();
          extras.putBoolean("is_designed_for_families", true);
          
          AdRequest request = new AdRequest.Builder()
                  .addNetworkExtrasBundle(AdMobAdapter.class, extras)
                  .build();
          

          【讨论】:

          • 我创建了横幅广告并验证了我的付款信息,两天后我测试了我的广告,它给了我错误代码 3 没有从服务器添加填充...
          • @AsadMukhtar 嗨,我遇到了同样的问题,我创建了横幅广告,并且还验证了所有内容,两天后我没有收到广告(没有广告,甚至没有显示测试广告)。相同的消息“错误代码 3 没有从服务器添加填充”你能 _/\_ 帮助吗?你的情况发生了什么?,你是怎么解决的?还是这是暂时的?
          • 同样的问题,但注意到它只能根据设备/屏幕方向正常工作! Pixel 3横向OK,纵向KO。然后在Doogee,横向KO,纵向OK!?使用智能横幅或横幅几乎没有什么区别。
          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

            我也有这个问题。直到我去 Admob.com 并“手动”添加了我的应用程序,这样我才能获得我的“广告单元 ID”。我将此广告单元 ID 字符串作为我的 adView.setAdUnitId 调用的参数。然后我安装并打开了我通过 Eclipse 生成的“发布”APK。文件 > 导出 > 导出 Android 应用程序

            【讨论】:

              【解决方案11】:

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

              【讨论】:

                【解决方案12】:

                Admob 服务器禁用了广告,您的代码没有问题,尝试更改包名称,看看是否显示广告。然后联系admob查看问题。

                【讨论】:

                  【解决方案13】:

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

                  【讨论】:

                    【解决方案14】:

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

                    【讨论】:

                      【解决方案15】:

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

                      尝试其他测试设备。

                      【讨论】:

                      • 如何在模拟器上解决这个问题?
                      【解决方案16】:

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

                      对我来说,实现 AdListenerAdLoaded 方法完成了这项工作。

                          mAdInterstitial.loadAd(AdRequest.Builder().addTestDevice("XXXXXXX").build())
                          mAdInterstitial.adListener = object : AdListener() {
                              override fun onAdLoaded() {
                                  mAdInterstitial.show()
                              }
                          }
                      

                      【讨论】:

                        【解决方案17】:

                        我正在关注一个 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)
                        

                        【讨论】:

                          【解决方案18】:

                          试试这个:

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

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2018-08-02
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2019-04-19
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多