You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter RewardedAds开发出现Strict Secure Cookie政策错误如何解决?

Flutter RewardedAds 报错解决方案

首先你遇到的两类报错原因和对应修复方案如下:

该报错是Android 11(API 30及以上)系统对非HTTPS请求的安全限制导致,Google Ads旧版本SDK内部请求用到了HTTP域名触发了Cookie规则,修复步骤如下:

  • 第一步:修改Android清单文件配置
    打开android/app/src/main/AndroidManifest.xml,在<application>标签中添加允许明文流量的属性:
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="admobdemo"
        <!-- 新增下面这行配置 -->
        android:usesCleartextTraffic="true"
        android:icon="@mipmap/ic_launcher">
    
  • 第二步:单独配置广告域名的安全规则(上一步不生效时补充)
    在android/app/src/main/res目录下新建xml文件夹,创建network_security_config.xml文件,内容如下:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">googleads.g.doubleclick.net</domain>
            <domain includeSubdomains="true">doubleclick.net</domain>
        </domain-config>
    </network-security-config>
    
    回到AndroidManifest.xml的<application>标签,额外添加属性关联配置文件:
    android:networkSecurityConfig="@xml/network_security_config"
    
  • 第三步:升级Google Ads SDK
    旧版本google_mobile_ads依赖本身存在Cookie适配问题,升级到最新版本即可修复绝大多数场景的该报错,修改pubspec.yaml依赖:
    dependencies:
      google_mobile_ads: ^2.3.0 # 替换为pub.dev上的最新稳定版即可
    

报错2:Ad failed to load : 3

该错误是Admob官方定义的「无广告填充」错误,你当前用的是官方测试ID,出现该问题大多是测试环境配置问题,修复步骤如下:

  • 检查当前网络环境可以正常访问Google服务,国内网络需要特殊网络配置才能正常加载测试广告
  • 确认你的测试设备已经添加到Admob后台的测试设备列表,使用测试ID时可以打开手机开发者选项,开启「允许模拟位置」权限
  • 调整广告加载逻辑,添加失败重试机制,修改admob_controller.dart的createRewardAd方法:
    void createRewardAd({int retryCount = 0}) {
      RewardedAd.load(
          adUnitId: AdHelper.rewardedAdUnitId,
          request: AdRequest(),
          rewardedAdLoadCallback: RewardedAdLoadCallback(
            onAdLoaded: (RewardedAd ad) {
              print('$ad loaded.');
              this._rewardedAd = ad;
            },
            onAdFailedToLoad: (LoadAdError error) {
              print('RewardedAd failed to load: $error');
              // 加载失败最多重试3次,每次间隔2秒
              if(retryCount < 3) {
                Future.delayed(const Duration(seconds: 2), () {
                  createRewardAd(retryCount: retryCount + 1);
                });
              }
            },
          ));
    }
    
  • 修复广告展示逻辑的时序问题:你当前的代码是先调用show再设置回调,会导致回调不触发,修改showRewardAd方法如下:
    void showRewardAd() {
      // 先判断广告是否加载完成,避免空指针崩溃
      if(_rewardedAd == null) {
        print("广告未加载完成,请先点击加载按钮");
        return;
      }
      // 先设置回调再调用show方法
      _rewardedAd.fullScreenContentCallback = FullScreenContentCallback(
        onAdShowedFullScreenContent: (RewardedAd ad) =>
            print('$ad onAdShowedFullScreenContent.'),
        onAdDismissedFullScreenContent: (RewardedAd ad) {
          print('$ad onAdDismissedFullScreenContent.');
          ad.dispose();
          // 广告关闭后预加载下一条广告
          createRewardAd();
        },
        onAdFailedToShowFullScreenContent: (RewardedAd ad, AdError error) {
          print('$ad onAdFailedToShowFullScreenContent: $error');
          ad.dispose();
        },
        onAdImpression: (RewardedAd ad) => print('$ad impression occurred.'),
      );
    
      _rewardedAd.show(
          onUserEarnedReward: (RewardedAd ad, RewardItem rewardItem) {
        print("广告奖励为 ${rewardItem.amount}");
      });
    }
    

内容的提问来源于stack exchange,提问作者Rajesh Shiyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:45:03