繁体   English   中英

谷歌移动广告的实施减慢了 flutter 应用程序

[英]Google mobile Ads implementation slowed down flutter App

我一直在我的 flutter 应用程序上实施横幅广告,我成功地展示了横幅广告,但我的应用程序运行速度非常慢,以至于崩溃并关闭。 我一直在寻找解决这个问题的方法,但似乎找不到任何解决方案,尽管很多人都遇到了同样的问题。 如果你们能帮助我,我将不胜感激。

我的代码如下:

adhelper.dart

import 'dart:io';
import 'package:google_mobile_ads/google_mobile_ads.dart';

class AdHelper {

  Future<InitializationStatus> initialization;

  AdHelper(this.initialization);

  static String get bannerAdUnitId => Platform.isAndroid
  ? 'ca-app-pub-3940256099942544/6300978111' \\Test ads
  : 'ca-app-pub-3940256099942544/2934735716'; \\Test ads


}

主页.dart

class _MainPageState extends State<MainPage>...

  final Completer<BannerAd> bannerCompleter = Completer<BannerAd>();

...

  BannerAd banner;

...

@override
  void didChangeDependencies(){
    super.didChangeDependencies();
    final adHelper = Provider.of<AdHelper>(context);
    adHelper.initialization.then((status){
      setState(() {
        banner ??= BannerAd(
        adUnitId: AdHelper.bannerAdUnitId,
        size: AdSize.banner,
        request: AdRequest(),
          listener: AdListener(
            onAdLoaded: (Ad ad) {
              print('Ad loaded: $BannerAd.');
              bannerCompleter.complete(ad as BannerAd);
              },
            onAdFailedToLoad: (Ad ad, LoadAdError error) {
              print('Ad failed to load: $BannerAd, $error');
              bannerCompleter.completeError(null);
              },
            onAdOpened: (Ad ad) => print('Ad opened: $BannerAd.'),
            onAdClosed: (Ad ad) => print('Ad closed: $BannerAd.'),
            onApplicationExit: (Ad ad) => print('App Exit: $BannerAd.'),
              ),
            );
          Future<void>.delayed(Duration(seconds: 1), () => banner?.load());
      });
    });
  }

@override
  void dispose() {
    super.dispose();
    banner?.dispose();
    banner = null;
  }

@override
  Widget build(BuildContext context) {
    return FutureBuilder<BannerAd>(
      future: bannerCompleter.future,
      builder: (BuildContext context, AsyncSnapshot<BannerAd> snapshot) {
        Widget child;

        switch (snapshot.connectionState) {
          case ConnectionState.none:
          case ConnectionState.waiting:
          case ConnectionState.active:
            child = Container();
            break;
          case ConnectionState.done:
            if (snapshot.hasData) {
              child = AdWidget(ad: banner);
            } else {
              child = Text('Error loading $BannerAd');
            }
        }
...

                      if (banner == null)
                        SizedBox(height: 50,)
                      else
                        Container(
                        width: banner.size.width.toDouble(),
                        height: banner.size.height.toDouble(),
                          child: child,

和我的 main.dart

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final initFuture = MobileAds.instance.initialize();
  final adHelper = AdHelper(initFuture);

....

runApp(
      Provider.value(
          value: adHelper,
        builder: (context, child) => MyApp(),
      ),

此问题仅出现在使用 Android 10 或更低版本的设备上,我的设备上遇到了同样的问题(使用 android 10)。 我推荐使用这个插件,它为我和很多其他人解决了这个问题。

native_admob_flutter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM