Admob 真实广告未在 flutter 应用程序上显示,但 java 应用程序有效
Admob real ads not showing on flutter app but java app works
首先,我创建了 android 应用程序,使用 java 和展示完美的 admob 真实广告。然后我使用 flutter 创建了另一个 android 应用程序,我 运行 首先使用测试广告并且效果很好。但是后来我使用了相同的单元 ID 和应用程序 ID,但真正的广告没有在 Flutter 应用程序上显示。
main.dart:
import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:provider/provider.dart';
import 'ad_state.dart';
import 'home.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
final initFuture = MobileAds.instance.initialize();
final adState = AdState(initFuture);
runApp(
Provider.value(
value: adState,
builder: (context, child) => MyApp(),
),
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
home: HomePage(),
);
}
}
home.dart
import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:provider/provider.dart';
import 'ad_state.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
BannerAd banner;
@override
void initState() {
super.initState();
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
final adState = Provider.of<AdState>(context);
adState.initialization.then((status) {
setState(() {
banner = BannerAd(
size: AdSize.banner,
adUnitId: adState.bannerAdUnitId,
listener: adState.bannerAdListener,
request: AdRequest(),
)..load();
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Admob"),
),
body: Container(
child: ListView(
children: [
Text("Hello World"),
if (banner == null)
SizedBox(height: 50)
else
Container(
height: 50,
child: AdWidget(
ad: banner,
),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
print("Hello World");
},
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
ad_state.dart:
import 'package:google_mobile_ads/google_mobile_ads.dart';
class AdState {
Future<InitializationStatus> initialization;
AdState(this.initialization);
String get bannerAdUnitId => '<Banner_Unit_ID>';
BannerAdListener get bannerAdListener => _adListener;
BannerAdListener _adListener = BannerAdListener(
// Called when an ad is successfully received.
onAdLoaded: (Ad ad) => print('Ad loaded.'),
// Called when an ad request failed.
onAdFailedToLoad: (Ad ad, LoadAdError error) {
// Dispose the ad here to free resources.
ad.dispose();
print('Ad failed to load: $error');
},
// Called when an ad opens an overlay that covers the screen.
onAdOpened: (Ad ad) => print('Ad opened.'),
// Called when an ad removes an overlay that covers the screen.
onAdClosed: (Ad ad) => print('Ad closed.'),
// Called when an impression occurs on the ad.
onAdImpression: (Ad ad) => print('Ad impression.'),
);
}
显示以下错误:
广告加载失败:LoadAdError(code: 3, domain: com.google.android.gms.ads, message: No ad config., responseInfo: ResponseInfo(responseId: null, mediationAdapterClassName: , adapterResponses: []))
我已将应用程序上传到 Play 商店。上传到 Play 商店后,广告成功展示。
首先,我创建了 android 应用程序,使用 java 和展示完美的 admob 真实广告。然后我使用 flutter 创建了另一个 android 应用程序,我 运行 首先使用测试广告并且效果很好。但是后来我使用了相同的单元 ID 和应用程序 ID,但真正的广告没有在 Flutter 应用程序上显示。
main.dart:
import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:provider/provider.dart';
import 'ad_state.dart';
import 'home.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
final initFuture = MobileAds.instance.initialize();
final adState = AdState(initFuture);
runApp(
Provider.value(
value: adState,
builder: (context, child) => MyApp(),
),
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
home: HomePage(),
);
}
}
home.dart
import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:provider/provider.dart';
import 'ad_state.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
BannerAd banner;
@override
void initState() {
super.initState();
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
final adState = Provider.of<AdState>(context);
adState.initialization.then((status) {
setState(() {
banner = BannerAd(
size: AdSize.banner,
adUnitId: adState.bannerAdUnitId,
listener: adState.bannerAdListener,
request: AdRequest(),
)..load();
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Admob"),
),
body: Container(
child: ListView(
children: [
Text("Hello World"),
if (banner == null)
SizedBox(height: 50)
else
Container(
height: 50,
child: AdWidget(
ad: banner,
),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
print("Hello World");
},
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
ad_state.dart:
import 'package:google_mobile_ads/google_mobile_ads.dart';
class AdState {
Future<InitializationStatus> initialization;
AdState(this.initialization);
String get bannerAdUnitId => '<Banner_Unit_ID>';
BannerAdListener get bannerAdListener => _adListener;
BannerAdListener _adListener = BannerAdListener(
// Called when an ad is successfully received.
onAdLoaded: (Ad ad) => print('Ad loaded.'),
// Called when an ad request failed.
onAdFailedToLoad: (Ad ad, LoadAdError error) {
// Dispose the ad here to free resources.
ad.dispose();
print('Ad failed to load: $error');
},
// Called when an ad opens an overlay that covers the screen.
onAdOpened: (Ad ad) => print('Ad opened.'),
// Called when an ad removes an overlay that covers the screen.
onAdClosed: (Ad ad) => print('Ad closed.'),
// Called when an impression occurs on the ad.
onAdImpression: (Ad ad) => print('Ad impression.'),
);
}
显示以下错误: 广告加载失败:LoadAdError(code: 3, domain: com.google.android.gms.ads, message: No ad config., responseInfo: ResponseInfo(responseId: null, mediationAdapterClassName: , adapterResponses: []))
我已将应用程序上传到 Play 商店。上传到 Play 商店后,广告成功展示。