"Failed to load ad: 3" 使用 DoubleClick

"Failed to load ad: 3" with DoubleClick

我正在使用 DoubleClick 为我的 Android 应用程序设置广告,但无法显示最终广告。有人可以帮助我吗?

当我通过添加“.addTestDevice("xxx...")”测试广告时,我得到了测试广告,但是当我删除此行时,我收到以下错误:

W/Ads: No fill from ad server

W/Ads: Failed to load ad: 3

我这样设置我的广告:

PublisherAdRequest adRequest = new PublisherAdRequest.Builder().build();
mPublisherAdView.loadAd(adRequest);

我的 publisherView 看起来像这样:

<com.google.android.gms.ads.doubleclick.PublisherAdView
    android:id="@+id/pronostics_ad"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:layout_gravity="center"

    ads:adSize="BANNER"
    ads:adUnitId="@string/ad_unit_pronostic">
</com.google.android.gms.ads.doubleclick.PublisherAdView>

有什么问题吗?

W/Ads: Failed to load ad: 3

根据 Documentation,您收到以下错误代码:

public static final int ERROR_CODE_NO_FILL

The ad request was successful, but no ad was returned due to lack of ad inventory.

Constant Value: 3

基于post onFailedToReceiveAd - Ad request successful, but no ad returned due to lack of ad inventory when using admob with adwhirl:

If you are getting this error, then your code is correct. The issue is that AdMob does not always have an ad to return for every request. This may happen particularly if you have just registered your AdMob publisher ID, as it takes some time and multiple requests before the new ID starts returning ads.

Another reason your fill rate may be low is that you don't have AdSense backfill enabled, or you have filtered out some ads. Check your app settings to see if that is the case.

编辑:

更新应用程序-ads.txt并使用“setTestDeviceIds”在物理设备上进行测试。

截至编辑这些说明时: https://developers.google.com/admob/android/test-ads 工作了。为了测试广告,我使用了演示广告单元,需要添加 app-ads.txt 行并等待它被 admob 爬虫(仅在 Android-12 模拟器上工作)抓取,但仍然得到指令在 Logcat 中使用“setTestDeviceIds” - 上述 link 下的代码,结果需要它才能在通过 USB 连接的物理设备上显示测试广告。

有一个选项对我们的案例有所帮助。 正如@blizzard 在 Google Developer Console 的应用程序设置中提到的那样,有一个名为 "Pricing and Distribution" 的部分。在此部分中有一个复选框 "CONTAINS ADS"。在我们的例子中它被禁用了。启用后我们成功收到广告。

如果错误仍然存​​在,最后尝试在 admob 中创建一个新展示位置。这对我有用。无需更改代码广告中的任何其他内容(展示位置 ID 字符串除外)即可开始展示。

选项1:进入设置->搜索重置广告ID->点击在 重置广告 ID -> OK。您现在应该开始接收广告

没有搜索选项?尝试 选项 2

选项2:进入设置->Google->广告->重置广告ID->确定

设置中没有 Google 选项?尝试 选项 3

选项 3:查找 Google 设置 (不是设置)->广告- >重置广告ID

一个新的更新答案: 今年 10 月(2018 年)由于缺乏隐私政策而被删除的许多应用程序在返回 Play 商店后无法接收广告。 您必须使用此表单为该应用程序的广告申请 "reset"。 https://support.google.com/admob/contact/appeal_policy_violation

我花了几天时间才意识到并找到答案。 希望你能恢复你的广告。

这是一个简单的解决方法(无解决方案):

您可以安装 InMobi 等中介: https://developers.google.com/admob/android/mediation/inmobi

这样一来,如果 admob 由于某种原因没有向您展示广告,您仍然可以展示来自其他广告网络的广告。

我将把它留在这里以防它对某些人有用。在尝试了所有论坛和帖子中提到的所有修复之后,对我有用的只是使用全局 AdRequest 对象。在每个 Activity 中的每个 adView 上调用 loadAd 时,我会使用相同的对象。我已经看到它倾向于在每个 AdView 上加载相同的广告,而不管 activity 但至少现在我得到了广告。

W/Ads: Failed to load ad: 3

这意味着您的代码是正确的,但由于对服务器的请求较少,您的广告不可见。 要检查测试广告,您应该将代码循环一段时间,并且您必须发出多个请求,以便您的 admob 收到多个请求并立即加载广告。

添加以下代码

for(int i=0;i<1000;i++) {
            AdRequest adRequest = new AdRequest
                    .Builder()
                    .addTestDevice("B431EE858B5F1986E4D89CA31250F732")
                    .build();
            accountSettingsBinding.adView.loadAd(adRequest);
        } 

多次重启您的应用程序。

开始接收广告后删除循环

我的应用程序出现了同样的错误。我在调试配置中启动应用程序。我 运行 在同一设备上 发布 版本的应用程序后,问题就解决了。在 Android Studio 中,只需转至构建 -> 生成签名 APK 并选择发布配置。然后在您的设备上安装 release .apk。在调试配置中,您还可以通过添加 AdRequest.Builder.addTestDevice("YOUR TEST DEVICE") 检查您的 test 广告是否出现。如果可以显示广告,则说明您只需要发布配置即可。

如果您发布的应用程序没有 admob,并且它在 Google 开发者控制台(称为 "Pricing and Distribution")中的设置未被选中 "CONTAINS ADS"。始终使用具有 logcat 输出的测试 ID 进行开发。

不要忘记在 Google AdMod 上添加支付方式。 "Error code 3" 是我的问题。 无论如何,当您的帐户 Google AdMod 准备好展示广告(针对经过测试的设备或真实用户)时,他们 向您发送电子邮件 表明您的帐户已验证并可以使用! 在这封信之后一切都应该正常工作。

在新的 admob 版本上 使用这个:

//在

之前加载你的adView
    adView.setAdListener(new AdListener() {    


        @Override
        public void onAdFailedToLoad(int errorCode) {
            // Code to be executed when an ad request fails.
            Toast.makeText(Your current activity.this, "Ad failed: " + errorCode, Toast.LENGTH_SHORT).show();
        }




    });

如果广告在您的模拟器上加载,这意味着它们 return 测试广告,这应该意味着您的代码没有任何问题。他们是否也在您的 phone 上加载测试广告?

如果您能够在模拟器和测试设备上看到测试广告,那么这通常意味着 AdMob(假设您使用的是 AdMob)无法 return 由于缺少广告广告库存。如果是这种情况,那么在查看 Logcat 时,您应该看到 W/Ads 行:加载广告失败:3.

您应该做的是将 Android phone 插入您的计算机,然后在 Android Studio 中单击 Logcat,然后在左上角应该看到一些来自 select 的设备。 Select 您的 phone 如果已列出(应该是)。 logcat 现在将打印您的 phone 正在打印的所有内容。在过滤栏中,输入广告以过滤掉您不需要看到的内容。

然后在 phone 中打开您的应用程序,并检查 logcat。确保您的设备不被视为测试设备。如果您看到 W/Ads: Failed to load ad: 3 那么这应该意味着问题出在 AdMob 而不是您。

如果它不说那个而说别的,那我显然不知道。

我犯了最愚蠢的错误。将应用程序 ID 从一个应用程序传递到 MobileAds.initialize,并从另一个 admob 应用程序在 loadAd 中使用展示位置 ID。

在我更正展示位置 ID 后,一切都开始工作了。

我还没有发布带有广告的应用版本。

我看到 错误代码 3:ERROR_CODE_NO_FILL 在我从带有调试版本的模拟器切换到带有发布版本的真实设备(通过 adb shell 命令)。

我等了 12 个多小时,我可以在 AdMob 门户上看到广告请求,但没有匹配项(匹配率为 0%)。我转到 Play Console > Store Presence > Pricing & distribution 并将 Contains ads 的单选按钮切换为 Yes, it has ads。我什至尝试将我的应用程序包(不发布)上传到 Play 控制台。这些都不起作用。

各种 AdMob 帮助文章(包括下面链接的文章)都提到,如果您看到的是测试广告(标有 "Test Ad" 的广告),那么您的代码可以正常工作,真正的广告应该会按预期工作(一旦他们建立了库存)。

考虑到这一点,我继续 将我的应用程序发布到 Play 商店,更新上线后,我通过 Play 商店应用程序将其下载到我的真实 phone 并且广告加载没有问题,我的 AdMob 匹配率现在为 66%。从 AdMob 常见问题解答文章中可以看出,广告开始展示通常需要几个小时,最多可能需要 24 小时。

来源:https://support.google.com/admob/answer/2993019?hl=en

对我来说,原因是一台设备,小米 Mi 9 不再工作并且不显示广告,所以我拿出我的平板电脑,我没有看到任何错误,它在发布时显示广告。

可能是您从 adMob 控制台创建广告的原因之一是单击“是”您的应用程序已经在 Playstore 中,并在这种情况下提供 url 的直播 app.Now您将无法 运行 您的广告在任何其他具有差异包 ID 的项目中,然后是实时项目(甚至不测试广告)。您必须在包含相同包 ID 的实时项目中实施广告,在其他情况下将获取广告无法加载广告:3.

谢谢! 编码愉快!

Your ad units are not displaying ads because you haven't yet verified your address (PIN).

也许对其他人有帮助,我在我的 AdSense 帐户上收到了这条通知。

这对我有用


设置->Google->广告->重置广告ID->确定

但在某些情况下,广告会在上传到 Play 商店后自动出现。

W/Ads: Failed to load ad: 3

表示:广告请求成功,但由于广告资源不足,没有返回任何广告。

因此,就我而言,我评论了 keywords: 属性 以加载所有类型的广告。现在我的广告正在正确加载。

static final MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo(
        testDevices: testDevice != null ? <String>[testDevice] : null,
        nonPersonalizedAds: true,
        //keywords: <String>['Fitness', 'Yoga', 'Health', 'Exercise', 'Game', 'Doctor', 'Medical'],);

我在 Flutter 中遇到了这个错误。检查调试控制台并找到此命令

Use.RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("")

并将设备 ID 从列表复制到 MobileAdTargetingInfo testDevices,它将起作用!!!

  1. 检查并确保您没有将两个帐户链接到 adsense,因为我在我的案例中错误地这样做了。

  2. 如果您只是在创建 admob 帐户,请等待 24 小时后再试

这个错误可能是因为太多的原因。 首先尝试使用 testAds ca-app-pub id 以避免 admob 帐户问题。

检查您是否在 mainActivity 中扩展了 AppCompatActivity,在我的例子中就是问题所在

再次检查所有这些步骤https://developers.google.com/admob/android/quick-start?hl=en-419#import_the_mobile_ads_sdk

我的问题出在付款方面。我刷新了我的支付方式,它帮了我。

就我而言:
I/Ads: Ad failed to load : Account not approved yet.

但是你需要实现侦听器才能知道错误

首先导入监听器:import com.google.android.gms.ads.AdListener;
第二次创建变量:private final String TAG2 = com.ringtones.splash.class.getSimpleName();

            mAdView.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {Log.d(TAG2, "google banner ad loaded"); }
            @Override
            public void onAdFailedToLoad(LoadAdError adError) {Log.d(TAG2, "google banner ad failed to load : "+ adError.getMessage());}
            @Override
            public void onAdOpened() {Log.d(TAG2, "google banner ad opened");}
            @Override
            public void onAdClicked() {Log.d(TAG2, "google banner ad clicked");}
            @Override
            public void onAdLeftApplication() {Log.d(TAG2, "google banner ad left application");}
            @Override
            public void onAdClosed() {Log.d(TAG2, "google banner ad closed");}
        });

没问题。当您第一次设计您的应用程序时,您可以使用 AdMob 提供的测试代码。这些代码在您的模拟器和真实设备上运行良好。但是,一旦您在 Google Play 上发布您的应用程序,这些代码就会立即停止工作。您需要制作测试设备。 https://developers.google.com/admob/android/test-ads

但是您可以使用生活小窍门继续对已发布的应用程序使用测试代码。将 build.gradle(android) 文件中的应用程序 ID 更改为不同的名称,一切都会起作用。在将应用程序发布到市场之前,不要忘记 return 旧名称。

我遇到了设备问题。 我的广告在使用 UnitID 测试模拟器时没有问题,但在我的设备上测试时它无法使用消息 “无法加载广告:3”

我的解决方案是在 Google Play 控制台创建用户验证器

的内部测试环境中测试应用程序

然后我通过 Google Play 内部测试在同一台设备上下载了该应用,广告对我有效,并且在生产中也有效

对于未来面临问题的人。

此处提供的信息不排除其他人已经说过的内容,它们只是补充,需要考虑更多内容。

自 2022 年 1 月起,admob 中的应用设置流程发生了变化。已将通知发送到控制台,其中包含以下消息:

All new apps added to AdMob need to be reviewed and approved. Make sure your AdMob apps are linked to a supported app store to prevent ad serving be interrupted. Linking generates an automatic review of the apps.

1-

如您所知,在 admob 中有两种配置应用程序的方法:PublishedUnpublished.

如果app已经发布,SDK实现正确,不会出现运行时间错误,只要adsense policies and google platform

如果您尚未发布您的应用但想运行测试广告,则需要遵循最佳做法。

从用于测试 admob > settings > test-devices > create 的物理设备添加广告 ID/IDFA 可能是一个不错的选择。

这将允许您保留您的设备作为测试,即使在商店中发布之后也是如此。

2-

调试时不要在代码中使用 AdRequest.Builder.addTestDevice()。已经停产了。

出于调试目的,请改用 RequestConfiguration.Builder.setTestDeviceIds()。你会得到这样的东西:

public static final String TEST_J7 = "F1FDCA11111AF1111111FF11C1111111";
public static final String TEST_GRAN_PRIME = "F1FDCA11111AF1111111FF11C1111111";
public static final String TEST_XIAOMI = "F1FDCA11111AF1111111FF11C1111111";
public static final String TEST_EMULATOR = AdRequest.DEVICE_ID_EMULATOR;

// if you don't know the id, look it up in Logcat in a normal request
public void newConfiguration() {
  String[] tests = {TEST_EMULATOR, TEST_J7, TEST_GRAN_PRIME, TEST_XIAOMI};

  MobileAds.setRequestConfiguration(new RequestConfiguration.Builder()
     .setTestDeviceIds(Arrays.asList(tests)).build());
}

3-

始终使用测试广告以防止暂停投放:

public static final String TEST_UNIT_BANNER = "ca-app-pub-3940256099942544/6300978111";
public static final String TEST_UNIT_REWARD = "ca-app-pub-3940256099942544/5224354917";
public static final String TEST_UNIT_NATIVE = "ca-app-pub-3940256099942544/2247696110";
public static final String TEST_UNIT_INTERSTITIAL = "ca-app-pub-3940256099942544/1033173712";


public void loadAd(boolean is_test_device, String unit) {
  if (is_test_device) {
    newConfiguration();
  }
  AdRequest request = new AdRequest.Builder().build();

  AdView banner = new AdView(c);
  banner.setAdUnitId(is_test_device ? TEST_UNIT_BANNER : unit);
  banner.loadAd(request);
  //...
  InterstitialAd.load(c, is_test_device ? TEST_UNIT_INTERSTITIAL : unit, request, /*callback*/);
  //...
  RewardedInterstitialAd.load(c, is_test_device ? TEST_UNIT_REWARD : unit, request, /*callback*/);
  //...
}

根据文档:

Your app will receive limited ad serving until it is approved during the AdMob preparation process. In order for your app to be reviewed and approved by AdMob, you will need to list it on an AdMob-compatible store and link your app to the app store in your AdMob account.

广告暂停最多可以持续 30 天,如果违反 adsense 政策则永久暂停。

4-

设置您的测试设备后,通过在您的物理设备上转到设置 > Google > 广告 > 重置广告 ID 来重置您的广告 ID。

不要忘记在您的分发应用程序中使用您自己的 unit_id

在此处了解更多信息: About app readiness Set up a test device