Как запретить admob работать в фоне - PullRequest
0 голосов
/ 20 июня 2020

Я использую этот (admob_flutter) пакет, чтобы добавить рекламу Admob в мое приложение flutter, недавно я получил уведомление от 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; 
  }
}

1 Ответ

0 голосов
/ 31 июля 2020

Обновите блок кода инициализации 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']}");
         }
    },
);
...