即使使用测试广告单元,AdFailedToLoad 也会出现“无广告配置”错误

Posted

技术标签:

【中文标题】即使使用测试广告单元,AdFailedToLoad 也会出现“无广告配置”错误【英文标题】:"No ad config" error onAdFailedToLoad even with test ad unit 【发布时间】:2021-09-13 12:30:29 【问题描述】:

android(Java)方式:

最少的可重现代码:

public class MainActivity extends Activity 
    private static final String TAG = "MyTag";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MobileAds.initialize(this);
        AdRequest adRequest = new AdRequest.Builder().build();
        InterstitialAd.load(this, "ca-app-pub-3940256099942544/1033173712", adRequest,
                new InterstitialAdLoadCallback() 
                    @Override
                    public void onAdLoaded(@NonNull InterstitialAd interstitialAd) 
                        Log.i(TAG, "onAdLoaded");
                        interstitialAd.show(MainActivity.this);
                    

                    @Override
                    public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) 
                        Log.i(TAG, loadAdError.getMessage());
                    
                );
    

我的build.gradle(app)

implementation 'com.google.android.gms:play-services-ads:20.2.0'

我的AndroidManifest.xml

<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="ca-app-pub-3940256099942544~3347511713"/>

问题(在 Android 上):

即使使用测试广告 ID 和测试应用 ID,广告也不会加载。


Flutter(飞镖)方式:

最少的可重现代码:

void main() 
  WidgetsFlutterBinding.ensureInitialized();
  MobileAds.instance.initialize();
  runApp(MaterialApp(home: MyApp()));


class MyApp extends StatefulWidget 
  @override
  MyAppState createState() => MyAppState();


class MyAppState extends State<MyApp> 
  @override
  void initState() 
    super.initState();
    InterstitialAd.load(
      adUnitId: 'ca-app-pub-3940256099942544/1033173712',
      request: AdRequest(),
      adLoadCallback: InterstitialAdLoadCallback(
        onAdLoaded: (ad) => ad.show(),
        onAdFailedToLoad: (e) => print('Failed: $e'),
      ),
    );
  

  @override
  Widget build(BuildContext context) => Container();

问题(在 Flutter 上):

显示了测试广告,但是当我尝试使用自己的 Ad ID 和 App ID(即使在发布模式下)时,它会失败并出现此错误。

没有广告配置。

距离我在 Admob 上创建该广告单元已经一周了。我在 Play 商店中也有一个不同的应用程序(正在显示广告),但即使我在代码中使用该应用程序的 ID,它也无法加载错误代码为 3 的广告。

PS:已经尝试this solution,但没有成功。

Android 或 Flutter 解决方案都适合我

【问题讨论】:

在 Android 模拟器和真实设备上的行为是否相同? 我身边的 android Emulator 中显示的广告,由他提供的信息测试。 @lenz 你修好了吗?如果你是怎么做到的? 【参考方案1】:

我记得,在加载一个 Ad 对象后,您需要将其显示给用户,以便设备可以根据条件或事件等知道何时显示 Ad。

加载广告:

InterstitialAd.load(
  adUnitId: '<ad unit id>',
  request: AdRequest(),
  adLoadCallback: InterstitialAdLoadCallback(
    onAdLoaded: (InterstitialAd ad) 
      // Keep a reference to the ad so you can show it later.
      this._interstitialAd = ad;
    ,
    onAdFailedToLoad: (LoadAdError error) 
      print('InterstitialAd failed to load: $error');
    ,
  ));

监听广告状态的广告事件:


interstitialAd.fullScreenContentCallback = FullScreenContentCallback(
  onAdShowedFullScreenContent: (InterstitialAd ad) =>
     print('$ad onAdShowedFullScreenContent.'),
  onAdDismissedFullScreenContent: (InterstitialAd ad) 
    print('$ad onAdDismissedFullScreenContent.');
    ad.dispose();
  ,
  onAdFailedToShowFullScreenContent: (InterstitialAd ad, AdError error) 
    print('$ad onAdFailedToShowFullScreenContent: $error');
    ad.dispose();
  ,
  onAdImpression: (InterstitialAd ad) => print('$ad impression occurred.'),
);

展示广告:


myInterstitial.show();

正如我在您的代码中看到的,您的 UI 代码中没有显示插页式广告。如果我错了,请纠正我。

编辑:

如果您询问如何在代码中使用 myInterstitial.show();,您可以在 FlatButton、TextButton、GestureDetector 等以及 onTap 或 onPressed 函数中使用它,请使用 myInterstitial.show();

【讨论】:

感谢您的回答(不幸的是,那里没有任何用处)。如果您仔细阅读了我的代码,您会发现我已经在 onAdLoaded: (ad) =&gt; ad.show() 中展示了广告,并且我还在说明中提到了这一点。【参考方案2】:

让我以通用的方式提供一些建议。既然你提到了

测试广告在 Flutter 中运行良好

我觉得编码部分没有大问题。但我认为您在使用 Google Ads 时需要注意一些政策。

无效点击次数和展示次数以及无效流量

无效流量包括任何可能导致 人为地夸大广告商的成本或发布商的收入。 无效流量包括故意欺诈流量以及 意外点击。

因此,有时向您的应用投放的广告会受到限制,这可能是问题的原因。这只能通过联系 Google 支持团队来解决。

您还可以查看与您的 Google Ad 帐户相关联的电子邮件,了解与此相关的任何通知。通常,如果政策不遵守,Google 会发送如下所示的电子邮件。

对您的帐户设置的 Google Ads 投放限制

确保您遵守提到的政策列表in their site。

【讨论】:

【参考方案3】:

错误代码 3:ERROR_CODE_NO_FILL

广告请求成功,但由于缺少广告资源,没有返回任何广告。

为什么会这样:广告商可以根据业务相关性定位特定区域、平台和用户资料,这有时会导致特定地区或用户资料的广告可用性较低。 错误代码表明实施是正确的,并且由于在从应用发送广告请求的特定时刻没有合适的广告可用,因此未满足广告请求。 p>

对某些应用或广告单元的政策相关限制也会导致响应广告请求返回错误代码 3。


如何解决?

→ 由于我们无法操纵广告客户的需求,因此没有针对此错误的特定“修复”。

→ 中介:在某些情况下,某些广告网络可能在某些地区或特定格式的表现有限,在这种情况下,酒吧可以尝试使用中介来添加其他可能表现良好的广告网络好吧。

→ 检查 Pub ID、应用程序和广告单元 ID 的政策状态。此外,请检查品牌安全标志和 Coppa 状态。

→ 如果 Pub 可以获得广告单元的测试广告 (Instructions) - 那么他们的实施是正确的,并且广告单元将在广告可用时正常投放广告,具体取决于广告商需求。


结论

尝试使用上述“说明”测试您的实现,以确保一切设置正确。但我个人的看法是,它没有设置错误。

错误码提示实现是正确的

我认为我的回答将帮助您排除一些假设。并希望能引导您完成最终的“修复”。

【讨论】:

您好,感谢您的回答,我已经知道错误代码 3 的含义。但是,如果您再次仔细阅读我的帖子,我提到有一个广告单元正在展示广告(可在 Play 商店中找到),但在我的应用程序中使用它却没有。因此,错误绝对不是“缺乏广告资源”)。【参考方案4】:

之前遇到过类似的问题,有时您要求的尺寸没有广告。尝试使用不同的广告尺寸来检查是否有广告即将到来。

【讨论】:

以上是关于即使使用测试广告单元,AdFailedToLoad 也会出现“无广告配置”错误的主要内容,如果未能解决你的问题,请参考以下文章

使用测试广告单元 ID 时 MoPub 未找到任何广告

颤振,原生 Admob,广告无法加载:0

突然无法加载 AdMob 广告?

突然无法加载 AdMob 广告?

即使应用已准备就绪,Admob 仍会显示测试广告

Android 中的 AdMob Facebook 中介无法正常工作