1. Введение
В этой лабораторной работе вы сосредоточитесь на создании одноразового продукта, определите варианты его покупки, установите региональные цены и протестируете процесс покупки одноразовых продуктов.
Аудитория
Эта лабораторная работа предназначена для разработчиков приложений для Android, которые хотят использовать Play Console для управления своим одноразовым каталогом продуктов.
Чему вы научитесь...
- Модель одноразового объекта продукта .
- Как пользоваться Google Play Console и управлять своим одноразовым каталогом продуктов.
- Как перевести одноразовую информацию о продукте на разные языки без лишних затрат.
- Как настроить региональную доступность и цены для разовых продуктов.
- Как использовать API Play Billing Library для запроса разовой информации о продукте.
- Как тестировать разовые продукты с помощью Play Billing Lab.
Что вам понадобится...
- Доступ к Google Play Console через учётную запись разработчика. Если у вас нет учётной записи разработчика, вам необходимо её создать .
- Пример приложения для этой лабораторной работы, который можно загрузить с GitHub .
- Android Studio .
2. Однократная премьера продукта
Объектная модель одноразового продукта обеспечивает большую гибкость в продаже продуктов и упрощает управление ими. Объектная модель разделяет то, что продаётся, и то, как это продаётся, позволяя предлагать один и тот же продукт/услугу по разным ценам и разными способами. Объектная модель имеет три уровня иерархии:
- Одноразовый продукт — объект продукта определяет, что покупает пользователь.
- Вариант покупки — вариант покупки определяет, как пользователю предоставляется право на использование, его цену и где (в каком регионе) продукт будет доступен. Один и тот же продукт может иметь несколько вариантов покупки, которые могут иметь разные цены в разных регионах.
- Предложение — предложения могут влиять на цену варианта покупки, с которым они связаны, и могут использоваться для моделирования скидок или предварительного заказа. Для одного варианта покупки может быть предусмотрено несколько предложений.
На следующей диаграмме показана модель одноразового объекта продукта.
Рисунок 1 : Модель одноразового объекта.
Более подробную информацию смотрите в обзоре одноразовых продуктов .
3. Создайте пример приложения
В этой лабораторной работе используется пример приложения для Android, демонстрирующий управление одноразовыми продуктами. Пример приложения представляет собой полнофункциональное приложение для Android с полным исходным кодом, демонстрирующим следующие аспекты:
- Интеграция приложения с PBL
- Получение информации о разовых продуктах и связанных с ними вариантах покупки
- Управляйте потоками закупок с региональным ценообразованием
В следующем демонстрационном видео показано, как будет выглядеть и вести себя пример приложения после его развертывания и запуска.
Если вы уже знакомы с одноразовыми продуктами и Play Billing Library (PBL), вы можете загрузить пример приложения и поэкспериментировать с ним.
Предварительные условия
Перед сборкой и развертыванием примера приложения выполните следующие действия:
- Создайте аккаунт разработчика в Google Play Console . Если у вас уже есть аккаунт разработчика, пропустите этот шаг.
- Создайте новое приложение в Play Console . При создании приложения вы можете указать любое имя для примера приложения.
- Установить Android Studio .
Строить
Целью этого этапа сборки является создание подписанного файла пакета приложения Android для примера приложения.
Чтобы создать пакет приложения Android, выполните следующие действия:
- Загрузите пример приложения с GitHub .
- Соберите пример приложения . Перед сборкой измените имя пакета примера приложения, а затем выполните сборку. Если в Play Console есть пакеты других приложений, убедитесь, что имя пакета, указанное для примера приложения, уникально.
Примечание : при сборке примера приложения создаётся только APK-файл, который можно использовать для локального тестирования. Однако при запуске приложения не отображаются товары и цены, поскольку они не настроены в Play Console. - Создайте подписанный пакет приложений для Android.
Следующий шаг — загрузить пакет приложения Android в Google Play Console.
4. Создайте одноразовый продукт в Play Console.
Для создания одноразовых продуктов в Google Play Console необходимо иметь приложение в Play Console. Создайте приложение в Play Console, а затем загрузите ранее созданный подписанный пакет приложений.
Создать приложение
Чтобы создать приложение:
- Войдите в Google Play Console , используя свою учетную запись разработчика.
- Нажмите «Создать приложение» . Откроется страница «Создать приложение» .
- Введите название приложения, выберите язык по умолчанию и другие сведения, связанные с приложением.
- Нажмите «Создать приложение» . Это создаст приложение в Google Play Console.
Теперь вы можете загрузить подписанный пакет примера приложения.
Загрузите подписанный пакет приложения
- Загрузите подписанный комплект приложений во внутреннюю тестовую версию Google Play Console . Только после загрузки вы сможете настроить функции монетизации в Play Console.
- Нажмите Тестирование и выпуск > Тестирование > Внутренний выпуск > Создать новый выпуск .
- Введите название релиза и загрузите подписанный APK-файл.
- Нажмите кнопку «Далее» , а затем нажмите кнопку «Сохранить и опубликовать» .
Теперь вы можете создавать свои одноразовые продукты.
Создать одноразовый продукт
Чтобы создать одноразовый продукт:
- В консоли Google Play в левом навигационном меню выберите Монетизация с Play > Продукты > Разовые продукты .
- Нажмите Создать одноразовый продукт .
- Введите следующие данные о продукте:
- Идентификатор продукта: введите уникальный идентификатор. Например,
trending_movie_1. - (Необязательно) Теги: добавьте соответствующие теги.
- Имя: Введите название продукта. Например,
Product Movie. - Описание: Введите описание товара. Например,
Product Description.
По умолчанию название и описание продукта указаны на английском (США) языке (en-US ). Вы также можете вручную ввести название и описание на других языках. Чтобы ввести данные, нажмите «Управление переводами» , выберите языки, для которых вы хотите ввести перевод, и нажмите «Применить» . На следующем изображении показана опция «Управление переводами» .
Рисунок 2 : Управление переводом.
Выбранные вами языки появятся в раскрывающемся списке. Выберите каждый язык и введите соответствующее название и описание на выбранном языке. Вы также можете бесплатно автоматически перевести название и описание товара. Подробнее см. в разделе «Перевод разовых товаров» этой практической работы.
Примечание : для целей этой лабораторной работы вы можете пропустить настройку поля «Значок» и раздела « Налоги, соблюдение нормативных требований и программы» . - Идентификатор продукта: введите уникальный идентификатор. Например,
- Нажмите кнопку «Далее» .
- Добавьте вариант покупки и настройте его региональную доступность. Для одноразового продукта требуется как минимум один вариант покупки, который определяет способ предоставления права, его цену и региональную доступность. В этой практической работе мы добавим стандартный вариант покупки для продукта.
В разделе «Вариант покупки» введите следующие данные:- Идентификатор варианта покупки: введите уникальный идентификатор. Например,
buy-movie. - Тип покупки: выберите «Купить» .
- (Необязательно) Теги: добавьте теги, относящиеся к этому варианту покупки.
- (Необязательно) Нажмите «Дополнительные параметры» , чтобы настроить дополнительные параметры. В рамках этой практической работы настройку дополнительных параметров можно пропустить.
- Идентификатор варианта покупки: введите уникальный идентификатор. Например,
- Далее необходимо настроить региональную доступность и цену для варианта покупки. В разделе региональной доступности укажите регионы, в которых доступен ваш продукт, включая регионы, где ваше приложение ещё не опубликовано. По умолчанию возможность покупки будет доступна во всех регионах.
В разделе «Доступность и цены» нажмите «Изменить доступность и доступ» > «Сделать недоступным» . Обратите внимание, что для всех регионов по умолчанию установлено значение «Доступно» .- Выберите все страны, кроме
France,SpainиUnited States, затем нажмите «Сделать недоступным» . - В раскрывающемся списке « Все регионы» выберите «Доступные страны и регионы» . Будут показаны только страны, выбранные вами на предыдущем шаге.
- Для каждой из доступных стран нажмите значок редактирования в столбце «Цена» . Откроется диалоговое окно для редактирования цены. Введите и сохраните следующие цены:
- Для
Franceвведите 10 евро. - Для
Spainвведите 8 евро. - Для
United Statesвведите 13 долларов США.
- Для
- Выберите все страны, кроме
- Нажмите «Активировать» . После этого ваш одноразовый продукт станет доступен для покупки через опцию «Купить» .
Примечание : Валюта региональной цены отображается в зависимости от страны, выбранной пользователем в Play. Например, если в качестве страны Play пользователя выбрана Франция, разовая цена продукта будет отображаться в евро.
Видео создания одноразового продукта
В следующем видео показаны одноразовые этапы создания продукта, описанные ранее.
Добавить возможность аренды с правом выкупа
Теперь добавьте возможность аренды с правом выкупа к ранее созданному одноразовому продукту.
- В консоли Google Play в левом навигационном меню выберите Монетизация с Play > Продукты > Разовые продукты .
- Нажмите стрелку вправо для продукта с идентификатором
trending_movie_1, который вы создали на предыдущем шаге. - Нажмите Добавить вариант покупки .
- В разделе «Вариант покупки» введите следующие данные:
- Идентификатор варианта покупки: введите
rent-movie. - Тип покупки: выберите «Аренда» .
- Срок аренды: выберите 48 часов.
- Период начала аренды: выберите 24 часа.
- (Необязательно) Теги: добавьте теги, относящиеся к этому варианту покупки.
- (Необязательно) Нажмите «Дополнительные параметры» , чтобы настроить дополнительные параметры. В рамках этой практической работы настройку дополнительных параметров можно пропустить.
- Идентификатор варианта покупки: введите
- Далее, аналогично опции «Купить/Покупить», настройте региональную доступность опции «Аренда». См. шаги 6 и 7 в предыдущем разделе. При настройке региональных цен задайте отдельную цену для аренды. Например:
-
France- 5 евро -
Spain- 4 евро -
United States- 7 долларов США.
-
5. Перевести одноразовую информацию о продукте
Вы можете перевести название и описание вашего продукта бесплатно, воспользовавшись функцией машинного перевода, доступной в Google Play Console.
Чтобы перевести название и описание, выполните следующие действия:
- В консоли Google Play в левом навигационном меню выберите «Развитие пользователей» > «Переводы» > «Магазин и продукты внутри приложения» .
- Нажмите «Создать заказ» .
- Выберите опцию «Машинный перевод бесплатно» и нажмите кнопку «Далее» .
- В разделе «Перевести на языки» выберите французский - fr-FR и испанский -es-ES , а затем нажмите «Далее» .
- Выберите «Разовые продукты и подписки» , затем нажмите «Перевести и просмотреть переводы» . Появится баннер с отказом от ответственности. Подтвердите отказ от ответственности.
- Теперь вы увидите список языков перевода. Нажмите «Просмотреть» и выберите нужный язык. Проверьте текст и нажмите «Применить все переводы» . Повторите этот шаг для всех языков, которые вы выбрали для перевода.
После перевода вы можете редактировать переведённый текст в Play Console. Чтобы отредактировать переведённый текст:
- Откройте страницу Разовые продукты > [ваш разовый продукт] > Редактировать разовый продукт > Редактировать сведения о разовом продукте .
- Выберите нужный язык в раскрывающемся списке. Отобразится текст на выбранном языке. На следующем изображении показан выбор языка для редактирования переведённого текста:
Рисунок 3 : Редактирование переведенного текста. - При необходимости отредактируйте текст и нажмите кнопку Сохранить изменения .
Переведённый текст отображается пользователю в соответствии с языковыми настройками телефона . Например, если на телефоне установлен французский язык, название и описание товара будут отображаться на французском языке. На следующем примере показано, как и где будет отображаться переведённый текст на разных языках.
Рисунок 4 : Переведенный текст в вашем приложении.
Видео о настройке перевода
В следующем видео показаны этапы настройки перевода, описанные ранее.
6. Интеграция с PBL
Чтобы интегрировать ваше приложение с Play Billing Library (PBL) , выполните следующие действия:
- Добавьте зависимость Play Billing Library к примеру приложения.
dependencies { val billing_version = "8.0.0" implementation("com.android.billingclient:billing-ktx:$billing_version") } - Инициализируйте BillingClient . BillingClient — это клиентский SDK, который находится в вашем приложении и взаимодействует с библиотекой Play Billing. В следующем фрагменте кода показано, как инициализировать клиент для выставления счетов.
private BillingClient createBillingClient() { return BillingClient.newBuilder(activity) .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) // For one-time products, add a listener to process and acknowledge the purchases. This will notify // Google the purchase was processed. // For client-only apps, use billingClient.acknowledgePurchase(). // If you have a secure backend, you must acknowledge purchases on your server using the // server-side API. // See https://developer.android.com/google/play/billing/security#acknowledge // In this sample snippet purchases aren't processed. You must // implement your business logic to process and acknowledge the purchases. .setListener((billingResult, purchases) -> {}) .enableAutoServiceReconnection() .build(); } - Подключитесь к Google Play. Следующий фрагмент кода показывает, как подключиться к Google Play.
/** * Starts the billing connection with Google Play. This method should be called exactly once * before any other methods in this class. * * @param productList The list of products to query for after the connection is established. */ public void startBillingConnection(List<Product> productList) { billingClient.startConnection( new BillingClientStateListener() { @Override public void onBillingSetupFinished(BillingResult billingResult) { if (billingResult.getResponseCode() == BillingResponseCode.OK) { Log.d(TAG, "Billing Client Connection Successful"); queryProductDetails(productList); } else { Log.e(TAG, "Billing Client Connection Failed: " + billingResult.getDebugMessage()); listener.onBillingSetupFailed(billingResult); // Propagate the error to the listener to show a message to the user. } } @Override public void onBillingServiceDisconnected() { Log.e(TAG, "Billing Client Connection Lost"); listener.onBillingError("Billing Connection Lost"); } }); } - Получите информацию о разовом продукте. После интеграции приложения с PBL необходимо получить информацию о разовом продукте. Следующий фрагмент кода показывает, как получить информацию о разовом продукте в вашем приложении.
Извлечение одноразового продукта (в этом примереprivate void queryProductDetails(List<Product> productList) { QueryProductDetailsParams queryProductDetailsParams = QueryProductDetailsParams.newBuilder().setProductList(productList).build(); billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { @Override public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResponse) { if (billingResult.getResponseCode() == BillingResponseCode.OK) { List<ProductDetails> productDetailsList = productDetailsResponse.getProductDetailsList(); listener.onProductDetailsResponse(productDetailsList); } else { Log.e(TAG, "QueryProductDetailsAsync Failed: " + billingResult.getDebugMessage()); listener.onBillingError("Query Products Failed: " + billingResult.getResponseCode()); } } }); }trending_movie_1) вProductDetailsдает ответ, аналогичный следующему: Обратите внимание, что варианты покупки и аренды доступны в списке{ "productId": "trending_movie_1", "type": "inapp", "title": "Purrfect Mayhem: The Rewind Protocol (Movies All Day | Play Samples)", "name": "Purrfect Mayhem: The Rewind Protocol", "description": "Dr. Arid Thorne and a smart tiger named Yolo find a mysterious tape. It's a \"Rewind Protocol\" to fix time. A shadowy group, the Clockinator, hunts them to seize the tape's power.", "skuDetailsToken": "<---skuDetailsToken--->", "oneTimePurchaseOfferDetails": {}, "oneTimePurchaseOfferDetailsList": [ { "priceAmountMicros": 13000000, "priceCurrencyCode": "USD", "formattedPrice": "$13.00", "offerIdToken": "<---buy offerIdToken --->", "purchaseOptionId": "buy-option", "offerTags": [ "adventure", "mystery" ] }, { "priceAmountMicros": 7000000, "priceCurrencyCode": "USD", "formattedPrice": "$7.00", "offerIdToken": "<---rent offerIdToken--->", "purchaseOptionId": "rent-option", "offerTags": [ "adventure", "mystery" ], "rentalDetails": { "rentalPeriod": "P30D", "rentalExpirationPeriod": "PT24H" } } ] }oneTimePurchaseOfferDetailsList. Этот список содержит два варианта покупки ( вариант покупки и вариант аренды ), настроенные в Play Console. Каждый вариант покупки можно однозначно идентифицировать по его offerIdToken . - Получите токены предложений по аренде и покупке. Они понадобятся вам для запуска процесса выставления счетов на шаге 6.
@Override public void onProductDetailsResponse(List<ProductDetails> productDetailsList) { if (productDetailsList != null && !productDetailsList.isEmpty()) { // Iterate over all details of the queried product in step 4. for (ProductDetails productDetails : productDetailsList) { // Get the list of all the offers associated with the product. List<ProductDetails.OneTimePurchaseOfferDetails> offerDetailsList = productDetails.getOneTimePurchaseOfferDetailsList(); // Iterate over the offer details for (ProductDetails.OneTimePurchaseOfferDetails offerDetails : offerDetailsList) { // For a Rent purchase option, the // offerDetails.getRentalDetails() method returns // the rent information. If this information is present, // the offer corresponds to a Rent purchsae option. if (offerDetails.getRentalDetails() != null) { rentFormattedPrice = offerDetails.getFormattedPrice(); // Get the offerIdToken for the Rent purchase option rentOfferToken = offerDetails.getOfferToken(); rentMovieTags = offerDetails.getOfferTags(); } // If the offerDetails.getRentalDetails() returns // null, the offer corresponds to a Buy purchsae option. else { buyFormattedPrice = offerDetails.getFormattedPrice(); // Get the offerIdToken for the Buy purchase option buyOfferToken = offerDetails.getOfferToken(); buyMovieTags = offerDetails.getOfferTags(); } } updateUIButtons(); return; } } else { Log.e(TAG, "No product details found for " + productId); } } - Запустите процесс выставления счетов.
/** * Launches the billing flow for the product with the given offer token. * * @param activity The activity instance from which the billing flow will be launched. * @param productDetails The product details of the product to purchase. * @param offerToken The offer token of the product to purchase. * @return The result of the billing flow. */ public void launchPurchase(Activity activity, ProductDetails productDetails, String offerToken) { ImmutableList<BillingFlowParams.ProductDetailsParams> productDetailsParamsList = ImmutableList.of( BillingFlowParams.ProductDetailsParams.newBuilder() .setProductDetails(productDetails) .setOfferToken(offerToken) .build()); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); billingClient.launchBillingFlow(activity, billingFlowParams); }
Совет : вы также можете настроить уведомления для разработчиков в режиме реального времени (RTDN) для реализации кампаний по возврату клиентов и других стратегий управления жизненным циклом покупки. Чтобы понять, как настроить RTDN и обрабатывать уведомления с точным отслеживанием и правами, рекомендуется ознакомиться с практической работой «Максимизируйте интеграцию биллинга в Play» .
7. Тестовые варианты покупки
Прежде чем сделать ваши одноразовые продукты доступными в вашем рабочем приложении, вы можете протестировать интеграцию PBL с помощью тестеров лицензий и Play Billing Lab .
Вы узнаете, как протестировать локализацию цен и доступность приложения, если оно доступно только в некоторых регионах и для каждого региона установлена своя цена.
Предварительные условия
- Добавьте тестер лицензий в Google Play Console, а затем включите тестер лицензий для внутреннего тестирования.
- Загрузите и установите приложение Play Billing Lab на свой телефон или эмулятор.
- Запустите созданный ранее пример приложения на своем телефоне или эмуляторе.
Тестирование региональных цен для вариантов покупки
Чтобы протестировать региональные цены для вариантов покупки, выполните следующие действия:
- Откройте приложение Play Billing Lab и войдите в систему как тестировщик лицензий.
- В настройках конфигурации нажмите «Изменить» , выберите страну
Franceи нажмите «Применить» . Здесь мы выбираем страну воспроизведения, которая определяет валюту, отображаемую в приложении. - Закройте и снова откройте пример приложения. Теперь валюта покупки и аренды во
Franceдолжна отображаться в евро.
Чтобы проверить другую страну, выберите Spain на шаге 2, а затем выполните шаг 3.
Воспроизвести видео тестирования Billing Lab
В следующем видео показаны этапы тестирования региональных цен с использованием примера приложения.
8. Дальнейшие шаги
- Узнайте, как максимально эффективно интегрировать биллинговые функции в ваши игры .
- Узнайте, как анализировать отказы от покупки продукции .
- Не забывайте следовать рекомендациям по проверке и обработке покупок в вашей защищенной системе, как только пользователи начнут покупать эти продукты.
Справочные документы
9. Поздравляем!
Поздравляем! Вы успешно создали новый разовый продукт в Google Play Console, настроили вариант покупки и протестировали процесс покупки с помощью Play Billing Lab. Теперь вы лучше понимаете гибкий каталог продуктов Google Play для разовых покупок.
Опрос
Мы очень ценим ваши отзывы об этой лабораторной работе. Уделите несколько минут и пройдите наш опрос.