web-dev-qa-db-ja.com

Admobバナー、自宅でのみ表示する方法

スマートバナーをフッターに表示して破棄します。私の問題は、アプリのすべてのページに表示されていることです。

私の質問は:1ページだけに表示するにはどうすればよいですか?

@override
 void initState() {
   super.initState();
   myBanner
   ..load().then((loaded) {
     if (loaded && this.mounted) {
       myBanner..show();
     }
   });

 }
12
Alvin Konda

Githubリンクから実用的なソリューションを見つけました ここ 。アイデアは非常に単純です。

  1. まず、Adsヘルパークラスが必要です。リンクをたどるか、以下を参照してください。
  2. 広告を表示するページで、initState()内のshowBannerAdを呼び出します。
  3. ページをプッシュした後、次のスニペットのようにshowBannerAdを呼び出します。プッシュされたページから戻った後、これにより広告が再び表示されます。
_Navigator.Push(context, MaterialPageRoute(builder: (context) => EditPage())).then((value) {
                      Ads.showBannerAd();
                    });
_
  1. 広告を表示したくないプッシュされたページで、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;
  }
}

_
3
aknay

個別の画面として機能する複数のウィジェットがある場合は、パーツを含めるだけです

@override void initState() { 
    super.initState(); 
    myBanner ..load().then((loaded) { 
        if (loaded && this.mounted) { 
            myBanner..show(); 
        } 
    }); 
}

あなたはおそらくそれを処分する必要があります:

@override
  void dispose() {
    myBanner?.dispose();
    super.dispose();
}
1
Bostrot

アプリに広告を追加しているときに同じ問題が発生しました。私の場合、メソッドを呼び出してdidChangeDependencies関数にバナー広告を表示していました。このメソッドはアプリで複数回呼び出すことができ、(私のアプリでは)新しいルートをNavigatorにプッシュすると呼び出されることがわかりました。そのため、に移動するとバナーを表示するための呼び出しが行われます。私のアプリの他の画面。たぶんあなたは同様の実装を持っています。

0
Xelgar