スマートバナーをフッターに表示して破棄します。私の問題は、アプリのすべてのページに表示されていることです。
私の質問は:1ページだけに表示するにはどうすればよいですか?
@override
void initState() {
super.initState();
myBanner
..load().then((loaded) {
if (loaded && this.mounted) {
myBanner..show();
}
});
}
Githubリンクから実用的なソリューションを見つけました ここ 。アイデアは非常に単純です。
initState()
内のshowBannerAd
を呼び出します。showBannerAd
を呼び出します。プッシュされたページから戻った後、これにより広告が再び表示されます。_Navigator.Push(context, MaterialPageRoute(builder: (context) => EditPage())).then((value) {
Ads.showBannerAd();
});
_
initState()
内のhideBannderAd
を呼び出します。その後、完了です。マイアドヘルパークラス
_import 'package:firebase_admob/firebase_admob.Dart';
const String testDevice = 'YOUR_DEVICE_ID';
class Ads {
static BannerAd _bannerAd;
static void initialize() {
FirebaseAdMob.instance.initialize(appId: FirebaseAdMob.testAppId);
}
static const MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo(
testDevices: testDevice != null ? <String>[testDevice] : null,
keywords: <String>['foo', 'bar'],
contentUrl: 'http://foo.com/bar.html',
childDirected: true,
nonPersonalizedAds: true,
);
static BannerAd _createBannerAd() {
return BannerAd(
adUnitId: BannerAd.testAdUnitId,
size: AdSize.banner,
targetingInfo: targetingInfo,
listener: (MobileAdEvent event) {
print("BannerAd event $event");
},
);
}
static void showBannerAd() {
if (_bannerAd == null) _bannerAd = _createBannerAd();
_bannerAd
..load()
..show(anchorOffset: 0.0, anchorType: AnchorType.bottom);
}
static void hideBannerAd() async {
await _bannerAd.dispose();
_bannerAd = null;
}
}
_
個別の画面として機能する複数のウィジェットがある場合は、パーツを含めるだけです
@override void initState() {
super.initState();
myBanner ..load().then((loaded) {
if (loaded && this.mounted) {
myBanner..show();
}
});
}
あなたはおそらくそれを処分する必要があります:
@override
void dispose() {
myBanner?.dispose();
super.dispose();
}
アプリに広告を追加しているときに同じ問題が発生しました。私の場合、メソッドを呼び出してdidChangeDependencies
関数にバナー広告を表示していました。このメソッドはアプリで複数回呼び出すことができ、(私のアプリでは)新しいルートをNavigator
にプッシュすると呼び出されることがわかりました。そのため、に移動するとバナーを表示するための呼び出しが行われます。私のアプリの他の画面。たぶんあなたは同様の実装を持っています。