В прошлом посте мы разобрались, что такое внутренние цифровые покупки в приложении и какие есть нюансы их проведения в разных сторах. Сегодня на практике посмотрим, как можно интегрировать процесс in-app оплат в Flutter-приложение.
Для интеграции in-app покупок в приложение на Android и iOS существует плагин in_app_purchase. Он разработан командой Flutter и имеет отличную репутацию (2,24 тыс лайков и более 123 тыс скачиваний). При правильной интеграции его можно смело использовать в продакшн приложениях.
Какой же функционал дает эта библиотека? Разберемся!
1️⃣ Проверка доступности покупок
Покупки на устройстве доступны только тогда, когда платежная платформа активна и не нарушено подкючение устройства к стору, через который будет осуществленна оплата. Метод вернет true или false в зависимости от результатов проверки.
final isAvailable = await InAppPurchase.instance.isAvailable();
2️⃣ Получение данных о конкретных продуктах
Вы можете запросить в магазине основные данные определенных продуктов по их идентификаторам. В случае, если продукт с таким id был найден, сервис вернет его основную информацию — заголовок, описание, цену, валюту. Если какие-то идентификаторы не были обнаружены, библиотека вернет их общим списком.
final data =
await InAppPurchase.instance.queryProductDetails({'id1', 'id2', 'id3'});
final products = data.productDetails;
final notFoundIds = data.notFoundIDs;
3️⃣ Осуществление покупки
Продукты бывают двух типов — consumable (расходуемые продукты, например, жизни в игре) и non consumable (одноразовые покупки доступа, такие как подписки).
Для оплаты каждого из типов существуют отдельные методы, которые вызывают нативные окна стров для оплаты. Они требуют данных о продукте для покупки. Опционально можно передать некоторый идентификатор пользователя, чтобы покупку в будущем можно было восстановить на другом устройстве.
await InAppPurchase.instance.buyNonConsumable(
purchaseParam: PurchaseParam(
productDetails: product,
applicationUserName: userId,
),
);
await InAppPurchase.instance.buyConsumable(
purchaseParam: PurchaseParam(
productDetails: product,
applicationUserName: userId,
),
);
4️⃣ Восстановление покупки
Нередко бывает, что пользователь делает покупку на одном устройстве, а через какое-то время меняет его на другое. В таких случаях необходимо давать возможность восстановить доступ к ранее оплаченным покупкам. Для этого библиотека дает доступ к методу восстановления.
await
InAppPurchase.instance.restorePurchases(applicationUserName: userId);
5️⃣ Получение обновлений о покупках
С помощью потока событий purchaseStream плагин дает возможность отслеживать обновления о текущих покупках. По завершении метода осуществления или восстановления покупки, данные о ней попадают в этот стрим.
InAppPurchase.instance.purchaseStream.listen((purchaseDetails) {
// обработка данных о покупках в МП
});С помощью этих 5 основных функций вы легко можете интегрировать процесс покупки в ваше приложение.
❗️Если вы планируете публиковать свое приложение не только в Google Play и AppStore, важно понимать, что для других сторов необходима другая имплементация и, соответственно, другие библиотеки. Например, для RuStore подойдет flutter_rustore_billing, а для AppGallery — huawei_iap.
Делитесь в комментариях своим опытом интеграции in-app покупок.