Опубликовано: 2 декабря 2020 г.
Помимо того, что ваше приложение позволяет вашему приложению продавать цифровые товары и подписки в Play Store, Google Play Billing предлагает инструменты для управления вашим каталогом, ценами и подписками, полезные отчеты и процесс оформления заказа на базе Play Store, который уже знаком вашим пользователям. Это требование для приложений, опубликованных в Play Store и продающих цифровые товары.
Google Play Billing API имеет собственную терминологию и включает в себя клиентские и серверные компоненты. В этом разделе рассматривается лишь небольшая часть API, предназначенная для использования API цифровых товаров и доверенной веб-активности. Обязательно прочтите документацию по биллингу Google Play и разберитесь в ее концепциях, прежде чем интегрировать ее в рабочее приложение.
Основной поток
Чтобы предоставлять цифровые товары через Play Store, настройте свой каталог в Play Store и подключите Play Store в качестве способа оплаты из вашего PWA.
Вы можете сделать это в интерфейсе Play Store следующим образом:
- Нажмите «Продукты» в меню Play Console. Просмотрите существующие продукты и подписки в приложении.
- Нажмите Создать продукт , чтобы добавить новый продукт.
- Добавьте идентификатор продукта, название, описание и цену. Создавайте понятные и легко запоминающиеся идентификаторы продуктов, поскольку они понадобятся вам в дальнейшем. Идентификаторы нельзя изменить после создания.
- При создании подписки вам также необходимо указать расчетный период. Вы можете перечислить преимущества подписки и добавить такие функции, как бесплатные пробные версии, начальные цены, льготный период и возможность повторной подписки.
- Нажмите «Активировать» , чтобы сделать продукт доступным.
При желании вы можете добавлять свои продукты с помощью Play Developers API .
После настройки каталога следующим шагом будет настройка процесса оформления заказа из 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. Это возвращает экземпляр службы для Google Play Billing, и другие поставщики могут реализовать поддержку API цифровых товаров и иметь другие идентификаторы.
Наконец, вызовите getDetails()
по ссылке на объект Google Play Billing, передав SKU для элемента в качестве параметра. Метод возвращает объект сведений, содержащий цену и валюту товара, который может отображаться пользователю.
Запустите процесс покупки
API запроса платежа обеспечивает потоки покупок в Интернете, а также используется для интеграции биллинга Google Play. Ознакомьтесь с статьей «Как работает API запросов платежей», чтобы узнать больше, если вы новичок в API запросов платежей.
Чтобы использовать API с биллингом Google Play, вам необходимо добавить платежный инструмент, поддерживающий метод 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');
}
}