Один из способов разблокировки внутриигровых товаров и преимуществ для пользователей — создание товаров, за которые начисляются награды , то есть предметов, которые пользователи получают после просмотра видеорекламы. Предоставляя товары, за которые начисляются награды, вы позволяете пользователям получать внутриигровые награды и преимущества без необходимости совершать прямые покупки.
В этом документе объясняется, как реализовать функциональность, специфичную для продуктов с системой вознаграждений. Раздел «Схема рабочего процесса» на этой странице иллюстрирует этот процесс.
Определите товары, за которые начисляются награды в вашем приложении.
Товары, за которые начисляются награды, имеют SkuType со значением INAPP . Чтобы пользователи могли просматривать несколько рекламных роликов и получать несколько наград, товары необходимо использовать.
Прежде чем предложить пользователю товар в качестве вознаграждения, необходимо получить данные SkuDetails для этого товара. Для этого вызовите querySkuDetailsAsync() , указав в качестве типа товара SkuType.INAPP .
Объявляйте рекламу соответствующей возрасту.
Для обеспечения соблюдения правовых обязательств, касающихся детей и несовершеннолетних пользователей, включая Закон о защите конфиденциальности детей в Интернете (COPPA) и Общий регламент по защите данных (GDPR) , ваше приложение должно указывать, какие объявления следует рассматривать как предназначенные для детей в Соединенных Штатах, а какие — для пользователей, не достигших соответствующего возраста согласия в вашей стране . В справочном центре AdMob объясняется, когда следует помечать запросы на показ рекламы как предназначенные для детей , а когда — как предназначенные для пользователей, не достигших возраста согласия , а также каковы последствия таких действий.
При создании платежного клиента для вашего приложения подумайте, следует ли рассматривать запросы на рекламу с вознаграждением как направленные на детей или на пользователей, не достигших возраста согласия. Если запросы на рекламу должны иметь эти ограничения, вызовите методы setChildDirected() и setUnderAgeOfConsent() , передав в каждый из них соответствующие значения.
Следующий фрагмент кода показывает, как указать, что видеореклама должна быть подходящей для детей или для пользователей, не достигших возраста согласия:
Котлин
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 получает уведомление, когда видео загружается полностью. Он также получает уведомление, если видео недоступно или возникает другая ошибка, например, тайм-аут сервера.
Для обеспечения стабильной работы устройства при загрузке видеороликов, связанных с товарами, за которые начисляются награды в вашем приложении, следует учитывать следующие рекомендации:
- За один раз можно загрузить не более трех товаров, участвующих в программе лояльности.
- При каждом входе пользователя в ваше приложение пытайтесь загрузить видео. Этот шаг поможет вам проверить, загружены ли видео и доступны ли они по-прежнему.
Принимая решение о времени загрузки видео, выберите оптимальный баланс между использованием полосы пропускания и быстродействием приложения, который лучше всего подходит для вашего случая:
- В идеале, загружайте видео после вызова функции
getSkuDetails()для соответствующего товара, за который начисляется вознаграждение. Ваше приложение останется очень отзывчивым, но вы можете потратить сетевой трафик на загрузку видео, которое пользователь так и не посмотрит. - В крайнем случае, загрузите видео, когда пользователь перейдет на страницу, где оно должно отображаться. В этом случае ваше приложение редко расходует трафик впустую, но пользователю, возможно, придется подождать несколько минут, прежде чем кнопка для просмотра видео станет активной.
- В идеале, загружайте видео после вызова функции
Приведенный ниже фрагмент кода демонстрирует процесс загрузки видеорекламы, которая воспроизводится до того, как пользователь получит в награду продукт:
Котлин
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 Billing успешно загружает видео, связанное с продуктом, за который начисляется вознаграждение, то есть, если RewardResponseListener получает responseCode равный BillingResponse.OK , вы можете запустить процесс оплаты.
Показ рекламы продукта, за который начисляется вознаграждение, запускается путем вызова launchBillingFlow() , как и для всех других типов внутриигровых продуктов . Даже если пользователь не совершает прямую покупку для получения продукта, за который начисляется вознаграждение, вам все равно необходимо включить процесс оплаты, чтобы пользователь мог получить и использовать продукт.
Употребить покупку
Чтобы уведомить ваш платежный клиент о том, что пользователь получил и использовал продукт, за который начисляются вознаграждения, обработайте покупку в методе onPurchasesUpdated() вашего обработчика платежного клиента. Обратите внимание, что покупки, за которые начисляются вознаграждения, должны быть использованы .
Протестируйте отмеченные наградами товары.
Чтобы проверить, как ваше приложение загружает видеорекламу и предоставляет пользователям товары за вознаграждение, воспользуйтесь услугами лицензированных тестировщиков , которые по умолчанию получают тестовую рекламу вместо реальной. Инструкции по настройке учетных записей для этих тестировщиков см. в разделе «Пользовательское тестирование приложения Google Play Billing» .
Ещё один способ тестирования — использование идентификатора продукта android.test.reward . Это конкретное имя зарезервировано в Google Play Billing, поэтому вам не нужно добавлять его в список внутриигровых продуктов в Play Console.
Внимание: при тестировании вознаграждений в вашем приложении не используйте реальные товары ; в противном случае ваш аккаунт может быть помечен как спам или мошеннический.
Однако после завершения тестирования обязательно замените android.test.reward на идентификаторы продуктов, за которые начисляются вознаграждения, прежде чем развертывать приложение для конечных пользователей.
Схема процесса вознаграждения за продукт
Следующая диаграмма последовательности показывает, как пользователь, ваше приложение и библиотека Google Play Billing взаимодействуют для показа видеорекламы и предоставления пользователю доступа к продукту за вознаграждение: