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

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

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

Определите вознаграждения за продукты вашего приложения

Вознагражденные продукты имеют 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()

Ява

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

Ява

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 Library успешно загрузит видео, связанное с продуктом с вознаграждением, то есть если RewardResponseListener получит responseCode BillingResponse.OK , вы можете запустить процесс выставления счетов.

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

Осуществить покупку

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

Протестируйте ваши вознагражденные продукты

Чтобы проверить, как ваше приложение загружает видеорекламу и предоставляет пользователям вознагражденные продукты, воспользуйтесь услугами лицензированных тестировщиков , которые по умолчанию получают тестовые объявления вместо настоящих. Чтобы узнать, как настроить учетные записи для этих тестировщиков, см . User-test a Google Play Billing app .

Другой метод тестирования — использовать идентификатор продукта android.test.reward . Этот конкретный продукт является зарезервированным именем в Google Play Billing, поэтому вам не нужно добавлять его в список продуктов в приложении в Play Console.

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

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

Схема рабочего процесса вознаграждения за продукт

Следующая диаграмма последовательности показывает, как пользователь, ваше приложение и библиотека Google Play Billing Library работают вместе, чтобы показать видеорекламу и предоставить пользователю доступ к вознагражденному продукту:

Диаграмма последовательности, показывающая протокол вознаграждения за продукты
Рисунок 1. Шаги для завершения покупки вознагражденного продукта с использованием Google Play Billing