Как дать пользователю вознаграждение только в том случае, если пользователь посмотрел полную видеорекламу?

#android #flutter #dart #admob #googlemobileads

Вопрос:

Я разрабатываю функцию рекламы вознаграждений в своем приложении. Я использую google_mobile_ads: ^0.13.5 пакет для показа рекламы. Моя награда показывается пользователю, даже если пользователь пропустит видеорекламу. Я хочу запретить пользователю получать вознаграждение, если он пропустит объявление.

Это мой фрагмент кода :

 class AdsBloc extends ChangeNotifier{

  int _rewardedPoint = 0 ;
  int _preReward = -1;

  int getrewardpoint() => _rewardedPoint;
  int getpreRewardpoint() => _preReward;

  RewardedAd _rewardedAd;
  int _numRewardedLoadAttempts = 0;

  static initialization(){
    if(MobileAds.instance == null)
    {
      MobileAds.instance.initialize();
    }
  }

  void createRewardedAd() {
    RewardedAd.load(
        adUnitId: Config().admobRewardAdId,
        request: AdRequest(),
        rewardedAdLoadCallback: RewardedAdLoadCallback(
          onAdLoaded: (RewardedAd ad) {
            print('$ad loaded.');
            _rewardedAd = ad;
            _numRewardedLoadAttempts = 0;
          },
          onAdFailedToLoad: (LoadAdError error) {
            print('RewardedAd failed to load: $error');
            _rewardedAd = null;
            _numRewardedLoadAttempts  = 1;
            if (_numRewardedLoadAttempts <= 2) {
              createRewardedAd();
            }
          },
        ));
  }

  void showRewardedAd(Future<dynamic> onEnd) {
    if (_rewardedAd == null) {
      print('Warning: attempt to show rewarded before loaded.');
      return;
    }
    _rewardedAd.fullScreenContentCallback = FullScreenContentCallback(
      onAdShowedFullScreenContent: (RewardedAd ad) =>
          print('ad onAdShowedFullScreenContent.'),
      onAdDismissedFullScreenContent: (RewardedAd ad) {
        print('$ad onAdDismissedFullScreenContent.User dismissed');
        ad.dispose();
        createRewardedAd();
      },
      onAdWillDismissFullScreenContent: (ad) {
        print("pleasee dont");
      },
      onAdFailedToShowFullScreenContent: (RewardedAd ad, AdError error) {
        print('$ad onAdFailedToShowFullScreenContent: $error');
        ad.dispose();
        createRewardedAd();
      },
      onAdImpression: (RewardedAd ad) => print('$ad impression occurred.'),
    );
    _rewardedAd.setImmersiveMode(true);
    _rewardedAd.show(onUserEarnedReward: (RewardedAd ad, RewardItem reward) {
      _preReward = _rewardedPoint;
      _rewardedPoint  = reward.amount;
      if(_preReward < _rewardedPoint){
        print("ad watched give them rewaard");
        // reward funcction
      }else{
        print("Please watch ad");
      }


      print('$ad with reward $RewardItem(${reward.amount}, ${reward.type}');
    });
    _rewardedAd = null;
  }

}

 

Выше приведен мой код. Я точно не знаю, где я допустил ошибку. Я хочу определить, смотрит ли пользователь рекламу или нет. Я хочу вознаградить их только в том случае, если они посмотрели рекламу. Как это сделать. Я в замешательстве.

Комментарии:

1. Какой пакет видеоплеера вы используете для воспроизведения видео ?

2. Я не использовал никакой пакет видеоплеера. Это видеореклама.