Межстраничные объявления с вознаграждением

Межстраничное объявление с вознаграждением – это формат рекламы с поощрением, которая показывается при переходах внутри приложения и позволяет начислять пользователям бонусы за взаимодействие с ней. В отличие от обычных объявлений с вознаграждением для показа межстраничных объявлений с вознаграждением не требуется согласие пользователя. В этом руководстве рассказывается, как интегрировать межстраничные объявления с вознаграждением из AdMob в приложение Flutter.

Требования

Прежде чем продолжить, выполните следующие действия:

  • Установите плагин Flutter 1.1.0 или более поздней версии.
  • Настройте Google Mobile Ads Flutter Plugin. В приложении Flutter должен быть импортирован пакет Google Mobile Ads Flutter Plugin.

Всегда тестируйте с помощью тестовых объявлений

При создании и тестировании приложений используйте тестовые объявления, а не реальные. В противном случае ваш аккаунт может быть заблокирован.

Самый простой способ загрузить тестовые объявления – использовать специальный идентификатор рекламного блока для межстраничных объявлений с вознаграждением:

Android

ca-app-pub-3940256099942544/5354046379

iOS

ca-app-pub-3940256099942544/6978759866

Тестовые рекламные блоки настроены так, чтобы возвращать тестовые объявления для каждого запроса. Вы можете использовать их в своих приложениях при написании кода, тестировании и отладке. Только не забудьте заменить их на собственные идентификаторы рекламных блоков перед публикацией приложения.

Как загрузить объявление

В следующем примере показано, как загрузить межстраничное объявление с вознаграждением:

RewardedInterstitialAd.load(
  adUnitId: "_adUnitId",
  request: const AdRequest(),
  rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback(
    onAdLoaded: (RewardedInterstitialAd ad) {
      // Called when an ad is successfully received.
      debugPrint('Ad was loaded.');
      // Keep a reference to the ad so you can show it later.
      _rewardedInterstitialAd = ad;
    },
    onAdFailedToLoad: (LoadAdError error) {
      // Called when an ad request failed.
      debugPrint('Ad failed to load with error: $error');
    },
  ),
);

Вместо _adUnitId укажите идентификатор своего рекламного блока.

События межстраничных объявлений с вознаграждением

С помощью FullScreenContentCallback можно отслеживать события жизненного цикла, например показ или закрытие объявления. Чтобы получать уведомления об этих событиях, задайте значение RewardedInterstitialAd.fullScreenContentCallback до показа объявления. В этом примере реализованы все методы и в консоль выводится сообщение:

ad.fullScreenContentCallback = FullScreenContentCallback(
  onAdShowedFullScreenContent: (ad) {
    // Called when the ad showed the full screen content.
    debugPrint('Ad showed full screen content.');
  },
  onAdFailedToShowFullScreenContent: (ad, err) {
    // Called when the ad failed to show full screen content.
    debugPrint('Ad failed to show full screen content with error: $err');
    // Dispose the ad here to free resources.
    ad.dispose();
  },
  onAdDismissedFullScreenContent: (ad) {
    // Called when the ad dismissed full screen content.
    debugPrint('Ad was dismissed.');
    // Dispose the ad here to free resources.
    ad.dispose();
  },
  onAdImpression: (ad) {
    // Called when an impression occurs on the ad.
    debugPrint('Ad recorded an impression.');
  },
  onAdClicked: (ad) {
    // Called when a click is recorded for an ad.
    debugPrint('Ad was clicked.');
  },
);

Медийное объявление

RewardedInterstitialAd показывается в виде оверлея поверх всего контента приложения и статически размещается, поэтому его нельзя добавить в дерево виджетов Flutter. Вы можете выбрать, когда показывать рекламу, вызвав метод show(). RewardedInterstitialAd.show() принимает OnUserEarnedRewardCallback, который вызывается, когда пользователь получает вознаграждение. Обязательно реализуйте эту функцию и вознаграждайте пользователей за просмотр рекламы.

_rewardedInterstitialAd?.show(
  onUserEarnedReward: (AdWithoutView ad, RewardItem rewardItem) {
    debugPrint('Reward amount: ${rewardItem.amount}');
  },
);

После вызова show() показанный таким образом Ad нельзя удалить программно, и для этого требуется ввод данных пользователем. RewardedInterstitialAd можно показать только один раз. Последующие вызовы show будут запускать onAdFailedToShowFullScreenContent.

Объявление необходимо удалить, когда оно больше не нужно. Рекомендуется вызывать функцию dispose() в обратных вызовах FullScreenContentCallback.onAdDismissedFullScreenContent и FullScreenContentCallback.onAdFailedToShowFullScreenContent.

[Необязательно] Проверка обратных вызовов проверки на стороне сервера

Приложения, которым требуются дополнительные данные в обратных вызовах проверки на стороне сервера, должны использовать функцию специальных данных в объявлениях с вознаграждением. Любое строковое значение, заданное для объекта объявления с вознаграждением, передается в параметр запроса custom_data обратного вызова SSV. Если значение специальных данных не задано, значение параметра запроса custom_data не будет присутствовать в обратном вызове SSV.

В приведенном ниже фрагменте кода показано, как задать параметры SSV после загрузки межстраничного объявления с вознаграждением:

RewardedInterstitialAd.load(
  adUnitId: "_adUnitId",
  request: AdRequest(),
  rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback(
    onAdLoaded: (ad) {
      ServerSideVerificationOptions _options =
          ServerSideVerificationOptions(
            customData: 'SAMPLE_CUSTOM_DATA_STRING',
          );
      ad.setServerSideOptions(_options);
      _rewardedInterstitialAd = ad;
    },
    onAdFailedToLoad: (error) {},
  ),
);

Замените SAMPLE_CUSTOM_DATA_STRING собственными данными.

Полный пример на GitHub

Полный пример можно посмотреть в демоверсии API.