Google Play Billing: одноразові покупки для Android

Google Play Billing: одноразові покупки для Android Уявіть: додаток вже в студії, модерація відхиляє білд через застарілу версію BillingClient. Або гірше — покупки проходять, але Google повертає гроші через три дні, тому що розробник забув викликати acknowledgePurchase(). Такі випадки — не рідкіс

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Google Play Billing: одноразові покупки для Android
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Google Play Billing: одноразові покупки для Android

Уявіть: додаток вже в студії, модерація відхиляє білд через застарілу версію BillingClient. Або гірше — покупки проходять, але Google повертає гроші через три дні, тому що розробник забув викликати acknowledgePurchase(). Такі випадки — не рідкість. У нашій практиці був клієнт, який втрачав до 30% виручки через неправильну обробку pending-транзакцій. Після переходу на Billing Library 6 та впровадження серверної верифікації дохід зріс на 15%. Ми допомагаємо уникнути цих помилок та гарантуємо проходження модерації з першого разу. У цій статті ви дізнаєтеся, як правильно інтегрувати одноразові покупки, уникнувши типових пасток.

Офіційна документація Google Play Billing підкреслює: acknowledgement обов'язковий для всіх покупок. Billing Library 6 став обов'язковим для нових додатків. Його асинхронне API вимагає переписування існуючого коду. Синхронний queryPurchases замінено на queryPurchasesAsync, додано PendingPurchasesParams для відкладених транзакцій, а acknowledge став обов'язковим. Без його виклику протягом 72 годин Google автоматично відкликає покупку. Розглянемо ключові аспекти інтеграції.

One-time products: INAPP vs DURABLE

У Play Billing 6+ одноразові покупки діляться на два підтипи:

  • INAPP (старий тип) — consumables і non-consumables в одному кошику.
  • DURABLE — явно non-consumable, новий тип з BillingClient 6.

На практиці для «прибрати рекламу» та «відкрити рівні» використовуємо ProductType.INAPP з acknowledged-статусом як маркером володіння. DURABLE зручний, коли потрібно строго розділити типи продуктів в аналітиці.

Критерій INAPP DURABLE
Тип продукту Будь-який (consumable/non-consumable) Тільки non-consumable
Історія До Billing 6 З'явився в Billing 6
Acknowledgement Обов'язковий Обов'язковий
Рекомендація Універсальний Для чіткого розділення

Чому acknowledgement — критичний крок?

Кожна покупка повинна бути підтверджена протягом 3 днів через acknowledgePurchase() або consumePurchase() (для consumables). Якщо не підтвердити — Google автоматично повертає гроші та відкликає покупку. Це не очевидно з документації, але строго перевіряється при модерації. Втрата виручки може досягати 150 000 рублів на рік при 1000 платячих користувачів.

Приклад коду підтвердження покупки
val billingClient = BillingClient.newBuilder(context) .setListener { billingResult, purchases -> purchases?.forEach { purchase -> if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) { if (!purchase.isAcknowledged) { val params = AcknowledgePurchaseParams.newBuilder() .setPurchaseToken(purchase.purchaseToken) .build() billingClient.acknowledgePurchase(params) { result -> if (result.responseCode == BillingClient.BillingResponseCode.OK) { unlockFeature(purchase.products.first()) } } } } } } .enablePendingPurchases( PendingPurchasesParams.newBuilder() .enableOneTimeProducts() .build() ) .build() 

enablePendingPurchases() тепер обов'язковий. Без нього BillingClient.startConnection() кидає виняток. Pending-покупки (оплата готівкою через партнерів Google Pay у деяких регіонах) переходять в PURCHASED не одразу — потрібно слухати оновлення через PurchasesUpdatedListener.

Як відновити покупки після переустановки?

При переустановці додатку покупки відновлюються через queryPurchasesAsync(QueryPurchasesParams). Викликати при кожному старті:

val params = QueryPurchasesParams.newBuilder() .setProductType(BillingClient.ProductType.INAPP) .build() billingClient.queryPurchasesAsync(params) { billingResult, purchaseList -> purchaseList.filter { it.purchaseState == Purchase.PurchaseState.PURCHASED && it.isAcknowledged }.forEach { restoreAccess(it) } } 

Як вибрати між клієнтською та серверною верифікацією?

Критерій Тільки клієнт Серверна верифікація
Надійність Низька (можна підробити) Висока (Google Play Developer API)
Відновлення на іншому пристрої Ні Так
Захист від фроду Ні Так
Складність Мінімальна Середня (потрібен бекенд)

Серверна верифікація в 2 рази надійніша за клієнтську та виключає витік доходів: при 1000 платячих користувачів це економить до 15% виручки. Ми завжди реалізуємо серверну частину — за 1 день піднімаємо інтеграцію з Google Play Developer API.

Процес роботи: від аудиту до релізу

  1. Аудит поточного коду — знаходимо застарілі виклики, помилки обробки станів.
  2. Проектування — вибираємо INAPP або DURABLE, проектуємо флоу покупки.
  3. Інтеграція — підключаємо Billing Library 6, реалізуємо acknowledgement, pending-покупки, відновлення.
  4. Серверна верифікація — налаштовуємо ендпоінт, розгортаємо перевірку токенів.
  5. Тестування — через License Testing в Play Console, перевіряємо всі стани.
  6. Реліз — публікуємо оновлення, гарантуємо проходження модерації.

Що входить в роботу

  • Вихідний код інтеграції (Kotlin/Java з коментарями)
  • API-ендпоінт для серверної верифікації (Node.js/Python/PHP)
  • Документація з флоу покупки та тестування
  • Допомога в налаштуванні тестових акаунтів
  • Підтримка при релізі (2 тижні)

Типові помилки при інтеграції

Розробники часто пропускають acknowledgePurchase — тоді гроші повертаються через 3 дні. Відсутність enablePendingPurchases викликає виліт при підключенні. Якщо не відновити покупки при переустановці, користувачі втрачають доступ. Клієнтська верифікація без серверної дозволяє підробити відповідь. Кожна з цих помилок може коштувати бізнесу до 20 000 рублів на налагодження та втрати лояльності.

Ми гарантуємо, що жодна з цих помилок не потрапить в продакшн. Наша команда має 5+ років досвіду в монетизації мобільних додатків. Ми розробили систему безпечної верифікації, яка скорочує час інтеграції на 30% порівняно з самостійною розробкою. Сертифіковані спеціалісти (Google Play Console Administrator) підтверджують компетенції.

Терміни інтеграції — 2–3 робочих дні на клієнтську частину, +1 день на серверну верифікацію. Вартість розраховується індивідуально. Якщо вам потрібно впровадити одноразові покупки в додаток — замовте консультацію. Ми оцінимо ваш проект за 1 день та запропонуємо оптимальне рішення. Зв'яжіться з нами, щоб обговорити деталі.