最少的可重复代码:
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"/>
即使使用测试广告 ID 和测试应用 ID,广告也没有加载。
最少的可重复代码:
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();
}
测试广告显示,但当我尝试使用我自己的广告 ID 和应用 ID(即使在发布模式下)时,它失败并出现此错误。
<块引用>无广告配置。
我在 Admob 上创建该广告单元已经一周了。我在 Play 商店中还有一个不同的应用(正在展示广告),但即使我在代码中使用了该应用的 ID,它也无法加载广告并显示错误代码 3。
PS: 已经尝试过 this solution,但没有奏效。
答案 0 :(得分: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();
答案 1 :(得分:0)
错误代码 3:ERROR_CODE_NO_FILL
广告请求成功,但由于缺少广告资源而没有返回任何广告。
为什么会这样:广告商可以根据业务相关性定位特定区域、平台和用户资料,这有时会导致特定区域或用户资料的广告可用性较低。 错误代码表明实施是正确的,并且由于在从应用发送广告请求的特定时刻缺少合适的广告,因此广告请求未被填充。 >
对某些应用或广告单元的政策相关限制也会导致响应广告请求返回错误代码 3。
如何解决?
→ 由于我们无法操纵广告客户的需求,因此没有针对此错误的特定“修复”。
→ 中介:在某些情况下,某些广告网络可能在某些地区或特定格式中的表现有限,在这种情况下,发布商可以尝试使用中介添加其他可能表现出色的广告网络嗯。
→ 检查 Pub ID、应用程序和广告单元 ID 的政策状态。此外,请检查品牌安全标志和 Coppa 状态。
→ 如果 Pub 可以获得广告单元 (Instructions) 的测试广告 - 那么他们的实施是正确的,当广告可用时,广告单元将正常投放广告,具体取决于根据广告客户的需求。
结论
尝试使用上述“说明”测试您的实现,以确保一切设置正确。但我个人的观点是,它没有设置错。
<块引用>错误代码表明实现是正确的
我想我的回答会帮助你排除一些假设。并希望引导您进行最终的“修复”。
答案 2 :(得分:0)
让我以通用的方式提供一些建议。既然你提到了
<块引用>TEST 广告在 Flutter 中运行良好
我觉得编码部分没有什么大问题。但我认为您在使用 Google Ads 时需要了解一些政策。
无效点击和展示以及无效流量
<块引用>无效流量包括任何可能 人为地夸大广告客户的成本或发布商的收入。 无效流量包括故意欺诈流量以及 意外点击。
因此,有时向您的应用投放的广告会受到限制,这可能是导致问题的原因。这只能通过与 Google 支持团队联系来解决。
此外,您还可以查看与您的 Google Ad 帐户相关联的电子邮件,了解与此相关的任何通知。通常,如果不遵守政策,Google 会发送如下电子邮件。
确保您遵守 in their site 提及的政策列表。
答案 3 :(得分:0)
以前遇到过类似的问题,有时没有符合您要求的尺寸的广告。尝试使用不同的广告尺寸来检查是否有广告。