android - 如何防止admob在后台工作
问题描述
我正在使用这个(admob_flutter) 包在我的 Flutter 应用上添加 Admob 广告,最近我收到了来自 google play 的通知,说我的应用已被删除,他们在我的电子邮件中发送了以下声明:
与您的应用相关的广告不得干扰其他应用、广告或设备操作,包括系统或设备按钮和端口。这包括叠加层、伴随功能和小部件广告单元。广告只能在为其提供服务的应用程序中展示。
在对那封不清楚的令人困惑的压力电子邮件进行了一些研究之后,我得到了这种情况,因为如果应用程序未处于活动状态或处于前台,甚至在通过后退按钮关闭应用程序后,插页式广告仍然可以继续工作,而不是终止。
所以我搜索了如何在颤振上收听这些事件,我确实找到了,didChangeAppLifecycleState
但我不知道如何在我的广告中实现它!
这是我的代码:(这里没有实现小部件树,因为我猜这并不重要)
AdmobInterstitial interstitialAd;
dynamic _state;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
interstitialAd = AdmobInterstitial(
adUnitId: 'xxxxxxxxxxxxxx',
listener: (AdmobAdEvent event, Map<String, dynamic> args) {
if (event == AdmobAdEvent.loaded) interstitialAd.show();
if (event == AdmobAdEvent.closed) interstitialAd.dispose();
if (event == AdmobAdEvent.failedToLoad) {
print("Error code: ${args['errorCode']}");
}
},
);
interstitialAd.load();
}
@override
void dispose() {
interstitialAd.dispose();
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
setState(() {
_state = state;
});
switch(state){
case AppLifecycleState.paused:
print('paused state');
break;
case AppLifecycleState.resumed:
print('resumed state');
break;
case AppLifecycleState.inactive:
print('inactive state');
break;
default:
break;
}
}
解决方案
使用以下代码段更新interstitialAd
初始化代码块:
interstitialAd = AdmobInterstitial(
adUnitId: 'xxxxxxxxxxxxxx',
listener: (AdmobAdEvent event, Map<String, dynamic> args) {
if (event == AdmobAdEvent.loaded) {
If (_state != AppLifecycleState.paused) {
interstitialAd.show();
}
}
if (event == AdmobAdEvent.closed) interstitialAd.dispose();
if (event == AdmobAdEvent.failedToLoad) {
print("Error code: ${args['errorCode']}");
}
},
);
推荐阅读
- java - 从 DecimalFormat.format() 获取大数的不正确结果
- javascript - 如何为每个不是其父节点唯一子节点的文本节点添加“跨度”标签?
- c - 清除按地址传递给函数的嵌套结构中的所有值
- android-studio - 如何在 Android Studio 上使用“平移屏幕”?
- ios - 如何使用 Firestore 执行组集合查询?(IOS)
- python - 使用 MySQL 在 Python 中进行字符编码和解码
- sql - 仅当分类变量具有最小计数时,如何查询它的聚合(Oracle SQL Developer)
- android - 使重叠视图可触摸以在 react-native 中触发 onPress
- c++ - 在编译时保存静态二叉树的简单方法
- java - 使用扫描仪在java中创建一个空心矩形并嵌套for循环