首页 > 解决方案 > 实施 AdMob 时,如何在测试和生产 AdMob 设置之间切换?

问题描述

我正在尝试添加 AdMob 横幅,我一直在关注这里的 codelab:https ://codelabs.developers.google.com/codelabs/admob-ads-in-flutter#4

我创建了一个带有生产值的 ad_helper.dart,以及一个带有测试横幅的 ad_helper_test.dart。我目前正在我的代码中导入测试,一切似乎都正常,我可以在应用程序中看到测试广告。

到目前为止,我一直在模拟器上进行测试。

但是,我想知道如何切换到生产值。

即使在测试时我也考虑使用生产值,但谷歌说我必须将我的设备标记为测试设备,我不完全确定如何做到这一点。

或者,如果有一种方法可以为生产构建提供不同的配置,我会考虑使用它,因为关于如何将设备标记为测试设备的说明对我来说不是很清楚。

谢谢。

标签: flutteradmob

解决方案


我创建了一个助手类。使用它,您可以处理多个横幅、插页式、奖励广告。你可以试试这个:

  1. 首先创建枚举并添加您的 Admob 单元 ID 和广告 ID。
  2. 只需在 switch case 两个块(调试和发布)中添加带有 id 的枚举。

因此对于调试模式,您需要管理一次广告 ID。只需将您的 ids 添加到相关的 ids 案例中即可。对于发布模式 switch case 块添加所有 ids platform-wise。

// define globally
enum Ads {
  addUnitId,

  //If Only single ids in app
  bannerAdUnitId,
  interstitialAdUnitId,
  rewardedAdUnitId,

  //If more than one ids in app
  bannerAdHomeScreenId,
  bannerAdSettingScreenId,
  interstitialHomeAdUnitId,
  interstitialSettingAdUnitId,
}

class AdHelper {
  static String getAdmobAdId({required Ads adsName}) {
    // check platform
    final isPlatformAndroid = Platform.isAndroid;

    // Testing IDs added from admob websites platform-wise. 
    final testAppUnitId =
        isPlatformAndroid ? "ca-app-pub-3940256099942544~3347511713" : "ca-app-pub-3940256099942544~1458002511";
    final testBannerAdId =
        isPlatformAndroid ? "ca-app-pub-3940256099942544/6300978111" : "ca-app-pub-3940256099942544/2934735716";
    final testInterstitialAdId =
        isPlatformAndroid ? "ca-app-pub-3940256099942544/1033173712" : "ca-app-pub-3940256099942544/4411468910";
    final testRewardAdId =
        isPlatformAndroid ? "ca-app-pub-3940256099942544/5224354917" : "ca-app-pub-3940256099942544/1712485313";

    if (kDebugMode) {
      // If in debug mode
      switch (adsName) {
        case Ads.addUnitId:
          return testAppUnitId;

        // for all banner ads in app in Debug mode
        case Ads.bannerAdUnitId:
        case Ads.bannerAdHomeScreenId:
        case Ads.bannerAdSettingScreenId:
          return testBannerAdId;

        // for all interstitial ads in app in Debug mode
        case Ads.interstitialAdUnitId:
        case Ads.interstitialHomeAdUnitId:
        case Ads.interstitialSettingAdUnitId:
          return testInterstitialAdId;

        // for all reward ads in app in Debug mode
        case Ads.rewardedAdUnitId:
          return testRewardAdId;

        default:
          return "null";
      }
    } else {
      switch (adsName) {
        // Release mode real Ads id declare here based on enum Ads
        case Ads.addUnitId:
          return isPlatformAndroid ? "android_unit_id" : "iOS_unit_id";

        case Ads.bannerAdUnitId:
          return isPlatformAndroid ? "android_banner_id" : "iOS_banner_id";

        case Ads.interstitialAdUnitId:
          return isPlatformAndroid ? "android_interstitial_id" : "iOS_interstitial_id";

        case Ads.rewardedAdUnitId:
          return isPlatformAndroid ? "android_reward_id" : "iOS_reward_id";

        //IF Multiple Banner/Reward Just add one by based on Enum
        case Ads.bannerAdHomeScreenId:
          return isPlatformAndroid ? "android_banner_home_id" : "iOS_banner_home_id";

        case Ads.interstitialSettingAdUnitId:
          return isPlatformAndroid ? "android_interstitial_setting_id" : "iOS_interstitial_setting_id";

        default:
          return "null";
      }
    }
  }
}

如何使用:

final adIds = AdHelper.getAdmobAdId(adsName: Ads.interstitialSettingAdUnitId);

对于设置/添加测试设备,请查看此链接

此外,请使用 /check production ids 检查此链接,而开发/调试模式可能存在风险。

您还可以以编程方式添加测试设备检查此链接


推荐阅读