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

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

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

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

Наградные продукты имеют 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 получает уведомление, когда загрузка видео завершена. Прослушиватель также уведомляется, если видео недоступно или возникает другая ошибка, например тайм-аут сервера.

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

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

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

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

Потребляйте покупку

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

Протестируйте свои бонусные продукты

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

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

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

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

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

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

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