1. Введение
В этом практическом занятии вы сосредоточитесь на создании разового продукта, определении вариантов его покупки, установке цен для конкретных регионов и тестировании процесса покупки разовых продуктов.
Аудитория
Данный практический курс предназначен для разработчиков Android-приложений, которые хотят использовать Play Console для управления своим разовым каталогом товаров.
Что вы узнаете...
- Модель объекта одноразового продукта .
- Как ориентироваться и использовать Google Play Console для управления своим разовым каталогом товаров.
- Как бесплатно перевести одноразовые сведения о товаре на разные языки.
- Как настроить региональную доступность и ценообразование для разовых товаров.
- Как использовать API библиотеки Play Billing для запроса информации о разовых платежах за продукт.
- Как тестировать разовые продукты с помощью Play Billing Lab.
Что вам понадобится...
- Доступ к консоли Google Play возможен только с учетной записью разработчика. Если у вас нет учетной записи разработчика, вам необходимо ее создать .
- Пример приложения для этого практического занятия, который вы можете скачать с GitHub .
- Android Studio .
2. Разовая премьера продукта
Модель объекта одноразового продукта обеспечивает большую гибкость в способах продажи товаров и упрощает управление ими. Модель объекта разделяет то, что продается, и способ продажи, позволяя одному и тому же товару иметь несколько ценовых категорий и различные способы продвижения среди пользователей. Модель объекта имеет три уровня иерархии:
- Одноразовый продукт — объект продукта определяет, что именно покупает пользователь.
- Вариант покупки — это способ предоставления права пользования товаром пользователю, его цена и регион, в котором продукт будет доступен. Один и тот же продукт может иметь несколько вариантов покупки, которые могут представлять разные цены в разных регионах.
- Предложения — Предложения могут влиять на цену варианта покупки, к которому они привязаны, и могут использоваться для моделирования скидок или предварительного заказа. Один вариант покупки может иметь несколько предложений.
На следующей диаграмме представлена модель объекта одноразового продукта.
Рисунок 1 : Модель одноразового объекта.
Для получения более подробной информации см. обзор разовых продуктов .
3. Создайте демонстрационное приложение.
В этом практическом занятии используется пример Android-приложения, демонстрирующий управление разовыми товарами. Пример приложения разработан как полнофункциональное Android-приложение, исходный код которого содержит полный набор кода, демонстрирующий следующие аспекты:
- Интеграция приложения с PBL
- Получение информации о товарах, приобретаемых разово, и соответствующих вариантах покупки.
- Запускайте процессы закупок с учетом региональных цен.
В следующем демонстрационном видеоролике показано, как будет выглядеть и работать тестовое приложение после его развертывания и запуска.
Если вы уже знакомы с разовыми продуктами и библиотекой Play Billing Library (PBL), вы можете скачать демонстрационное приложение и поэкспериментировать с ним.
Предварительные требования
Перед сборкой и развертыванием тестового приложения выполните следующие действия:
- Создайте учетную запись разработчика в Google Play Console . Если у вас уже есть учетная запись разработчика, пропустите этот шаг.
- Создайте новое приложение в Play Console . При создании приложения вы можете указать любое имя для демонстрационного приложения.
- Установите Android Studio .
Строить
Цель этого этапа сборки — сгенерировать подписанный файл пакета Android-приложения для демонстрационного примера.
Для создания пакета приложения Android выполните следующие действия:
- Загрузите пример приложения с GitHub .
- Соберите демонстрационное приложение . Перед сборкой измените имя пакета демонстрационного приложения, а затем выполните сборку. Если в вашей консоли Play есть пакеты других приложений, убедитесь, что имя пакета, которое вы указываете для демонстрационного приложения, уникально.
Примечание : При сборке демонстрационного приложения создается только APK-файл, который можно использовать для локального тестирования. Однако при запуске приложения товары и цены не загружаются, поскольку они не были настроены в Play Console. - Сгенерируйте подписанный пакет приложения для Android.
Следующий шаг — загрузка пакета Android-приложения в Google Play Console.
4. Создайте разовый продукт в Play Console.
Для создания разовых продуктов в Google Play Console необходимо иметь приложение в Play Console. Создайте приложение в Play Console, а затем загрузите ранее созданный подписанный пакет приложения.
Создайте приложение
Для создания приложения:
- Войдите в консоль Google Play , используя свою учетную запись разработчика.
- Нажмите «Создать приложение» . Откроется страница создания приложения .
- Введите название приложения, выберите язык по умолчанию и другие сведения о приложении.
- Нажмите «Создать приложение» . Это создаст приложение в консоли Google Play.
Теперь вы можете загрузить подписанный пакет приложения-образца.
Загрузите подписанный пакет приложения.
- Загрузите подписанный пакет приложения во внутренний тестовый трек 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 USD
- Для
- Выберите все страны, кроме
- Нажмите «Активировать» . Это сделает ваш разовый продукт доступным для покупки .
Примечание : Региональная валюта цены отображается в зависимости от страны, указанной пользователем в настройках 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. Интеграция с проблемно-ориентированным обучением.
Для интеграции вашего приложения с 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. Этот список содержит 2 варианта покупки ( вариант покупки и вариант аренды ), которые были настроены в 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 Billing.
7. Варианты тестовой покупки
Прежде чем сделать ваши разовые продукты доступными в работающем приложении, вы можете протестировать интеграцию с Play Billing, используя тестеры лицензий и Play Billing Lab .
Вы узнаете, как проверить локализацию цен и доступность приложения, если оно доступно только в некоторых регионах, при этом цена для каждого региона будет разной.
Предварительные требования
- Добавьте средство проверки лицензий в консоль Google Play, а затем включите его для внутреннего тестирования.
- Загрузите и установите приложение Play Billing Lab на свой телефон или эмулятор.
- Запустите созданное вами ранее тестовое приложение на своем телефоне или эмуляторе.
Проверьте региональные цены на варианты покупки.
Чтобы проверить региональные цены на варианты покупки, выполните следующие действия:
- Откройте приложение Play Billing Lab и войдите в систему как пользователь, тестирующий лицензии.
- В настройках конфигурации нажмите «Изменить» , выберите страну
France, а затем нажмите «Применить» . Здесь мы выбираем страну Play, которая определяет валюту, отображаемую в приложении. - Закройте и снова откройте демонстрационное приложение. Теперь оно должно отображать валюту для покупки и аренды во
Franceв евро.
Чтобы проверить наличие другой страны, выберите Spain на шаге 2, а затем выполните шаг 3.
Видео с тестированием Play Billing Lab
В следующем видеоролике показаны этапы тестирования региональных цен с использованием тестового приложения.
8. Дальнейшие шаги
- Узнайте, как максимально эффективно использовать интеграцию с системой оплаты за использование приложения .
- Узнайте, как анализировать причины снижения количества покупок товара .
- Не забудьте следовать передовым методам проверки и обработки покупок в вашей защищенной серверной части, как только пользователи начнут приобретать эти товары.
Справочная документация
9. Поздравляем!
Поздравляем! Вы успешно создали новый разовый продукт в консоли Google Play, настроили вариант покупки и протестировали процесс покупки с помощью Play Billing Lab. Теперь вы лучше понимаете гибкий каталог продуктов Google Play для разовых покупок.
Опрос
Мы очень ценим ваши отзывы об этом практическом занятии. Пожалуйста, уделите несколько минут заполнению нашего опроса.