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

1. Введение

В этом практическом занятии вы сосредоточитесь на создании разового продукта (OTP) и добавлении предложения предварительного заказа для этого продукта.

Примечание : Перед началом этого практического занятия вам необходимо запросить доступ к функции предварительного заказа, заполнив форму заявки на участие в программе EAP (One-Time Products EAP Interest Form) .

Аудитория

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

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

Если вы новичок в сфере разовых продуктов, рекомендуется пройти лабораторную работу « Открытие новых рынков с помощью регионального ценообразования на продукцию» .

Что вы узнаете...

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

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

  • Доступ к консоли Google Play возможен только с учетной записью разработчика. Если у вас нет учетной записи разработчика, вам необходимо ее создать .
  • Пример приложения для этого практического занятия, который вы можете скачать с GitHub .
  • Android Studio .

2. Создайте демонстрационное приложение.

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

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

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

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

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

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

Строить

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

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

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

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

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

3. Создайте одноразовый пароль (OTP) при предварительном заказе в Play Console.

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

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

Для создания приложения:

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

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

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

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

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

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

Теперь создайте разовый продукт, который вы хотите, чтобы пользователи приобрели.

  1. Откройте демонстрационное приложение в Google Play Console и перейдите в раздел «Монетизация через Play» > «Продукты» > «Разовые продукты» .
  2. Нажмите «Создать разовый продукт» .
  3. Введите следующие данные о товаре:
    • Идентификатор продукта: Введите уникальный идентификатор. Например, upcoming_movie_1 .
    • (Необязательно) Теги: Добавьте соответствующие теги.
    • Название: Введите название продукта. Например, Product Movie .
    • Описание: Введите описание товара. Например, Product Description .
    • (Необязательно) Добавьте изображение значка: Загрузите значок, представляющий ваш продукт.
    Примечание: В рамках данного практического занятия вы можете пропустить настройку раздела «Налоги, соответствие требованиям и программы» .
  4. Нажмите «Далее» .
  5. Добавьте вариант покупки и настройте его региональную доступность. Для разового продукта необходим как минимум один вариант покупки, который определяет способ предоставления права пользования, его цену и региональную доступность. В этом практическом задании мы добавим стандартный вариант покупки для продукта. В разделе « Варианты покупки» введите следующие данные:
    • Идентификатор варианта покупки: Введите уникальный идентификатор. Например, buy-movie .
    • Тип покупки: Выберите «Купить» .
    • (Необязательно) Теги: Добавьте теги, относящиеся к данному варианту покупки.
    • (Необязательно) Нажмите «Дополнительные параметры» , чтобы настроить дополнительные параметры. В рамках данного практического занятия вы можете пропустить настройку дополнительных параметров.
  6. Далее необходимо настроить региональную доступность и цену для варианта покупки. В разделе «Региональная доступность» вы укажете регионы, где ваш продукт доступен, включая регионы, где ваше приложение еще не опубликовано. По умолчанию вариант покупки будет доступен во всех регионах. В разделе «Доступность и цены» нажмите «Изменить доступность и доступ» .
    1. Выберите «Установить недоступным» .
    Обратите внимание, что все регионы автоматически выбираются и помечаются как «Доступные» .
    1. Снимите выделение только с страны United States , а затем нажмите «Установить как недоступное» . Теперь этот разовый продукт будет доступен только в United States .
    2. В раскрывающемся списке «Все регионы» выберите «Доступные страны и регионы» . Вы должны увидеть только United States .
    3. Нажмите на значок «Цена» . Откроется диалоговое окно для установки цены.
    4. Введите 10 долларов США и нажмите «Сохранить» .
  7. Нажмите « Сохранить как черновик» .

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

Добавить предложение предварительного заказа

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

Добавление предложения предварительного заказа включает в себя следующие 2 шага:

  1. Подготовьте опцию «Купить » для предварительного заказа.
  2. Добавьте предложение предварительного заказа в качестве варианта покупки.

Подготовьте опцию «Купить» для предварительного заказа.

  1. Откройте демонстрационное приложение в Google Play Console и перейдите в раздел «Монетизация через Play» > «Продукты» > «Разовые продукты» .
  2. На странице «Разовые товары» нажмите стрелку вправо для вашего товара ( upcoming_movie_1 ). Откроется страница редактирования разового товара .
  3. Нажмите стрелку вправо для созданного вами ранее варианта buy-movie . Откроется страница редактирования варианта покупки .
  4. Нажмите «Изменить доступность и разрешение» , затем выберите «Установить как доступный и разрешить пользователям делать предварительные заказы» .
  5. В раскрывающемся списке «Все регионы» выберите «Доступные страны и регионы» . Здесь должны отображаться только United States , которые вы настроили ранее.
  6. Выберите страну, а затем нажмите «Установить доступность только для предварительного заказа» .
  7. Нажмите « Сохранить ».

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

Добавить предложение предварительного заказа

  1. Откройте демонстрационное приложение в Google Play Console и перейдите в раздел «Монетизация через Play» > «Продукты» > «Разовые продукты» .
  2. На странице «Разовые заказы» нажмите «Добавить предложение» > «Предзаказать» для вашего товара ( upcoming_movie_1 ). Откроется страница добавления предзаказа .
  3. Введите данные предварительного заказа:
    • Идентификатор предварительного заказа: Введите preorder-offer-1 .
    • (Необязательно) Добавьте скидку: вы можете выбрать «Нет» , «Процент» или «Абсолютная скидка». Для целей данного практического занятия выберите «Нет» .
    • (Необязательно) Теги: Добавьте соответствующие теги.
    • Дата и время начала: укажите дату как минимум на 3 дня вперед.
    • Дата и время окончания: Установите дату не позднее, чем через 24 часа после даты начала.
    • Доступность после предварительного заказа: выберите, станет ли товар доступен сразу после окончания периода предварительного заказа или в определенную дату/время позже.
    • (Необязательно) Гарантия самой низкой цены: выберите этот параметр, если хотите, чтобы с пользователей взималась самая низкая цена между ценой предварительного заказа и ценой на момент релиза. Это может стать веским стимулом для первых покупателей.
  4. Нажмите « Сохранить ».
  5. Откройте страницу редактирования разового продукта для вашего разового продукта (upcoming_movie_1).
  6. Нажмите «Активировать» , чтобы выбрать опцию покупки фильма ( buy-movie ).
  7. Нажмите «Активировать» для предварительного заказа ( preorder-offer-1 ) в разделе «Купить». Это активирует предложение предварительного заказа и сделает его доступным с даты, которую вы ранее указали в деталях предварительного заказа.

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

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

4. Интеграция с проблемно-ориентированным обучением.

Для интеграции вашего приложения с Play Billing Library (PBL) выполните следующие шаги:

  1. Добавьте зависимость Play Billing Library в пример приложения.
    dependencies {
    val billing_version = "8.1.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());
                }
            }
            });
    }
    
    Получение информации об одноразовом продукте (в данном примере upcoming_movie_1 ) из ProductDetails даст вам ответ, похожий на следующий:
    {
        "productId": "upcoming_movie_1",
        "type": "inapp",
        "title": "Purrfect Mayhem: The Final Playback (Movies All Day | Play Samples)",
        "name": "Purrfect Mayhem: The Final Playback",
        "description": "Yolo and Thorne must reach the original broadcasting site to initiate the \"Final Playback\" and save the timeline. Follow them through their race against the Clockinators.",
        "skuDetailsToken": "<---skuDetailsToken--->",
        "oneTimePurchaseOfferDetails": {},
        "oneTimePurchaseOfferDetailsList": [
            {
                "priceAmountMicros": 8500000,
                "priceCurrencyCode": "USD",
                "formattedPrice": "$8.50",
                "offerIdToken": "<---offerIdToken--->",
                "offerId": "preorder",
                "purchaseOptionId": "buy-option",
                "offerTags": [],
                "validTimeWindow": {
                    "startTimeMillis": 1756771200000,
                    "endTimeMillis": 1785542400000
                },
                "preorderDetails": {
                    "preorderReleaseTimeMillis": 1785542400000,
                    "preorderPresaleEndTimeMillis": 1785542400000
                }
            }
        ]
    }
    
    Обратите внимание, что подробная информация о предложении предварительного заказа доступна в списке oneTimePurchaseOfferDetailsList . В этом списке указан 1 вариант покупки ( buy-option ), для которого в Play Console было настроено предложение предварительного заказа. Каждый вариант покупки можно однозначно идентифицировать по его offerIdToken .
  5. Получите токен предложения вместе с подробной информацией о предварительном заказе. Токен предложения необходим для запуска процесса оплаты на шаге 6.
    @Override
    public void onProductDetailsResponse(List<ProductDetails> productDetailsList) {
    
    if (productDetailsList != null && !productDetailsList.isEmpty()) {
    
    // Process productDetailsList returned by QueryProductDetailsResult
    for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) {
      for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails :
          productDetails.getOneTimePurchaseOfferDetailsList()) {
        // Checks if the offer is a preorder offer.
        if (oneTimePurchaseOfferDetails.getPreorderDetails() != null) {
          // Process the returned PreorderDetails
          OneTimePurchaseOfferDetails.PreorderDetails preorderDetails =
              oneTimePurchaseOfferDetails.getPreorderDetails();
          // Get preorder release time in millis.
          long preorderReleaseTimeMillis = preorderDetails.getPreorderReleaseTimeMillis();
          // Get preorder presale end time in millis.
          long preorderPresaleEndTimeMillis = preorderDetails.getPreorderPresaleEndTimeMillis();
          // Get offer ID
            String offerId = oneTimePurchaseOfferDetails.getOfferId();
          // Get the associated purchase option ID
          if (oneTimePurchaseOfferDetails.getPurchaseOptionId() != null) {
            String purchaseOptionId = oneTimePurchaseOfferDetails.getPurchaseOptionId();
          }
        }
      }
      }
      } 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);
    }
    

5. Варианты тестовой покупки

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

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

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

Справочная документация

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

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

Опрос

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