首页 > 解决方案 > 在 Flutter 应用中实现 Admob

问题描述

我正在尝试在我的颤振应用程序中实现 admob,但我看不到广告。我在 logcat 中没有收到任何有用的错误消息或其他有用的错误消息。我究竟做错了什么?

这是日志猫:

2021-08-25 15:45:43.017 27522-27522/com.sks.calendar I/Ads:此请求是从测试设备发送的。2021-08-25 15:45:43.037 27522-27907/com.sks.calendar W/Ads:不重试获取应用程序设置 2021-08-25 15:45:44.578 27522-27522/com.sks.calendar I/广告:此请求是从测试设备发送的。2021-08-25 15:45:46.526 27522-27563/com.sks.calendar I/flutter:带有 id 的广告175不适用于 onAdImpression。2021-08-25 15:47:20.792 27522-27522/com.sks.calendar W/Ads: #004 webview 被破坏。无视动作。2021-08-25 15:47:20.794 27522-27522/com.sks.calendar W/Ads: #004 webview 被破坏。无视动作。2021-08-25 15:47:21.869 27522-27522/com.sks.calendar I/Ads:此请求是从测试设备发送的。2021-08-25 15:47:23.179 27522-27522/com.sks.calendar I/Ads:此请求是从测试设备发送的。2021-08-25 15:47:23.216 27522-27949/com.sks.calendar W/Ads:不重试获取应用程序设置 2021-08-25 15:48:50.006 27522-27522/com.sks.calendar W/广告:#004 webview 被破坏。无视动作。2021-08-25 15:48:50.013 27522-27522/com.sks.calendar W/Ads: #004 webview 被破坏。无视动作。2021-08-25 15:48:51.025 27522-27522/com.sks.calendar I/广告:该请求是从测试设备发送的。2021-08-25 15:48:52.414 27522-27522/com.sks.calendar I/Ads:此请求是从测试设备发送的。2021-08-25 15:48:52.438 27522-27948/com.sks.calendar W/Ads:不重试获取应用程序设置 2021-08-25 15:50:25.587 27522-27522/com.sks.calendar I/广告:此请求是从测试设备发送的。2021-08-25 15:50:38.968 27522-27522/com.sks.calendar I/Ads:此请求是从测试设备发送的。2021-08-25 15:51:55.126 27522-27522/com.sks.calendar I/Ads:此请求是从测试设备发送的。50:38.968 27522-27522/com.sks.calendar I/Ads:此请求是从测试设备发送的。2021-08-25 15:51:55.126 27522-27522/com.sks.calendar I/Ads:此请求是从测试设备发送的。50:38.968 27522-27522/com.sks.calendar I/Ads:此请求是从测试设备发送的。2021-08-25 15:51:55.126 27522-27522/com.sks.calendar I/Ads:此请求是从测试设备发送的。

这是我的代码:

import 'package:calendar/ad_helper.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  MobileAds.instance.initialize();
  runApp(MyApp());
}
class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}


class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {



  int _currentImageIndex = 50000;
  List<MemoryImage> images = [];
  int numOfImages = 500000;
  bool loaded = false;


  @override
  void initState() {
    // TODO: implement initState
    super.initState();


      initImages();
  }

  void initImages() async {
    ByteData image0 = await rootBundle.load('lib/jan_21.gif');
    ByteData image1 = await rootBundle.load('lib/feb_21.gif');
    ByteData image2 = await rootBundle.load('lib/mar_21.gif');
    ByteData image3 = await rootBundle.load('lib/april_21.gif');
    ByteData image4 = await rootBundle.load('lib/maj_21.gif');
    ByteData image5 = await rootBundle.load('lib/jun_21.gif');
    ByteData image6 = await rootBundle.load('lib/jul_21.gif');
    ByteData image7 = await rootBundle.load('lib/avg_21.gif');
    ByteData image8 = await rootBundle.load('lib/sep_21.gif');
    ByteData image9 = await rootBundle.load('lib/okt_21.gif');
    ByteData image10 = await rootBundle.load('lib/nov_21.gif');
    ByteData image11 = await rootBundle.load('lib/dec_21.gif');
    ByteData image12 = await rootBundle.load('lib/jan_22.gif');

    for (int i = 0; i < numOfImages; i++) {
      int index = i % 13;
      switch (index) {
        case 0:
          images.add(MemoryImage(image0.buffer.asUint8List()));
          break;
        case 1:
          images.add(MemoryImage(image1.buffer.asUint8List()));
          break;
        case 2:
          images.add(MemoryImage(image2.buffer.asUint8List()));
          break;
        case 3:
          images.add(MemoryImage(image3.buffer.asUint8List()));
          break;
        case 4:
          images.add(MemoryImage(image4.buffer.asUint8List()));
          break;
        case 5:
          images.add(MemoryImage(image5.buffer.asUint8List()));
          break;
        case 6:
          images.add(MemoryImage(image6.buffer.asUint8List()));
          break;
        case 7:
          images.add(MemoryImage(image7.buffer.asUint8List()));
          break;
        case 8:
          images.add(MemoryImage(image8.buffer.asUint8List()));
          break;
        case 9:
          images.add(MemoryImage(image9.buffer.asUint8List()));
          break;
        case 10:
          images.add(MemoryImage(image10.buffer.asUint8List()));
          break;
        case 11:
          images.add(MemoryImage(image11.buffer.asUint8List()));
          break;
        case 12:
          images.add(MemoryImage(image12.buffer.asUint8List()));
          break;
      }
    }
    // COMPLETE: Add _bannerAd
    BannerAd _bannerAd;

    // COMPLETE: Add _isBannerAdReady
    bool _isBannerAdReady = false;

    // COMPLETE: Add _interstitialAd
    InterstitialAd _interstitialAd;

    // COMPLETE: Add _isInterstitialAdReady
    bool _isInterstitialAdReady = false;

    // COMPLETE: Add _rewardedAd
    RewardedAd _rewardedAd;

    // COMPLETE: Add _isRewardedAdReady
    bool _isRewardedAdReady = false;


    // COMPLETE: Initialize _bannerAd
    _bannerAd = BannerAd(
      adUnitId: AdHelper.bannerAdUnitId,
      request: AdRequest(),
      size: AdSize.banner,
      listener: BannerAdListener(
        onAdLoaded: (_) {
          setState(() {
            _isBannerAdReady = true;
          });
        },
        onAdFailedToLoad: (ad, err) {
          print('Failed to load a banner ad: ${err.message}');
          _isBannerAdReady = false;
          ad.dispose();
          // COMPLETE: Display a banner when ready
          if (_isBannerAdReady)
            Align(
                alignment: Alignment.bottomCenter,
                child: Container(
                  width: _bannerAd.size.width.toDouble(),
                  height: _bannerAd.size.height.toDouble(),
                  child: AdWidget(ad: _bannerAd),
                )
            );
        },
    )
    );

    _bannerAd.load();

    @override
    void dispose() {
      // COMPLETE: Dispose a BannerAd object
      _bannerAd.dispose();

      // COMPLETE: Dispose an InterstitialAd object
      _interstitialAd?.dispose();

      // COMPLETE: Dispose a RewardedAd object
      _rewardedAd?.dispose();


      super.dispose();
    }

    setState(() {
      loaded = true;
    });
  }




  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: loaded
            ? SizedBox.expand(
          child: Image(
            image: images[_currentImageIndex],
            fit: BoxFit.fitWidth,
          ),
        )
            : Container(),
        floatingActionButton: Column(
            mainAxisAlignment: MainAxisAlignment.end,
            children: [
              FloatingActionButton(
                  backgroundColor: Colors.green,
                  heroTag: "btn",
                  onPressed: () {
                    setState(() {
                      _currentImageIndex = _currentImageIndex + 1 == numOfImages ? 0 : _currentImageIndex + 1;
                    });
                  },
                  child: Icon(Icons.arrow_forward, color: Colors.black)
              ),
              FloatingActionButton(
                  backgroundColor: Colors.red,
                  heroTag: "null",
                  onPressed: () {
                    setState(() {
                      _currentImageIndex = _currentImageIndex + 0 == numOfImages ? 0 : _currentImageIndex - 1 ;
                    });
                  },
                  child: Icon(Icons.arrow_back, color: Colors.black,)
              )
            ]
        )
    );
  }
}


```

标签: androidflutteradmob

解决方案


推荐阅读