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

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

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

Подготовка

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

  • Настройте GMA Next-Gen SDK.
  • Используйте идентификатор тестового рекламного блока для объявлений с вознаграждением ca-app-pub-3940256099942544/5224354917.
    • При создании и тестировании приложения используйте тестовые объявления, а не реальные. Если вы не будете использовать идентификатор тестового рекламного блока, Google может заблокировать ваш аккаунт.
    • Перед публикацией приложения замените этот идентификатор на идентификатор своего рекламного блока.
    • Подробнее о тестовых объявлениях GMA Next-Gen SDK рассказывается в статье Как включить тестовые объявления.

Загрузка объявления

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

Kotlin

// Load ads after you initialize MobileAds.
RewardedAd.load(
  AdRequest.Builder(adUnitId).build(),
  object : AdLoadCallback<RewardedAd> {
    override fun onAdLoaded(ad: RewardedAd) {
      // Rewarded ad loaded.
      rewardedAd = ad
    }

    override fun onAdFailedToLoad(adError: LoadAdError) {
      // Rewarded ad failed to load.
      Log.e(TAG, "Rewarded ad failed to load: ${adError.message}")
      rewardedAd = null
    }
  },
)

Java

// Load ads after you initialize MobileAds.
RewardedAd.load(
    new AdRequest.Builder(adUnitId).build(),
    new AdLoadCallback<RewardedAd>() {
      @Override
      public void onAdLoaded(@NonNull RewardedAd ad) {
        // Rewarded ad loaded.
        rewardedAd = ad;
      }

      @Override
      public void onAdFailedToLoad(@NonNull LoadAdError adError) {
        // Rewarded ad failed to load.
        Log.e(TAG, "Rewarded ad failed to load: " + adError.getMessage());
        rewardedAd = null;
      }
    });

При тестировании используйте идентификатор тестового рекламного блока: ca-app-pub-3940256099942544/5224354917.

Покажите объявление

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

В примере ниже показано объявление:

Kotlin

private fun showAd(rewardedAd: RewardedAd, activity: Activity) {
  // Show the ad.
  rewardedAd.show(
    activity,
    object : OnUserEarnedRewardListener {
      override fun onUserEarnedReward(rewardItem: RewardItem) {
        // User earned the reward.
        val rewardAmount = rewardItem.amount
        val rewardType = rewardItem.type
      }
    },
  )
}

Java

private void showAd(RewardedAd rewardedAd, Activity activity) {
  // Show the ad.
  rewardedAd.show(
      activity,
      new OnUserEarnedRewardListener() {
        @Override
        public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
          // User earned the reward.
          int rewardAmount = rewardItem.getAmount();
          String rewardType = rewardItem.getType();
        }
      });
}

Как отслеживать события объявлений

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

Kotlin

private fun listenToAdEvents() {
  // Listen for ad events.
  val ad = rewardedAd
  if (ad == null) {
    Log.e(TAG, "Rewarded ad is not ready yet.")
    return
  }

  ad.adEventCallback =
    object : RewardedAdEventCallback {
      override fun onAdShowedFullScreenContent() {
        // Rewarded ad did show.
      }

      override fun onAdDismissedFullScreenContent() {
        // Rewarded ad did dismiss.
        rewardedAd = null
      }

      override fun onAdFailedToShowFullScreenContent(
        fullScreenContentError: FullScreenContentError
      ) {
        // Rewarded ad failed to show.
        Log.e(TAG, "Rewarded ad failed to show: ${fullScreenContentError.message}")
      }

      override fun onAdImpression() {
        // Rewarded ad did record an impression.
      }

      override fun onAdClicked() {
        // Rewarded ad did record a click.
      }
    }
}

Java

private void listenToAdEvents() {
  // Listen for ad events.
  if (rewardedAd == null) {
    Log.e(TAG, "Rewarded ad is not ready yet.");
    return;
  }

  rewardedAd.setAdEventCallback(
      new RewardedAdEventCallback() {
        @Override
        public void onAdShowedFullScreenContent() {
          // Rewarded ad did show.
        }

        @Override
        public void onAdDismissedFullScreenContent() {
          // Rewarded ad did dismiss.
          rewardedAd = null;
        }

        @Override
        public void onAdFailedToShowFullScreenContent(
            FullScreenContentError fullScreenContentError) {
          // Rewarded ad failed to show.
          Log.e(TAG, "Rewarded ad failed to show: " + fullScreenContentError.getMessage());
        }

        @Override
        public void onAdImpression() {
          // Rewarded ad did record an impression.
        }

        @Override
        public void onAdClicked() {
          // Rewarded ad did record a click.
        }
      });
}

Как проверить обратные вызовы при проверке на стороне сервера (необязательно)

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

  • Параметр запроса user_id. Позволяет идентифицировать пользователя, которому нужно начислить вознаграждение, например по идентификатору внутреннего аккаунта.
  • Параметр запроса custom_data. Содержит данные приложения, например место размещения вознаграждения, уровень игры или одноразовый код, сгенерированный сервером.

Если вы не зададите значение, Google не включит этот параметр запроса в обратный вызов для проверки на стороне сервера.

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

Kotlin

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)
    }
  },
)

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);
      }
    });

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

Важно! Параметр запроса custom_data закодирован в процентах. Прежде чем анализировать значение, декодируйте URL строки на сервере и проверьте подпись обратного вызова, прежде чем доверять параметрам запроса user_id или custom_data.