Используйте биллинг Google Play

Опубликовано: 2 декабря 2020 г.

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

API Google Play Billing имеет собственную терминологию и включает клиентские и бэкэнд-компоненты. В этом разделе рассматривается лишь небольшая часть API, которая относится к использованию API Digital Goods и Trusted Web Activity. Обязательно прочтите документацию по Google Play Billing и разберитесь в ее концепциях, прежде чем интегрировать ее в производственное приложение.

Основной поток

Чтобы предоставлять цифровые товары через Play Store, настройте свой каталог в Play Store и подключите Play Store в качестве способа оплаты из вашего PWA.

Это можно сделать в интерфейсе Play Store следующим образом:

  1. Нажмите «Продукты» в меню Play Console. Просмотрите ваши существующие продукты и подписки в приложении. Шаг 1: Найдите раздел «Продукты».
  2. Нажмите «Создать продукт» , чтобы добавить новый продукт. Шаг 2: Посетите интерфейс «Продукты», чтобы добавить новые продукты.
  3. Добавьте идентификатор продукта, название, описание и цену. Создавайте осмысленные и легко запоминающиеся идентификаторы продуктов, так как они вам понадобятся позже. После создания идентификаторы нельзя изменить. Множество пустых полей для каждого продукта.
  4. При создании подписки вам также необходимо указать расчетный период. Вы можете перечислить преимущества подписки и добавить функции, такие как бесплатные пробные версии, ознакомительные цены, льготный период и возможность повторной подписки.
  5. Нажмите «Активировать» , чтобы сделать продукт доступным.

При желании вы можете добавлять свои продукты с помощью API разработчиков Play .

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

Получите цену товара с помощью API цифровых товаров

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

// The SKU for the product, as defined in the Play Store interface
async function populatePrice(sku) {
  try {
    // Check if the Digital Goods API is supported by the browser.
    if (window.getDigitalGoodsService) {
      // The Digital Goods API can be supported by other Payments provider.
      // In this case, we're retrieving the Google Play Billing provider.
      const service =
          await window.getDigitalGoodsService("https://play.google.com/billing");

      // Fetch product details using the `getDetails()` method.
      const details = await service.getDetails([sku]);

      if (details.length === 0) {
        console.log(`Could not get SKU: "${sku}".`);
        return false;
      }

      // The details contain both the price and the currenncy.
      item = details[0];
      const value = item.price.value;
      const currency = item.price.currency;

      const formattedPrice = new Intl.NumberFormat(navigator.language, {
        style: 'currency', currency: currency }).format(value);

      // Display the price to the user.
      document.getElementById("price").innerHTML = formattedPrice;
    } else {
      console.error("Could not get price for SKU \"" + sku + "\".");
    }
  } catch (error) {
    console.log(error);
  }
  return false;
}

Поддержку API цифровых товаров можно обнаружить, проверив, доступен ли getDigitalGoodsService() для объекта window .

Затем вызовите window.getDigitalGoodsService() с идентификатором Google Play Billing в качестве параметра. Это возвращает экземпляр службы для Google Play Billing, а другие поставщики могут реализовать поддержку API Digital Goods и иметь другие идентификаторы.

Наконец, вызовите getDetails() для ссылки на объект Google Play Billing, передавая SKU для элемента в качестве параметра. Метод возвращает объект Detail, содержащий как цену, так и валюту для элемента, которые могут быть отображены пользователю.

Начать процесс покупки

API запроса оплаты позволяет осуществлять покупки в Интернете, а также используется для интеграции Google Play Billing. Ознакомьтесь с этим Как работает API запроса оплаты, чтобы узнать больше, если вы новичок в API запроса оплаты.

Чтобы использовать API с Google Play Billing, вам необходимо добавить платежный инструмент, который имеет поддерживаемый метод под названием https://play.google.com/billing . Добавьте SKU как часть данных для инструмента:

const supportedInstruments = [{
  supportedMethods: "https://play.google.com/billing",
  data: {
    sku: sku
  }
}];

Затем создайте объект PaymentRequest как обычно и используйте API как обычно.

const request = new PaymentRequest(supportedInstruments, details);

Подтвердите покупку

После завершения транзакции используйте API цифровых товаров для подтверждения платежа. Объект ответа от PaymentRequest содержит токен, который вы можете использовать для подтверждения транзакции:

const response = await request.show();
const token = response.details.token;
const service = await window.getDigitalGoodsService("https://play.google.com/billing");
await service.acknowledge(token, 'onetime');

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

Проверьте существующие права

Пользователь мог использовать промокод или иметь существующую подписку на ваш продукт. Чтобы проверить, что у пользователя есть соответствующие права, вы можете вызвать команду listPurchases() в службе цифровых товаров. Это вернет все покупки, которые ваш клиент сделал в вашем приложении. Это также будет местом подтверждения любых неподтвержденных покупок, чтобы гарантировать, что пользователь правильно использует свои права.

const purchases = await itemService.listPurchases();
for (p of purchases) {
  if (!p.acknowledged) {
    await itemService.acknowledge(p.purchaseToken, 'onetime');
  }
}