Добавление функций, связанных с товарами за вознаграждение

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

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

Как определить товары с вознаграждением в приложении

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

Прежде чем предлагать пользователю бонусный товар, необходимо получить SkuDetails для этого продукта. Для этого вызовите метод querySkuDetailsAsync(), указав в качестве типа товара значение SkuType.INAPP.

Как декларировать объявления, подходящие для определенного возраста

Чтобы помочь вам соблюдать законодательство в отношении детей и несовершеннолетних пользователей, в том числе закон США "О защите личных сведений детей в интернете" (COPPA) и Генеральный регламент ЕС о защите персональных данных (GDPR), в приложении нужно указать, какие объявления предназначены для детей в США, а какие – для пользователей, не достигших возраста согласия в своей стране. В Справочном центре AdMob рассказывается, когда нужно добавлять в запросы объявлений тег ресурса для детей и тег учета возраста, а также о последствиях этого.

При создании клиента для работы с платежами в приложении решите, следует ли считать запросы объявлений с вознаграждением предназначенными для детей или для пользователей, не достигших минимального возраста. Если вы хотите, чтобы в запросах объявлений действовали эти ограничения, вызовите методы setChildDirected() и setUnderAgeOfConsent(), передав в каждый из них подходящие значения.

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

Kotlin

val billingClient = BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build()

Java

BillingClient billingClient =
    BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build();

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

Перед тем как предложить пользователю посмотреть видеообъявление, чтобы получить бонусный товар, необходимо загрузить видео. Для этого создайте объект RewardLoadParams и свяжите его с объектом SkuDetails, представляющим бонусный товар. Затем вызовите метод loadRewardedSku() клиента платежной системы, передав объект RewardLoadParams и объект RewardResponseListener.

Прослушиватель RewardResponseListener получает уведомление, когда видео загружено. Слушатель также получает уведомление, если видео недоступно или произошла другая ошибка, например истекло время ожидания сервера.

Чтобы устройство работало без сбоев при загрузке видео, связанных с товарами с вознаграждением в вашем приложении, следуйте приведенным ниже рекомендациям.

  • Загружайте не более трех SKU бонусных товаров одновременно.
  • Попытайтесь загрузить видео, когда пользователь входит в приложение. Это поможет проверить, загружены ли видео и доступны ли они.
  • При выборе момента загрузки видео учитывайте баланс между использованием пропускной способности и скоростью отклика приложения, который лучше всего подходит для вашего варианта использования:

    • Загружайте видео не раньше, чем вызовете функцию getSkuDetails() для связанного бонусного товара. Приложение будет работать быстро, но вы можете потратить сетевой трафик на загрузку видео, которое пользователь не посмотрит.
    • Загружайте видео не раньше, чем пользователь перейдет на страницу, где оно должно показываться. В этом случае приложение редко расходует трафик впустую, но пользователю, возможно, придется подождать несколько секунд, прежде чем кнопка просмотра видео станет активной.

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

Kotlin

if (skuDetails.isRewarded()) {
    val params = RewardLoadParams.Builder()
            .setSkuDetails(skuDetails)
            .build()
    mBillingClient.loadRewardedSku(params.build(),
            object : RewardResponseListener {
        override fun onRewardResponse(@BillingResponse responseCode : Int) {
            if (responseCode == BillingResponse.OK) {
                // Enable the reward product, or make
                // any necessary updates to the UI.
            }
        }
    })
}

Java

if (skuDetails.isRewarded()) {
    RewardLoadParams.Builder params = RewardLoadParams.newBuilder();
    params.setSkuDetails(skuDetails);
    mBillingClient.loadRewardedSku(params.build(),
        new RewardResponseListener() {
            @Override
            public void onRewardResponse(int responseCode) {
                if (responseCode == BillingResponse.OK) {
                      // Enable the reward product, or make
                      // any necessary updates to the UI.
                  }
            }
        });
}

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

Если библиотеке Google Play Платежей удалось загрузить видео, связанное с бонусным товаром (то есть если RewardResponseListener получает responseCode со значением BillingResponse.OK), вы можете запустить сценарий оплаты.

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

Как использовать покупку

Чтобы уведомить платежного клиента о том, что пользователь получил и использовал товар с вознаграждением, обработайте покупку в методе onPurchasesUpdated() слушателя платежного клиента. Обратите внимание, что покупки с вознаграждением нужно использовать.

Как тестировать товары с вознаграждением

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

Ещё один способ тестирования – использовать идентификатор товара android.test.reward. Это название зарезервировано в Google Play Платежах, поэтому вам не нужно добавлять его в список товаров в приложении в Play Console.

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

После завершения тестирования замените android.test.reward на идентификаторы реальных товаров, за которые начисляется вознаграждение, прежде чем развертывать рабочую версию приложения для конечных пользователей.

Схема работы с товарами за вознаграждение

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

Схема последовательности для протокола вознаграждения за просмотр рекламы
Рисунок 1. Как совершить покупку бонусного товара с помощью Google Play Платежей