Объявления с вознаграждением

Выберите платформу: Android (бета-версия)Новый Android iOS Unity Flutter

Реклама с вознаграждением позволяет награждать пользователей внутриигровыми предметами за взаимодействие с видеорекламой, интерактивной рекламой и опросами.

Предварительные требования

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

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

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

ca-app-pub-3940256099942544/5224354917

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

Подробную информацию о тестовых объявлениях в Google Mobile Ads SDK см. в разделе «Включение тестовых объявлений» .

Загрузите рекламный объект с вознаграждением.

Рекламные объявления с вознаграждением загружаются путем вызова статического метода load() класса RewardedAd и передачи в него объекта RewardedAdLoadCallback . Обычно это делается в методе onCreate() Activity . Обратите внимание, что, как и другие коллбэки для загрузки форматированных объявлений, RewardedAdLoadCallback использует LoadAdError для предоставления более подробной информации об ошибке.

Java

RewardedAd.load(
    this,
    "AD_UNIT_ID",
    new AdRequest.Builder().build(),
    new RewardedAdLoadCallback() {
      @Override
      public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
        Log.d(TAG, "Ad was loaded.");
        MainActivity.this.rewardedAd = rewardedAd;
      }

      @Override
      public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
        Log.d(TAG, loadAdError.getMessage());
        rewardedAd = null;
      }
    });

Котлин

RewardedAd.load(
  this,
  "AD_UNIT_ID",
  AdRequest.Builder().build(),
  object : RewardedAdLoadCallback() {
    override fun onAdLoaded(ad: RewardedAd) {
      Log.d(TAG, "Ad was loaded.")
      rewardedAd = ad
    }

    override fun onAdFailedToLoad(adError: LoadAdError) {
      Log.d(TAG, adError.message)
      rewardedAd = null
    }
  },
)

Замените AD_UNIT_ID на идентификатор вашего рекламного блока.

Установите функцию обратного вызова для полноэкранного контента (FullScreenContentCallback).

Функция FullScreenContentCallback обрабатывает события, связанные с отображением вашего RewardedAd . Перед показом вашего RewardedAd убедитесь, что вы установили функцию обратного вызова следующим образом:

Java

rewardedAd.setFullScreenContentCallback(
    new FullScreenContentCallback() {
      @Override
      public void onAdDismissedFullScreenContent() {
        // Called when fullscreen content is dismissed.
        Log.d(TAG, "Ad was dismissed.");
        // Don't forget to set the ad reference to null so you
        // don't show the ad a second time.
        rewardedAd = null;
      }

      @Override
      public void onAdFailedToShowFullScreenContent(AdError adError) {
        // Called when fullscreen content failed to show.
        Log.d(TAG, "Ad failed to show.");
        // Don't forget to set the ad reference to null so you
        // don't show the ad a second time.
        rewardedAd = null;
      }

      @Override
      public void onAdShowedFullScreenContent() {
        // Called when fullscreen content is shown.
        Log.d(TAG, "Ad showed fullscreen content.");
      }

      @Override
      public void onAdImpression() {
        // Called when an impression is recorded for an ad.
        Log.d(TAG, "Ad recorded an impression.");
      }

      @Override
      public void onAdClicked() {
        // Called when an ad is clicked.
        Log.d(TAG, "Ad was clicked.");
      }
    });

Котлин

rewardedAd?.fullScreenContentCallback =
  object : FullScreenContentCallback() {
    override fun onAdDismissedFullScreenContent() {
      // Called when fullscreen content is dismissed.
      Log.d(TAG, "Ad was dismissed.")
      // Don't forget to set the ad reference to null so you
      // don't show the ad a second time.
      rewardedAd = null
    }

    override fun onAdFailedToShowFullScreenContent(adError: AdError) {
      // Called when fullscreen content failed to show.
      Log.d(TAG, "Ad failed to show.")
      // Don't forget to set the ad reference to null so you
      // don't show the ad a second time.
      rewardedAd = null
    }

    override fun onAdShowedFullScreenContent() {
      // Called when fullscreen content is shown.
      Log.d(TAG, "Ad showed fullscreen content.")
    }

    override fun onAdImpression() {
      // Called when an impression is recorded for an ad.
      Log.d(TAG, "Ad recorded an impression.")
    }

    override fun onAdClicked() {
      // Called when an ad is clicked.
      Log.d(TAG, "Ad was clicked.")
    }
  }

Показать рекламу

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

Java

rewardedAd.show(
    MainActivity.this,
    new OnUserEarnedRewardListener() {
      @Override
      public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
        Log.d(TAG, "User earned the reward.");
        // Handle the reward.
      }
    });

Котлин

rewardedAd?.show(
  this,
  OnUserEarnedRewardListener { rewardItem ->
    Log.d(TAG, "User earned the reward.")
    // Handle the reward.
    val rewardAmount = rewardItem.amount
    val rewardType = rewardItem.type
  },
)

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

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

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

Java

RewardedAd.load(
    context,
    AD_UNIT_ID,
    new AdRequest.Builder().build(),
    new RewardedAdLoadCallback() {
      @Override
      public void onAdLoaded(RewardedAd ad) {
        rewardedAd = ad;
        ServerSideVerificationOptions options =
            new ServerSideVerificationOptions.Builder()
                .setCustomData("SAMPLE_CUSTOM_DATA_STRING")
                .build();
        rewardedAd.setServerSideVerificationOptions(options);
      }
    });

Котлин

RewardedAd.load(
  context,
  AD_UNIT_ID,
  AdRequest.Builder().build(),
  object : RewardedAdLoadCallback() {
    override fun onAdLoaded(ad: RewardedAd) {
      rewardedAd = ad
      val options =
        ServerSideVerificationOptions.Builder().setCustomData("SAMPLE_CUSTOM_DATA_STRING").build()
      rewardedAd?.setServerSideVerificationOptions(options)
    }
  },
)

Замените SAMPLE_CUSTOM_DATA_STRING на ваши пользовательские данные.

Если вы хотите задать пользовательскую строку вознаграждения, это необходимо сделать до показа рекламы.

Часто задаваемые вопросы

Предусмотрен ли тайм-аут для вызова инициализации?
Через 10 секунд SDK Google Mobile Ads вызывает OnInitializationCompleteListener , даже если инициализация сети-посредника еще не завершена.
Что произойдет, если некоторые сети-посредники окажутся не готовы к моменту получения обратного вызова инициализации?

Мы рекомендуем загружать рекламу внутри функции обратного вызова OnInitializationCompleteListener . Даже если сеть-посредник еще не готова, Google Mobile Ads SDK все равно запросит у нее рекламу. Таким образом, если инициализация сети-посредника завершится после истечения таймаута, она сможет обрабатывать будущие запросы на рекламу в этой сессии.

Вы можете продолжать опрашивать статус инициализации всех адаптеров на протяжении всей сессии вашего приложения, вызывая метод MobileAds.getInitializationStatus() .

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

AdapterStatus.getDescription() описывает причину, по которой адаптер не готов обрабатывать рекламные запросы.

Всегда ли функция обратного вызова onUserEarnedReward() вызывается до функции обратного вызова onAdDismissedFullScreenContent() ?

Для рекламы Google все вызовы onUserEarnedReward() происходят до onAdDismissedFullScreenContent() . Для рекламы, показываемой через медиацию , порядок обратных вызовов определяется реализацией SDK рекламной сети стороннего разработчика. Для SDK рекламных сетей, которые предоставляют один обратный вызов закрытия с информацией о вознаграждении, адаптер медиации вызывает onUserEarnedReward() перед onAdDismissedFullScreenContent() .

Примеры на GitHub

  • Пример рекламы с вознаграждением: Java | Kotlin

Следующие шаги

Изучите следующие темы: