flutter - 实施 AdMob 时,如何在测试和生产 AdMob 设置之间切换?
问题描述
我正在尝试添加 AdMob 横幅,我一直在关注这里的 codelab:https ://codelabs.developers.google.com/codelabs/admob-ads-in-flutter#4
我创建了一个带有生产值的 ad_helper.dart,以及一个带有测试横幅的 ad_helper_test.dart。我目前正在我的代码中导入测试,一切似乎都正常,我可以在应用程序中看到测试广告。
到目前为止,我一直在模拟器上进行测试。
但是,我想知道如何切换到生产值。
即使在测试时我也考虑使用生产值,但谷歌说我必须将我的设备标记为测试设备,我不完全确定如何做到这一点。
或者,如果有一种方法可以为生产构建提供不同的配置,我会考虑使用它,因为关于如何将设备标记为测试设备的说明对我来说不是很清楚。
谢谢。
解决方案
我创建了一个助手类。使用它,您可以处理多个横幅、插页式、奖励广告。你可以试试这个:
- 首先创建枚举并添加您的 Admob 单元 ID 和广告 ID。
- 只需在 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 检查此链接,而开发/调试模式可能存在风险。
您还可以以编程方式添加测试设备检查此链接
推荐阅读
- node.js - Mongoose runValidators 无法使用 positional$ 处理 findOneandUpdate
- java - Flink 1.4.1 向 Job Manager 发送作业时随机响应 HTTP 500
- javascript - firebase web sign up with google 只有在第二次点击后才有效?
- python - 当输入是来自另一列的值时,将一列中的所有值作为 json 获取
- python - 过滤掉包含特定字符串的数据帧的行
- docker - 为什么docker在运行hello-world时显示连接超时错误?
- javascript - 在 vue 3 上突出显示过滤器结果键
- visual-studio - 如何使用 ChartDirector 在 XY 图表中添加角度指示?
- pyspark - 使用 pyspark 中该列中存在的最后一个 ID 为该列生成 ID 代替 null
- powerbi - PowerBI按年累积折线图不起作用