android - 在 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,)
)
]
)
);
}
}
```
解决方案
推荐阅读
- swift - 丢失所有 Pod 模块
- transactions - 如何使用 Dapper 跨多个方法调用使用事务?
- sql - 需要根据匹配的冲销对记录进行分组
- android - Firebase 数据未显示
- python - 在烧瓶和heroku中使用os.listdir出错
- bash - 每次在选择菜单中显示所有 4 个选项
- java - 赋值时奇怪的 Java 三元行为。Java 在幕后做了什么来实现这一点?
- eclipse-plugin - 尝试在插件中加载 JDBC 驱动程序 jar
- excel - 长时间运行的 VBA 宏被 svchost.exe 中断
- docker - 我正在使用 Azure Devops 构建和推送我的 Docker 映像。如何在使用 Docker 任务进行 buildAndPush 时传递参数?