首页 > 解决方案 > 如何防止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; 
  }
}

标签: androidflutterdartgoogle-play

解决方案


使用以下代码段更新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']}");
         }
    },
);

推荐阅读