Откройте новые рынки с помощью регионального ценообразования продукции

1. Введение

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

Аудитория

Эта лабораторная работа предназначена для разработчиков приложений для Android, которые хотят использовать Play Console для управления своим одноразовым каталогом продуктов.

Чему вы научитесь...

  • Модель одноразового объекта продукта .
  • Как пользоваться Google Play Console и управлять своим одноразовым каталогом продуктов.
  • Как перевести одноразовую информацию о продукте на разные языки без лишних затрат.
  • Как настроить региональную доступность и цены для разовых продуктов.
  • Как использовать API Play Billing Library для запроса разовой информации о продукте.
  • Как тестировать разовые продукты с помощью Play Billing Lab.

Что вам понадобится...

2. Однократная премьера продукта

Объектная модель одноразового продукта обеспечивает большую гибкость в продаже продуктов и упрощает управление ими. Объектная модель разделяет то, что продаётся, и то, как это продаётся, позволяя предлагать один и тот же продукт/услугу по разным ценам и разными способами. Объектная модель имеет три уровня иерархии:

  • Одноразовый продукт — объект продукта определяет, что покупает пользователь.
  • Вариант покупки — вариант покупки определяет, как пользователю предоставляется право на использование, его цену и где (в каком регионе) продукт будет доступен. Один и тот же продукт может иметь несколько вариантов покупки, которые могут иметь разные цены в разных регионах.
  • Предложение — предложения могут влиять на цену варианта покупки, с которым они связаны, и могут использоваться для моделирования скидок или предварительного заказа. Для одного варианта покупки может быть предусмотрено несколько предложений.

На следующей диаграмме показана модель одноразового объекта продукта.

codelab-otp-model.png Рисунок 1 : Модель одноразового объекта.

Более подробную информацию смотрите в обзоре одноразовых продуктов .

3. Создайте пример приложения

В этой лабораторной работе используется пример приложения для Android, демонстрирующий управление одноразовыми продуктами. Пример приложения представляет собой полнофункциональное приложение для Android с полным исходным кодом, демонстрирующим следующие аспекты:

  • Интеграция приложения с PBL
  • Получение информации о разовых продуктах и ​​связанных с ними вариантах покупки
  • Управляйте потоками закупок с региональным ценообразованием

В следующем демонстрационном видео показано, как будет выглядеть и вести себя пример приложения после его развертывания и запуска.

Если вы уже знакомы с одноразовыми продуктами и Play Billing Library (PBL), вы можете загрузить пример приложения и поэкспериментировать с ним.

Предварительные условия

Перед сборкой и развертыванием примера приложения выполните следующие действия:

Строить

Целью этого этапа сборки является создание подписанного файла пакета приложения Android для примера приложения.

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

  1. Загрузите пример приложения с GitHub .
  2. Соберите пример приложения . Перед сборкой измените имя пакета примера приложения, а затем выполните сборку. Если в Play Console есть пакеты других приложений, убедитесь, что имя пакета, указанное для примера приложения, уникально.

    Примечание : при сборке примера приложения создаётся только APK-файл, который можно использовать для локального тестирования. Однако при запуске приложения не отображаются товары и цены, поскольку они не настроены в Play Console.
  3. Создайте подписанный пакет приложений для Android.
    1. Сгенерируйте ключ загрузки и хранилище ключей
    2. Подпишите свое приложение с помощью ключа загрузки
    3. Настроить подписание приложения Play

Следующий шаг — загрузить пакет приложения Android в Google Play Console.

4. Создайте одноразовый продукт в Play Console.

Для создания одноразовых продуктов в Google Play Console необходимо иметь приложение в Play Console. Создайте приложение в Play Console, а затем загрузите ранее созданный подписанный пакет приложений.

Создать приложение

Чтобы создать приложение:

  1. Войдите в Google Play Console , используя свою учетную запись разработчика.
  2. Нажмите «Создать приложение» . Откроется страница «Создать приложение» .
  3. Введите название приложения, выберите язык по умолчанию и другие сведения, связанные с приложением.
  4. Нажмите «Создать приложение» . Это создаст приложение в Google Play Console.

Теперь вы можете загрузить подписанный пакет примера приложения.

Загрузите подписанный пакет приложения

  1. Загрузите подписанный комплект приложений во внутреннюю тестовую версию Google Play Console . Только после загрузки вы сможете настроить функции монетизации в Play Console.
  2. Нажмите Тестирование и выпуск > Тестирование > Внутренний выпуск > Создать новый выпуск .
  3. Введите название релиза и загрузите подписанный APK-файл.
  4. Нажмите кнопку «Далее» , а затем нажмите кнопку «Сохранить и опубликовать» .

Теперь вы можете создавать свои одноразовые продукты.

Создать одноразовый продукт

Чтобы создать одноразовый продукт:

  1. В консоли Google Play в левом навигационном меню выберите Монетизация с Play > Продукты > Разовые продукты .
  2. Нажмите Создать одноразовый продукт .
  3. Введите следующие данные о продукте:
    • Идентификатор продукта: введите уникальный идентификатор. Например, trending_movie_1 .
    • (Необязательно) Теги: добавьте соответствующие теги.
    • Имя: Введите название продукта. Например, Product Movie .
    • Описание: Введите описание товара. Например, Product Description .
    Ручной перевод названия и описания продукта
    По умолчанию название и описание продукта указаны на английском (США) языке (en-US ). Вы также можете вручную ввести название и описание на других языках. Чтобы ввести данные, нажмите «Управление переводами» , выберите языки, для которых вы хотите ввести перевод, и нажмите «Применить» . На следующем изображении показана опция «Управление переводами» . управлять-переводами.png Рисунок 2 : Управление переводом.

    Выбранные вами языки появятся в раскрывающемся списке. Выберите каждый язык и введите соответствующее название и описание на выбранном языке. Вы также можете бесплатно автоматически перевести название и описание товара. Подробнее см. в разделе «Перевод разовых товаров» этой практической работы.

    Примечание : для целей этой лабораторной работы вы можете пропустить настройку поля «Значок» и раздела « Налоги, соблюдение нормативных требований и программы» .
  4. Нажмите кнопку «Далее» .
  5. Добавьте вариант покупки и настройте его региональную доступность. Для одноразового продукта требуется как минимум один вариант покупки, который определяет способ предоставления права, его цену и региональную доступность. В этой практической работе мы добавим стандартный вариант покупки для продукта.

    В разделе «Вариант покупки» введите следующие данные:
    • Идентификатор варианта покупки: введите уникальный идентификатор. Например, buy-movie .
    • Тип покупки: выберите «Купить» .
    • (Необязательно) Теги: добавьте теги, относящиеся к этому варианту покупки.
    • (Необязательно) Нажмите «Дополнительные параметры» , чтобы настроить дополнительные параметры. В рамках этой практической работы настройку дополнительных параметров можно пропустить.
  6. Далее необходимо настроить региональную доступность и цену для варианта покупки. В разделе региональной доступности укажите регионы, в которых доступен ваш продукт, включая регионы, где ваше приложение ещё не опубликовано. По умолчанию возможность покупки будет доступна во всех регионах.

    В разделе «Доступность и цены» нажмите «Изменить доступность и доступ» > «Сделать недоступным» . Обратите внимание, что для всех регионов по умолчанию установлено значение «Доступно» .
    1. Выберите все страны, кроме France , Spain и United States , затем нажмите «Сделать недоступным» .
    2. В раскрывающемся списке « Все регионы» выберите «Доступные страны и регионы» . Будут показаны только страны, выбранные вами на предыдущем шаге.
    3. Для каждой из доступных стран нажмите значок редактирования в столбце «Цена» . Откроется диалоговое окно для редактирования цены. Введите и сохраните следующие цены:
      • Для France введите 10 евро.
      • Для Spain введите 8 евро.
      • Для United States введите 13 долларов США.
  7. Нажмите «Активировать» . После этого ваш одноразовый продукт станет доступен для покупки через опцию «Купить» .

Примечание : Валюта региональной цены отображается в зависимости от страны, выбранной пользователем в Play. Например, если в качестве страны Play пользователя выбрана Франция, разовая цена продукта будет отображаться в евро.

Видео создания одноразового продукта

В следующем видео показаны одноразовые этапы создания продукта, описанные ранее.

Добавить возможность аренды с правом выкупа

Теперь добавьте возможность аренды с правом выкупа к ранее созданному одноразовому продукту.

  1. В консоли Google Play в левом навигационном меню выберите Монетизация с Play > Продукты > Разовые продукты .
  2. Нажмите стрелку вправо для продукта с идентификатором trending_movie_1 , который вы создали на предыдущем шаге.
  3. Нажмите Добавить вариант покупки .
  4. В разделе «Вариант покупки» введите следующие данные:
    • Идентификатор варианта покупки: введите rent-movie .
    • Тип покупки: выберите «Аренда» .
    • Срок аренды: выберите 48 часов.
    • Период начала аренды: выберите 24 часа.
    • (Необязательно) Теги: добавьте теги, относящиеся к этому варианту покупки.
    • (Необязательно) Нажмите «Дополнительные параметры» , чтобы настроить дополнительные параметры. В рамках этой практической работы настройку дополнительных параметров можно пропустить.
  5. Далее, аналогично опции «Купить/Покупить», настройте региональную доступность опции «Аренда». См. шаги 6 и 7 в предыдущем разделе. При настройке региональных цен задайте отдельную цену для аренды. Например:
    • France - 5 евро
    • Spain - 4 евро
    • United States - 7 долларов США.

5. Перевести одноразовую информацию о продукте

Вы можете перевести название и описание вашего продукта бесплатно, воспользовавшись функцией машинного перевода, доступной в Google Play Console.

Чтобы перевести название и описание, выполните следующие действия:

  1. В консоли Google Play в левом навигационном меню выберите «Развитие пользователей» > «Переводы» > «Магазин и продукты внутри приложения» .
  2. Нажмите «Создать заказ» .
  3. Выберите опцию «Машинный перевод бесплатно» и нажмите кнопку «Далее» .
  4. В разделе «Перевести на языки» выберите французский - fr-FR и испанский -es-ES , а затем нажмите «Далее» .
  5. Выберите «Разовые продукты и подписки» , затем нажмите «Перевести и просмотреть переводы» . Появится баннер с отказом от ответственности. Подтвердите отказ от ответственности.
  6. Теперь вы увидите список языков перевода. Нажмите «Просмотреть» и выберите нужный язык. Проверьте текст и нажмите «Применить все переводы» . Повторите этот шаг для всех языков, которые вы выбрали для перевода.

После перевода вы можете редактировать переведённый текст в Play Console. Чтобы отредактировать переведённый текст:

  1. Откройте страницу Разовые продукты > [ваш разовый продукт] > Редактировать разовый продукт > Редактировать сведения о разовом продукте .
  2. Выберите нужный язык в раскрывающемся списке. Отобразится текст на выбранном языке. На следующем изображении показан выбор языка для редактирования переведённого текста:

    edit-translations.png Рисунок 3 : Редактирование переведенного текста.
  3. При необходимости отредактируйте текст и нажмите кнопку Сохранить изменения .

Переведённый текст отображается пользователю в соответствии с языковыми настройками телефона . Например, если на телефоне установлен французский язык, название и описание товара будут отображаться на французском языке. На следующем примере показано, как и где будет отображаться переведённый текст на разных языках.

пост-перевод.png Рисунок 4 : Переведенный текст в вашем приложении.

Видео о настройке перевода

В следующем видео показаны этапы настройки перевода, описанные ранее.

6. Интеграция с PBL

Чтобы интегрировать ваше приложение с Play Billing Library (PBL) , выполните следующие действия:

  1. Добавьте зависимость Play Billing Library к примеру приложения.
    dependencies {
    val billing_version = "8.0.0"
    
    implementation("com.android.billingclient:billing-ktx:$billing_version")
    }
    
  2. Инициализируйте 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();
     }
    
  3. Подключитесь к 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");
            }
            });
    }
    
  4. Получите информацию о разовом продукте. После интеграции приложения с 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 .
  5. Получите токены предложений по аренде и покупке. Они понадобятся вам для запуска процесса выставления счетов на шаге 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);
        }
    }
    
  6. Запустите процесс выставления счетов.
    /**
     * 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 .

Вы узнаете, как протестировать локализацию цен и доступность приложения, если оно доступно только в некоторых регионах и для каждого региона установлена ​​своя цена.

Предварительные условия

Тестирование региональных цен для вариантов покупки

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

  1. Откройте приложение Play Billing Lab и войдите в систему как тестировщик лицензий.
  2. В настройках конфигурации нажмите «Изменить» , выберите страну France и нажмите «Применить» . Здесь мы выбираем страну воспроизведения, которая определяет валюту, отображаемую в приложении.
  3. Закройте и снова откройте пример приложения. Теперь валюта покупки и аренды во France должна отображаться в евро.

Чтобы проверить другую страну, выберите Spain на шаге 2, а затем выполните шаг 3.

Воспроизвести видео тестирования Billing Lab

В следующем видео показаны этапы тестирования региональных цен с использованием примера приложения.

8. Дальнейшие шаги

Справочные документы

9. Поздравляем!

Поздравляем! Вы успешно создали новый разовый продукт в Google Play Console, настроили вариант покупки и протестировали процесс покупки с помощью Play Billing Lab. Теперь вы лучше понимаете гибкий каталог продуктов Google Play для разовых покупок.

Опрос

Мы очень ценим ваши отзывы об этой лабораторной работе. Уделите несколько минут и пройдите наш опрос.