【问题标题】:How to prevent admob from working on background如何防止admob在后台工作
【发布时间】:2020-06-20 19:10:11
【问题描述】:

我正在使用this(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; 
  }
}

【问题讨论】:

    标签: android flutter dart google-play


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多